仮想マシンでGUIアプリケーション

PCの遠隔操作というと、
一般にはWindowsのリモートデスクトップが有名ですし、
中級者にはVNCも多用されていると思われます。
しかしUNIXの世界では昔からGUIを処理するマシンと
そのアプリケーションの内容を実行するマシンとは
必ずしも一致する必要はなく、大型コンピュータで処理しつつ、
小型端末に表示し操作することができるようになっていました。
X Windowですね。
まあ上級者にとってはGUIはむしろ邪魔である場合もあり、
専らsshでCUIというのが私のリモート操作のスタイルです。
ところがそうもいかないことも。

私はUbuntu 14.04ホスト上のlxcでUbuntu 14.04ゲストを使っており、
通常ゲストへはホストからsshでログインして利用しているのですが、
事情があってゲストのGUIアプリケーションを起動したくなりました。
GUIの表示先はホストです。
そういう場合はホストであらかじめ
設定ファイル”/etc/X11/xinit/xserverrc”の

exec /usr/bin/X -nolisten tcp "$@"

の行を

exec /usr/bin/X "$@"

に変更してリブートしておいてから、
ホスト側でリブートの度に

$ xhost + <ゲストのIPアドレス>

を実行し、ゲスト側で

$ DISPLAY=<ホストのIPアドレス>:0.0 xeyes

のように実行すれば有名な目玉アプリケーションがホストに表示される、
というのがまあ定番です。
ちなみにxeyesは

# apt-get install x11-apps

でインストールできます。
ところが動いてくれない…

いろいろ調べていて、非常に簡単な方法があることを知りました。
ゲスト側であらかじめ

# apt-get install xauth
# reboot

を実行した上でホストからゲストにsshでログインするときに

$ ssh -X <ユーザ名>@<ホストのIPアドレス>

のように’-X’オプションをつけ、ログイン後

$ xeyes

のようにGUI表示先を特に気にせずGUIアプリケーションを実行すれば、
自動的にホストに表示されます。お手軽です。
このときゲスト側のDISPLAY環境変数はというと

$ printenv DISPLAY
localhost:10.0

となっています。きっとバックでうまくやってるんでしょうね。

広告