2009年3月22日日曜日

Xdmxを使ったマルチディスプレイ



Xdmxを使うと、別々のコンピュータに接続されているディスプレイ同士を繋いでマルチディスプレイが実現できる。
試しに、普段使っていないサーバのディスプレイを活用してマルチディスプレイを実現した。
今回は、laptopでUbuntu8.04(Gnome)を、serverでDebian lenny(CUI)を実行しているものとする。
serverとlaptopをまたいで設定しなければならないので、serverを赤、laptopの端末を青で表記する。

サーバの設定

サーバに、Xを起動するためにxinit、X起動後の端末としてxterm、xhostでlaptopからのアクセスを許可するためにx11-xserver-utils、そして、X Window Systemのサーバであるxserver-xorg-coreをインストールする。
server% sudo aptitude install xinit xterm x11-xserver-utils xserver-xorg-core

そして起動するが、このコマンドはSSHなどではなく、serverのコンソール上で実行する必要がある。
でないと、以下の(失敗例)ように怒られる。
server% xinit -display :0
(失敗例) X: user not authorized to run the X server, aborting.
(成功すると、グラフィカル(笑)な表示に切り替わり、xtermのウィンドウが開く)


laptopからX Serverにアクセスできるように権限を追加(毎回やる必要があるらしい)
server% DISPLAY=:0 xhost +laptop

なお、サーバには環境変数をつけているが、X Serverで動いているxterm上で実行できる場合は必要ない。
私はサーバに接続するマウスを持っていないので、このようにディスプレイを指定した。
(マウスをxterm上に持っていかなければ、コマンドが打てない)

laptopの設定
Xdmxを、ウィンドマネージャを実際に動かすほう(laptop)にインストールする。ただじ、なぜかUbuntu8.04ではXdmxがリポジトリから削除されているので、以下のサイトからパッケージをダウンロードしてくる。
laptop% wget http://launchpadlibrarian.net/9590666/xdmx_1.3.0.0.dfsg-12ubuntu8_i386.deb
laptop% sudo dpkg -i xdmx_1.3.0.0.dfsg-12ubuntu8_i386.deb

dbusの権限を緩める
何かの用途でdbusを使っているようだが、設定されている制限がきつすぎることがあるらしい。
gnome-session後、以下のようなエラーが大量に出る。
** (nm-applet:5716): WARNING **: nma_dbus_init(): could not acquire its service. dbus_bus_acquire_service() says: 'Connection ":1.30" is not allowed to own the service "org.freedesktop.NetworkManagerInfo" due to security policies in the configuration file'
そういう場合は、/etc/dbus-1/system.d/nm-applet.confのdefaultセクションの「org.freedesktop.NetworkManagerInfo」のdenyになっているところをallowに変更し、デーモンを再起動。
laptop% sudo nano /etc/dbus-1/system.d/nm-applet.conf
<policy context="default">
# <deny own="org.freedesktop.NetworkManagerInfo">

# <deny send_destination="org.freedesktop.NetworkManagerInfo">
# <deny send_interface="org.freedesktop.NetworkManagerInfo">
<allow own="org.freedesktop.NetworkManagerInfo">

<allow send_destination="org.freedesktop.NetworkManagerInfo">
<allow send_interface="org.freedesktop.NetworkManagerInfo">
</allow>
laptop% sudo /etc/init.d/dbus restart
これでほとんどのdbus関連のエラーは出なくなったのだが、dbusが使われている要所要所でエラーが起こっている。セキュリティの心配もあるので、要調査。
参考
http://lists.freedesktop.org/archives/dbus/2007-January/006874.html

Xを終了

開いているディスプレイ番号を振っていけばいいので、本来こんな設定は必要ないのだが、GNOMEの場合は多重起動ができないそうなので、勝手にgnomeが立ち上がらないようにする必要がある。
Xfceなどを新たにインストールするのも手だが、とりあえずうまく動くか試してからのほうがロールバックが楽なので、Xを単に終了する。
sysv-rc-confは、各ランレベルで何を起動するかを指定することができるコマンドラインツールだが、「-」キーを押すとそのサービスが一時的に終了するようになっているので、これを利用する。
laptop% sudo aptitude install sysv-rc-conf
laptop% sudo sysv-rc-conf

gdmと書いてある行で-キーを押せばxが終了し、コンソールのログイン画面に飛ぶ。

デュアルディスプレイでgnomeを起動
二つのディスプレイを使ったX Serverの起動
以下のように、serverからlaptopのX Serverにアクセスできるようにしてから実行する
laptop% xhost +server
laptop% Xdmx :1 -display laptop:0 -display server:0 +xinerama &

エラーが出た場合、大抵の場合「〜オプションをつけたら?」といったメッセージが出ているので、それをつけて再度実行。
ちなみに、私は「-ignorebadfontpaths」をつけた。
gnome-screenを実行することで、二つの画面に渡ってgnomeが起動する。
laptop% gnome-session

もちろん、serverにはgnomeが入っている必要はない。
ちなみに、Xdmxを実行した時点でxtermなどがまったく立ち上がらないため、私は以下のようにしてgnomeを立ち上げた。
laptop% xhost +192.168.0.2 && Xdmx :1 -display localhost:0 -display 192.168.0.2:0 +xinerama -ignorebadfontpaths & sleep 5; gnome-session
ほか、自動起動スクリプトなどを書くべきだろうが、とりあえずはこれでよしとする。


所有しているVAIOのモニタをラップトップで使用しようとしたところ、コネクタが独自規格で接続できなかった。諦めていたのだが、Xdmxを使えば他のマシンのXサーバを使ってマルチディスプレイ環境を実現できることを知り、今回挑戦してみた。
また、今回は一度仮想マシンで実験して、うまくいってから実機で試してみた。当然だがこちらのほうがミスも少ないし、ドキュメントもより正確な物が書ける。今度からこれでテストをしよう、と思う。
一見うまくいったようだが、実はウィンドウを動かしたりするとかなり動作がもたつく(特に、SCIMの動きが絶望的)。さらにDirectXを使用したアプリケーションが動かない。まだクリアすべき問題は残されている。

0 件のコメント:

コメントを投稿