LXDのコンテナでGUIアプリを起動してみます。
今回の目標はコンテナ内でGNOME Text Editorを起動することにします。
環境
マシン : Raspberry Pi 5 8G
OS : Raspberry Pi OS(64-bit)
LXD : 5.0.2
LXDを試すで作成したc1インスタンスを下記のコマンドで作り直してから話を進めます。
$ lxc delete c1 --force $ lxc launch ubuntu:24.04 c1
今回の内容はGUIアプリの起動までの最低限の操作になりまして、日本語設定等はすべて省略しています。
LXD で作る仮想化 GUI 環境 - Ubuntu 22.04 LTS 版 #Ubuntu - Qiitaの内容を参考にしました。
最初にコンテナ内で検証用のx11-appsをインストールします。
$ lxc config set c1 raw.idmap 'both 1000 1000' $ lxc restart c1 $ lxc exec c1 bash
# sudo apt install x11-apps # exit
※# はコメントではなく、rootアカウントで操作している意味になります
続いて、ホストのX11をコンテナから使用できるようにします。
$ lxc config set c1 environment.DISPLAY :0 $ lxc config device add c1 x11 disk source=/tmp/.X11-unix/X0 path=/tmp/.X11-unix/X0 $ lxc config device add c1 mygpu gpu gid=`getent group video | cut -d: -f3` $ lxc restart c1 $ lxc exec c1 bash
# sudo gpasswd -a ubuntu video # exit
※# はコメントではなく、rootアカウントで操作している意味になります
コンテナ内でGUIアプリを起動する前にc1インスタンスの設定を確認しておきます。
$ lxc config show c1 architecture: aarch64 config: environment.DISPLAY: :0 image.architecture: arm64 image.description: ubuntu 24.04 LTS arm64 (release) (20240523.1) image.label: release image.os: ubuntu image.release: noble image.serial: "20240523.1" image.type: squashfs image.version: "24.04" raw.idmap: both 1000 1000 volatile.base_image: c66a955225db160b6d094acc0ad1528afe1ca1727c814440625df75a64c80e44 volatile.cloud-init.instance-id: 7a7483fb-7d3b-4d9e-b7d4-ac7ca20f1e29 volatile.eth0.host_name: vethd3853ca3 volatile.eth0.hwaddr: 00:16:3e:7c:46:01 volatile.idmap.base: "0" volatile.idmap.current: '[{"Isuid":true,"Isgid":false,"Hostid":165536,"Nsid":0,"Maprange":1000},{"Isuid":true,"Isgid":true,"Hostid":1000,"Nsid":1000,"Maprange":1},{"Isuid":true,"Isgid":false,"Hostid":166537,"Nsid":1001,"Maprange":9999000},{"Isuid":false,"Isgid":true,"Hostid":165536,"Nsid":0,"Maprange":1000},{"Isuid":true,"Isgid":true,"Hostid":1000,"Nsid":1000,"Maprange":1},{"Isuid":false,"Isgid":true,"Hostid":166537,"Nsid":1001,"Maprange":9999000}]' volatile.idmap.next: '[{"Isuid":true,"Isgid":false,"Hostid":165536,"Nsid":0,"Maprange":1000},{"Isuid":true,"Isgid":true,"Hostid":1000,"Nsid":1000,"Maprange":1},{"Isuid":true,"Isgid":false,"Hostid":166537,"Nsid":1001,"Maprange":9999000},{"Isuid":false,"Isgid":true,"Hostid":165536,"Nsid":0,"Maprange":1000},{"Isuid":true,"Isgid":true,"Hostid":1000,"Nsid":1000,"Maprange":1},{"Isuid":false,"Isgid":true,"Hostid":166537,"Nsid":1001,"Maprange":9999000}]' volatile.last_state.idmap: '[]' volatile.last_state.power: RUNNING volatile.uuid: 7e06932f-ed63-4469-80d2-e0cb019f5b0b devices: mygpu: gid: "44" type: gpu x11: path: /tmp/.X11-unix/X0 source: /tmp/.X11-unix/X0 type: disk ephemeral: false profiles: - default stateful: false description: ""
コンテナからGUIアプリを起動してみます。
$ lxc exec c1 bash
GUI実行前に/dev/dri/以下のファイルのグループの方の権限がvideoになっていることを確認しておく。
# ls -l /dev/dri
※# はコメントではなく、rootアカウントで操作している意味になります
total 0 crw-rw---- 1 root video 226, 0 ** ** **:** card0 crw-rw---- 1 root video 226, 1 ** ** **:** card1 crw-rw---- 1 root video 226, 128 ** ** **:** renderD128
※詳しい内容は第532回 LXDのコンテナからGPUを利用する | gihyo.jpをご覧ください。
検証用のX11のアプリを起動する。
# xclock
時計のウィンドウが起動することを確認します。
続いて、GNOME Text Editorを起動してみます。
# sudo apt install gnome-text-editor # gnome-text-editor
GNOME Text Editorが起動することを確認しましょう。
追記
xclockやGNOME Text Editorを起動する際に
Authorization required, but no authorization protocol specified
のエラーでウィンドウが立ち上がらない場合は、ホスト側で、
$ sudo apt install x11-xserver-utils $ xhost +
してから、コンテナに入り、GUIアプリを起動してみましょう。
※xhost + はよろしく無い行為ですので、用事が済みましたら、
$ xhost -
をしておきましょう。