Raspberry Pi docker デスクトップ環境

前回はraspbianのcliイメージを作り直しましたがやはりdocker上で動くデスクトップ環境も試してみたいですね。

今回は前回のraspbian cliイメージからデスクトップ環境を構築してみようと思います。

Caution

今回試してみた方法ではいわゆる統合デスクトップ環境(LXDE,XFCE)などがそのままインストールできてしまいます。それらはディスプレーマネージャーも付属しておりDMが起動すると結果的にdisplay:0ホストのディスプレーを専有してしまい抜け出すことも困難となり、最悪ホストの環境を壊すことになりかねません。安易に試すことの無いよう(自己責任にて)願います。
今回利用したlxde関連のパッケージの中でもlxde-coreやlxsessionを導入すると依存関係でlxdmその他かなりのパッケージがインストールされてしまいます。

前回作成したイメージからコンテナ作成

$ docker container run --privileged -d -p 5901:5901 --name stretch_rpd -v /home/pi/build:/mnt stretch_lite-img /lib/systemd/systemd

コンテナに入ってX関連のインストール

$ docker container exec -it stretch_rpd /bin/bash
# apt install -y --no-install-recommends xserver-xorg xinit
# apt install -y openbox lxterminal fonts-ipafont fonts-ricty-diminished

ホストとの通信はVNC接続

# apt install -y tightvncserver autocutsel

vncserverを起動、初回はパスワードを求められます。

# vncserver :1 -geometry 800x600 -depth 24
You will require a password to access your desktops.
Password: 
Verify:   
Would you like to enter a view-only password (y/n)? n
xauth:  file /root/.Xauthority does not exist
New 'X' desktop is f2f559e59844:1
Creating default startup script /root/.vnc/xstartup
Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/f2f559e59844:1.log

一旦killします。

# vncserver -kill :1
Killing Xtightvnc process ID 2525

~/.vnc/xstartupの編集

#!/bin/sh
xrdb $HOME/.Xresources
xsetroot -solid grey
autocutsel -fork
cd
#lxpanel &
lxterminal &
openbox
#x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
#x-window-manager &
# Fix to make GNOME work
export XKL_XMODMAP_DISABLE=1
/etc/X11/Xsession

コンテナ内から実行

# vncserver :1 -geometry 800x600 -depth 24

Hostのpi3にはtigervnc-viewerをインストールしました。

# apt install tigervnc-viewer

ホストPi3のターミナルから実行します。

$ vncviewer localhost :1 (or 127.0.0.1 :1)


tigervnc-viewerはtightvncviewerと間違えてインストールしたものです。(・・;)
問題なく使えているのでいいでしょう。
tightvncviewerはserverに同梱されているようです。


openbox右メニューはデフォルトです。
フォントはあまりきれいではないのでここのフォント設定を適用しておきます。

日本語入力その他ツール

# apt install -y fcitx-anthy dbus-x11
# apt install -y lxpanel pcmanfm leafpad lxappearance lxappearance-obconf dconf-editor gnome-icon-theme alacarte htop


~/.vnc/xstartupの#lxpanel &をコメントアウト(有効)にしてコンテナを再スタートします。

vncboot
vncserverの自動起動は下記のページを参考にさせていただきました。
Raspberry PiのVNCサーバーの自動起動の設定
/etc/init.d/vncboot スクリプトの以下の部分を変更しています。(その他画面サイズなど適宜変更)

USER=root
HOME=/root
export LANG='ja_JP.UTF-8' 追記
# cd /etc/init.d
# chmod 755 vncboot
# systemctl enable vncboot


lxappearance
フォントのサイズもlxappearanceから変更しますがGTK2とGTK3では同じポイント数でも大きさが違ってきてしまいます。GTK2系で大きさを決めたら/root/.config/gtk-3.0/settings.ini
gtk-font-name=Sans 10の値を変更することで合わせることができます。
値はdconfで保存されますがlxappearanceの何かを変更するとまた変わってしまいます。
ウインドータイトル関係はobconfから変更します。


fcitx-anthy
日本語入力はfcitx-anthyが使えます。mozcは動きませんでした。
設定には少々手こずるかもしれません。
設定入力メソッドからfcitxを選択します。コンテナをリスタート、システム設定のfcitxをクリックスタートで起動しないときは次の設定をします。


設定fcitx設定から+のボタンでanthyが現れます。OKでコンテナをリスタート
システム設定fcitxをクリックで通知エリアにアイコンが出現して使用可能になります。
自動起動はうまく設定できませんでした。


パネルアイテムの追加からアプリケーションランチャーを追加
アプリケーションランチャーからfcitxを登録します。
右隅に配置、1回押せば通常通り使用可能になります。


コンテナ内で動くX環境ができました。
autocutselでホスト〜コンテナでコピーは可能ですが2バイト文字は文字化けしてしまいます。
設定ツール以外のアプリケーションはlxterminal,pcmanfm,leafpad,alacarte,htopを入れています。
ここでcommitしておきます。
イメージサイズは約1GBになりました。

$ docker container commit stretch_rpd stretch_rpd-img
sha256:96b30dc7b241ab6e0568e2b4d9d1cae56fd2d9e8a66222361213be71b31bfde2
$ docker image ls | grep stretch_rpd
stretch_rpd-img latest 96b30dc7b241 About a minute ago 1.04GB/pre>


おまけの画像
dockerだからという訳ではないのですがswapがじわじわ増えていきます。極端に増えるわけではないのですがデフォルトの100MBは優に越していくので増やしておくのがいいと思います。

以前はXの設定というとX -configureのあとはtwmの画面と対面していたのですが最近は滅多に拝むことがなくなりました。
vnc接続と言ってもホスト〜コンテナ間の接続なので全くストレスは感じないですね。
いろいろ遊べそうです。