2017年9月13日水曜日

仮想マシンで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
となっています。きっとバックでうまくやってるんでしょうね。

0 件のコメント:

コメントを投稿