LXDのコンテナでGUIアプリを起動する

LXDのコンテナでGUIアプリを起動してみます。

今回の目標はコンテナ内でGNOME Text Editorを起動することにします。

Text Editor – Apps for GNOME


環境

マシン : 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アカウントで操作している意味になります

タイプ: gpu - LXD ドキュメント


コンテナ内で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 -

をしておきましょう。

xhost - ArchWiki

マインクラフト用ビジュアルエディタを開発しています。
詳しくはinunosinsi/mcws_blockly - githubをご覧ください。