Armadilloフォーラム

X Window Systemの自動起動について

h-yuusuke

2022年1月25日 14時01分

お世話になっております。

掲題の件に関しまして、下記質問がございます。

製品マニュアル「9.1.9.2. X Window System を扱う」の図9.81および図9.82に記載されている手順を実施し、Armadillo-IOT G4に接続したディスプレイに添付画像ののものが表示されるところまでは確認できました。
次の段階として、Armadillo-IOT G4起動時にX Window Systemを自動起動させることを考えております。図9.81の起動コマンドをもとに/etc/atmark/containers/に.confファイルを作成したのですが、G4起動後にX Windowコンテナのステータスを確認すると「Exited」になっており、正常に起動できておりません。
X Window Systemを自動起動させるにはどのようにしたらいいでしょうか?

ファイル ファイルの説明
X Window System画面.png
コメント

at_akihito.irie

2022年1月25日 14時25分

入江です。

原因究明のため、自動起動に失敗した状態における以下2つを
送っていただけますでしょうか?

1. 作成した.confファイルの内容
2. podman logs <コンテナ名>を実行した時の出力

以上、よろしくお願いいたします。

at_dominique.m…

2022年1月25日 14時30分

h-yuusukeさん、

お世話になっています。 アットマークテクノのマルティネです。

/etc/atmark/containersのconfファイルの具体的な内容をここで送ってもらえませんでしょうか?
マニュアルの例では /bin/bashpodman run -ti で実行しますが、 podman_start コマンドで実行されるコンテナに-tiを渡さないために引数なしの /bin/bash コマンドはコンテナのコマンドとして向いてません。
set_command で適切なコマンドを設定する必要があります(例えばXの起動コマンド)

Xの場合、デフォルトのコンテナに含まれてませんので、一同コンテナに入れてコンテナをcommitしてから、 set_command X vt7 -retro で起動できると思います。

よろしくお願いします。

入江様、マルティネ様
ご返信ありがとうございます。

/etc/atmark/containersに作成した.confファイルは添付ファイルの"x_window.conf"となります。
また、podman logs <コンテナ名>を実行した時の出力内容は、添付ファイルの"podman_logs.log"となります。

よろしくおねがいいたします。

ファイル ファイルの説明
podman_logs.log
x_window.conf

at_dominique.m…

2022年1月25日 15時10分

h-yuusukeさん、

> また、podman logs <コンテナ名>を実行した時の出力内容は、添付ファイルの"podman_logs.log"となります。

このログファイルは手動でapt install xorg/X vt7 -retro を動かしていた時のログで、自動的に動いたコンテナのログではありません。
自動的に起動するコンテナはconfファイルの名前で表示されますので、ここでは podman logs x_window でもらえるはずです。
起動後で試すために podman_start x_window で一つのコンテナの起動もできます。

また、コンフィグファイルで localhost/at-debian-image:latest を使用していますが、アットマークテクノが提供しているイメージに xorg が含まれてませんので、一回イメージに入れて保存する必要があります。 8fffabfbc92a のイメージにインストールしましたので、例えば podman commit 8fffabfbc92a x_window:latest でコンテナイメージを固めてコンフィグファイルに localhost/x_window:latest を使ってください。
それでも起動できなかったら、 podman logs x_window の出力をお願いします。

よろしくお願いします。

マルティネ様
返信ありがとうございます。

"podman commit"でxorgがインストールされたコンテナイメージを作り、コンフィグファイルに "localhost/x_window:latest"を使いましたが、起動できませんでした。
以下に実行したコンフィグファイルの内容と"podman logs x_window"の内容を記載します。

●コンフィグファイル

image=localhost/x_window:latest
devices="/dev/tty7 /dev/fb0 /dev/input"
volumes="/run/udev:/run/udev"
append_args --env=LD_LIBRARY_PATH=/opt/firmware/usr/lib/aarch64-linux-gnu
append_args --cap-add=SYS_ADMIN
set_command X vt7 -retro

