docker上のGUIアプリを立ち上げたい

2 min read

あんまり普通の使い方じゃない気がするので私のためだけの備忘録

Firefoxを例にして説明しますが他のGUIアプリを試したい時はFirefoxのインストール部分だけ入れたいアプリに変えたら動くと思います。

とりあえずUbuntuコンテナ起動

ホストOSのXサーバに投影するのでソケットファイルをマウントして
GUI実行時に必要な環境変数を渡しています。

docker run -it --rm --privileged \
  -e LANG=ja_JP.UTF-8 \
  -e HOST_UID=${UID} \
  -e DISPLAY=${DISPLAY} \
  -e GTK_IM_MODULE=ibus \
  -e XMODIFIERS=@im=ibus \
  -e QT_IM_MODULE=ibus \
  -v /tmp/.X11-unix:/tmp/.X11-unix \
  ubuntu bash

日本語化

Ubuntu Japanese Teamが配布してる「日本語化 Remix」をあてるだけで大体OKです。

几帳面な人達は必要なパッケージだけ厳選して入れてるけど
それが原因で苦しむくらいなら容量犠牲に楽を取ります。

https://www.ubuntulinux.jp/japanese
apt update -y && apt install -y wget gnupg
wget -q https://www.ubuntulinux.jp/ubuntu-ja-archive-keyring.gpg -O- | apt-key add -
wget -q https://www.ubuntulinux.jp/ubuntu-jp-ppa-keyring.gpg -O- | apt-key add -
wget https://www.ubuntulinux.jp/sources.list.d/focal.list -O /etc/apt/sources.list.d/ubuntu-ja.list
apt update -y && apt upgrade -y && apt install -y ubuntu-defaults-ja

最後のコマンドでロケールとかキーボードとか聞かれますが大体日本っぽい感じの所選んどけば間違いないです。(流石にキーボード配列はUSだと思いますが)

firefoxを入れる

apt install -y firefox

実行。。。前の下準備

firefox実行ユーザをホストOSの実行ユーザのIDと合わせて作成

yes | adduser --uid ${HOST_UID} gui 2>&1 > /dev/null

多分ココはもっとキレイに書けるワンライナーあると思う

firefoxと日本語入力を仲介するD-BUSを起動して日本語入力を起動します。

mkdir -p /var/run/dbus/ && dbus-daemon --system --nofork --nopidfile & 
su gui -c 'ibus-daemon -d'

ここでタスクトレイのところにIMが増えます。

Imgur

こいつがちょっと曲者でこいつの設定開いて入力メソッドからmozcじゃない方を削除しておいて下さい。
そいつが残ってるとわざわざタスクトレイでmozc選ばないと日本語入力変換出来ません。

多分aptでなんか消せば消えてくれると思うんだけど。
誰かわからないかな。。。?🤔

Imgur

いよいよfirefox実行

su gui -c firefox

Imgur
日本語入力成功
Imgur
速度測定も問題なし

これでキレイなFirefoxが使えましたね💖

結構面倒な手順ですが私はココまでの手順で作っといたイメージをローカルに保存してて
なにか知らないアプリを試すときにはまずはこっち側で確認してからインストールするといった風に使ってます。

docker commit <実行中にDokcerID> <保存したいイメージ名>
でローカルにイメージ保持できます

という訳で毎回D-BUS周りの起動方法で詰んで調べ直してる私の為の備忘録でした。

しゃみしゃっきり〜