●”podman logs x_window"の内容

(EE)
Fatal server error:
(EE) Cannot move old log file "/var/log/Xorg.0.log" to "/var/log/Xorg.0.log.old"
(EE)
(EE)
Please consult the The X.Org Foundation support
         at http://wiki.x.org
 for help.
(EE)

解決方法がありましたら、ご教授願います。

at_dominique.m…

2022年1月25日 16時27分

h-yuusukeさん、

> (EE) Cannot move old log file "/var/log/Xorg.0.log" to "/var/log/Xorg.0.log.old"

このエラーはコンテナがreadonlyでデフォルトすることで、X の起動でエラーが発生して起動できませんでしたね。
コンフィグファイルにreadonly=noを追加して、もう一度試してもらえますか?

# この設定でかなり多くのプログラムが失敗するので、明後日のアップデートからデフォルトが無効になります。
他のデフォルトは大丈夫だと思いますが、まだ起動できなかったらお手数ですがまたログをお願いします。

よろしくお願いします

マルティネ様
返信ありがとうございます。

コンフィグファイルにreadonly=noを追加したところ、無事コンテナを起動させることができました。
ご対応ありがとうございました。

X Window Systemの自動起動に関して、もう1件質問があります。

現状、添付ファイルの画像の通り、X Window画面がディスプレイ全体に表示されておりません。
X Windowの解像度を変更する場合、/etc/X11/xorg.conf を修正しますが、Armadillo-IOT G4のコンテナでも同様の対応が必要でしょうか?

ファイル ファイルの説明
X Window画面.png

at_dominique.m…

2022年1月31日 11時44分

h-yuusuke様、

お世話になっております、
マルティネです。

> 現状、添付ファイルの画像の通り、X Window画面がディスプレイ全体に表示されておりません。
> X Windowの解像度を変更する場合、/etc/X11/xorg.conf を修正しますが、Armadillo-IOT G4のコンテナでも同様の対応が必要でしょうか?

そうですね、こちらも再現できました。
Armadillo iot G4 のコンテナにxorgをpreinstallしていませんので、コンフィグファイルだけを入れても不自然だと思います。
マニュアルにXの場合にも解像度の設定方法を追加します。

今更ですが、Xを直接に走らせる場合はrenderingにGPUを使ってません(NXPがドライバを作らなかった)ので、Xのアプリケーションでもweston+Xwaylandを使った方がいいかもしれません。firefoxが遅いと感じていたら試してみて下さい。
使い方としてはXとほとんど同じですので、そちらのドキュメンテーションもマニュアルに足しておきます。
(xwaylandのパッケージをコンテナにインストールして、weston を起動すれば/tmp/.X11-unixの共有で使えます)

よろしくお願いします

マルティネ様
返信ありがとうございます。

weston+XwaylandとGUIアプリの連携について下記の質問がございます。

教えて頂いた内容をもとに、at-debian-imageをベースにxwaylandパッケージをインストールした"localhost/xwayland:latest"という名前のコンテナイメージを作成し、下記のコンフィグファイルで起動させて、ディスプレイにweston+xwaylandの画面が表示されることを確認できました。

image=localhost/xwayland:latest
readonly=no
devices="/dev/tty1 /dev/fb0 /dev/input /dev/dri /dev/galcore"
volumes="/run/udev:/run/udev /opt/firmware:/opt/firmware"
volumes="$volumes /tmp/.X11-unix:/tmp/.X11-unix"
append_args --env=LD_LIBRARY_PATH=/opt/firmware/usr/lib/aarch64-linux-gnu
append_args --cap-add=SYS_TTY_CONFIG
append_args --cap-add=SYS_ADMIN
set_command weston --tty 1

その後、下記のコンフィグファイルでfirefoxを動かすコンテナを起動させているのですが、firefoxブラウザ画面が表示されません。
("firefox_alp:latest"はalpine linuxベースでfirefoxをインストールいたコンテナイメージです。)

image=localhost/firefox_alp:latest
readonly=no
volumes="/var/app/volumes/work:/var/app/volumes/work"
volumes="$volumes /tmp/.X11-unix:/tmp/.X11-unix"
append_args --env="DISPLAY=:0"
set_command firefox

何かコンフィグファイルの設定として、足りていないものがあるのでしょうか?

at_dominique.m…

2022年2月1日 9時23分

h-yuusuke様、
お世話になっています。
マルティネです。

> 何かコンフィグファイルの設定として、足りていないものがあるのでしょうか?

申し訳ありません、本日画面がないため最後までこちらで最後まで確認できません。明日もう一度確認します。
xwaylandのコンテナは私のコンテナの設定と少し違いますが、westonが無事に起動したらそちらのコンフィグレーションでも問題ないと思います。
参考までに、私のコンフィグファイルは以下のようです

image=localhost/xwayland:latest
readonly=no
devices="/dev/tty1 /dev/input /dev/dri /dev/galcore"
volumes="/opt/firmware:/opt/firmware:ro /run/udev:/run/udev:ro"
volumes="$volumes /tmp/xdg_runtime:/run/xdg_runtime /tmp/.X11-unix:/tmp/.X11-unix"
append_args --env=XDG_RUNTIME_DIR=/run/xdg_runtime
append_args --env=LD_LIBRARY_PATH=/opt/firmware/usr/lib/aarch64-linux-gnu
append_args --cap-add=SYS_TTY_CONFIG
set_command weston --tty 1

# 大きい違いは:/dev/fb0とCAP_SYS_ADMINを渡さない、XDG_RUNTIME_DIR変数を設定する
# /tmp/xdg_runtimeのボリュームはwaylandのクライアントがない限り不要ですし、:roのタグも問題にならないはずです

再現できるまで、とりあえず「podman logs firefox」と「podman logs xwayland」のログ出力を送っていただけますでしょうか?

よろしくお願いします

マルティネ様
返信ありがとうございます。

「podman logs xwayland」のログ出力は下記の通りです。
「podman logs firefox」の方はログ出力はありませんでした。

# podman logs xwayland
Date: 1970-01-01 UTC
[00:00:13.600] weston 9.0.0
               https://wayland.freedesktop.org
               Bug reports to: https://gitlab.freedesktop.org/wayland/weston/issues/
               Build: lf-5.10.35-2.0.0-rc2-0-g230e9bc+
[00:00:13.610] Command line: weston --tty 1
[00:00:13.611] OS: Linux, 5.10.52-1-at, #2-Alpine SMP PREEMPT Thu Dec 2 00:04:57 UTC 2021, aarch64
[00:00:13.611] warning: XDG_RUNTIME_DIR "/run/xdg_home" is not configured
correctly.  Unix access mode must be 0700 (current mode is 755),
and must be owned by the user (current owner is UID 0).
Refer to your distribution on how to get it, or
http://www.freedesktop.org/wiki/Specifications/basedir-spec
on how to implement it.
[00:00:13.612] Using config file '/etc/xdg/weston/weston.ini'
[00:00:13.614] Output repaint window is 16 ms maximum.
[00:00:13.617] Loading module '/usr/lib/aarch64-linux-gnu/libweston-9/drm-backend.so'
[00:00:13.686] initializing drm backend
[00:00:13.687] logind: not running in a systemd session
[00:00:13.687] logind: cannot setup systemd-logind helper (-2), using legacy fallback
[00:00:13.691] using /dev/dri/card1
[00:00:13.691] DRM: supports atomic modesetting
[00:00:13.691] DRM: does not support GBM modifiers
[00:00:13.691] DRM: supports picture aspect ratio
[00:00:13.700] Loading module '/usr/lib/aarch64-linux-gnu/libweston-9/g2d-renderer.so'
[00:00:13.811] event2  - gpio-keys: is tagged by udev as: Keyboard
[00:00:13.820] event2  - gpio-keys: device is a keyboard
[00:00:13.836] event0  - PixArt USB Optical Mouse: is tagged by udev as: Mouse
[00:00:13.838] event0  - PixArt USB Optical Mouse: device is a pointer
[00:00:13.842] event1  - audio-hdmi HDMI Jack: is tagged by udev as: Switch
[00:00:13.888] event1  - not using input device '/dev/input/event1'
[00:00:13.919] libinput: configuring device "gpio-keys".
[00:00:13.920] libinput: configuring device "PixArt USB Optical Mouse".
[00:00:13.920] DRM: head 'LVDS-1' found, connector 39 is connected, EDID make 'unknown', model 'unknown', serial 'unknown'
[00:00:14.030] DRM: head 'HDMI-A-1' found, connector 40 is connected, EDID make 'DEL', model 'DELL P2417H', serial 'PV85Y67C1FFB'
[00:00:14.031] Registered plugin API 'weston_drm_output_api_v1' of size 24
[00:00:14.038] Create File /run/xdg_home/use-g2d-renderer
[00:00:14.039] Output HDMI-A-1 (crtc 36) video modes:
               1920x1080@60.0, preferred, current, 148.5 MHz
               1920x1080@60.0 16:9, 148.5 MHz
               1920x1080@59.9 16:9, 148.4 MHz
               1920x1080@50.0 16:9, 148.5 MHz
               1600x900@60.0, 108.0 MHz
               1280x1024@75.0, 135.0 MHz
               1280x1024@60.0, 108.0 MHz
               1152x864@75.0, 108.0 MHz
               1280x720@60.0, 74.2 MHz
               1280x720@60.0 16:9, 74.2 MHz
               1280x720@59.9 16:9, 74.2 MHz
               1280x720@50.0 16:9, 74.2 MHz
               800x600@60.3, 40.0 MHz
               720x576@50.0 16:9, 27.0 MHz
               720x480@60.0 4:3, 27.0 MHz
               720x480@60.0 16:9, 27.0 MHz
               720x480@59.9, 27.0 MHz
               720x480@59.9 16:9, 27.0 MHz
               720x480@59.9 4:3, 27.0 MHz
               640x480@60.0 4:3, 25.2 MHz
               640x480@59.9, 25.2 MHz
               640x480@59.9 4:3, 25.2 MHz
[00:00:14.040] associating input device event2 with output HDMI-A-1 (none by udev)
[00:00:14.040] associating input device event0 with output HDMI-A-1 (none by udev)
[00:00:14.040] Output 'HDMI-A-1' enabled with head(s) HDMI-A-1
[00:00:14.040] Compositor capabilities:
               arbitrary surface rotation: yes
               screen capture uses y-flip: yes
               presentation clock: CLOCK_MONOTONIC, id 1
               presentation clock resolution: 0.000000001 s
[00:00:14.048] Loading module '/usr/lib/aarch64-linux-gnu/weston/desktop-shell.so'
[00:00:14.050] launching '/usr/libexec/weston-keyboard'
[00:00:14.058] Loading module '/usr/lib/aarch64-linux-gnu/libweston-9/xwayland.so'
[00:00:14.197] Registered plugin API 'weston_xwayland_v1' of size 32
[00:00:14.197] Registered plugin API 'weston_xwayland_surface_v1' of size 16
[00:00:14.198] xserver listening on display :0
[00:00:14.198] launching '/usr/libexec/weston-desktop-shell'
could not load cursor 'dnd-move'
could not load cursor 'dnd-copy'
could not load cursor 'dnd-none'
could not load cursor 'dnd-move'
could not load cursor 'dnd-copy'
could not load cursor 'dnd-none'
[00:02:20.719] Spawned Xwayland server, pid 5
[     1] wl_drm_is_format_supported, format = 0x30335241
[     2] wl_drm_is_format_supported, format = 0x30335258
[     3] wl_drm_is_format_supported, format = 0x30334241
[     4] wl_drm_is_format_supported, format = 0x30334258
Disabling glamor and dri3 support, XWAYLAND_NO_GLAMOR is set
Failed to initialize glamor, falling back to sw
The XKEYBOARD keymap compiler (xkbcomp) reports:
> Warning:          Unsupported maximum keycode 569, clipping.
>                   X11 cannot support keycodes above 255.
Errors from xkbcomp are not fatal to the X server

at_dominique.m…

2022年2月2日 9時49分

h-yuusuke様
お待たせしました。マルティネです。

> 「podman logs xwayland」のログ出力は下記の通りです。
> 「podman logs firefox」の方はログ出力はありませんでした。

ログありがとうございます。異常なかったのでこちらで調査しました。
マニュアルの「NPUを扱う」ワーニングと同じ現象のようです:
https://manual.atmark-techno.com/armadillo-iot-g4/armadillo-iotg-g4_pro…

コンテナ内のアプリケーションから NPU を使う場合は、そのアプリケーションの
プロセス ID(PID) を 1 とすると、 アプリケーションが正常に起動しません。 
また、複数のコンテナを同時に立ち上げており、それぞれのコンテナ内の
アプリケーションから同時に NPU を使用する場合は、 それらのアプリケーション
の PID が同一となるとアプリケーションが正常に起動しません。

NPUとは書いてありますが、GPUにも同様な動作で同じ現象だと確認ができました。
linux kernelのgpu-vivドライバを直す予定ですが、修正にまだ作成中でまだ公開できません。
恐れ入りますが、今のところはPIDがかぶらないように注意していただけたら幸いです。

xwayland.confのコマンドを以下のようにすれば動かせました:

set_command sh -c 'trap "exit 1" INT TERM QUIT; weston --tty 1 & wait $!'

普通に「sh -c "weston --tty 1"」でも動くと思いますが、trapとwaitを使わないと「podman stop」のsigtermが無視されていてコンテナの扱いが荒くなります。
コンテナの世界でよく使われてるパターンです。

マルティネ様

xwayland.confのコマンドを教えて頂いた通りにしたところ、無事weston+xwaylandを使用してブラウザ画面を表示することができました。

ご対応、ありがとうございました。

h-yuusuke さん
マルティネさん

> > 現状、添付ファイルの画像の通り、X Window画面がディスプレイ全体に表示されておりません。
> > X Windowの解像度を変更する場合、/etc/X11/xorg.conf を修正しますが、Armadillo-IOT G4のコンテナでも同様の対応が必要でしょうか?
>
> そうですね、こちらも再現できました。

こちらでも同様でした。以下のような方法で固定サイズですが、どうにかなりました。

1.Armadillo Base OS の /etc/local.d ディレクトリにスクリプトファイルを作成
   persist_file コマンドで永続化を忘れないようにします。
  中身は以下のようです:

#!/bin/sh
/usr/sbin/fbset -g 1920 1080 1920 1080 24

2.コンテナーを起動して、/etc/X11/xorg.conf.d ディレクトリ内のコンフィグレーションファイルを作成

ドライバー用コンフィグレーションファイルの例
Section "Device"
Identifier "FBDev"
Driver "fbdev"
#BusID "pci:bus:dev:func"
EndSection

スクリーン用コンフィグレーションファイルの例
Section "Screen"
Identifier "FBDev"
Device "FBDev"
#Monitor "monid"
SubSection "Display"
Depth 24
ViewPort 0 0
Virtual 1920 1080
EndSubSection
EndSection

3.動作確認したら、コンテナーを exit して podman commit 実行です。
コンテナー内に fbset コマンドのパッケージをインストールして確認するのもよしです。