テクニカルプア

備忘録と若干の補足

VNCを使ってAndroid端末をサブディスプレイにする

2013-04-27 追記

文章中に出てくる"Anna"という文字列は私がT61に割り振ったホスト名だ。私が所有するパソコンのホスト名にはすべてドイツ語圏の女性名を割り振っている

 

 普段ThinkPad T61をメインに使っているのでLCDWXGA+程度の大きさに限られてしまい、使用中のソフトの数によってはディスプレイ狭いなあと思うことも多々あった。仮想ディスプレイでなんとか凌いでたそんなある日、VNCなるべんり技術で手持ちの携帯(Galaxy Nexus)がサブディスプレイになるよという事を知った。ならばやってみようという事で実際にやってみた。なお題名にアンドロイドと銘打ったがVNCが使えればiOS等の端末でも可能とのこと。

作業

インストール

 まずTightVNCとx2vncをインストールする。TightVNCはVNCサーバでx2vncはサブディスプレイの位置(メインモニタに対して右側とか左側とか)等を設定するのに必要。VNCサーバはTightVNC以外にもいろいろあるのだが今回は参考にしたサイトで使われてたコマンド(vnc4server)と互換性のありそうなコマンド(vncserver)が使えるTightVNCを選んだ。x2vncはAURにあるので注意。

$ sudo pacman -Syu tightvnc
$ yaourt -S x2vnc

設定(サーバ側)

 インストールが終わったらまずVNCサーバの設定をする。以下を実行。

$ vncserver :1

 KDE4.8の場合は以下のほうがいいらしい。私の環境は4.9.1なのだが一応これもやってみたところ上と変化なかった。

$ dbus-launch vncserver :1

 :1というのはVNCサーバの名前を指すようだ。初回起動の場合

You will require a password to access your desktops.

とパスワードを決めることを要求されるので入力する。6桁以上のパスワードを推奨とのこと。パスワードを入力すると今度は

Would you like to enter a view-only password (y/n)? 

と聞かれる。私はyを押下してパスワードを決めたが今のところ使っていないのでもしかしたらnでもいいのかもしれない。パスワードを入力し終えると

New 'X' desktop is Anna:1

Starting applications specified in /home/nosada/.vnc/xstartup
Log file is /home/nosada/.vnc/Anna:1.log

となってVNCサーバが立ち上がる。VNCサーバを落とすには

$ vncserver -kill :1

としてやればいい。「:1」は勿論落としたいサーバによって変わる。  さて、立ち上げたVNCサーバを一度落として、次に以下を実行して再びVNCサーバを立ち上げる。

$ vncserver :1 -depth 15 -geometry 1024x768 -alwaysshared

 -depthが色数、-geometryが解像度、-alwayssharedはサーバへの複数人接続を設定するもの。これにはandroidとx2vncの2つのアクセスが必要となるため。次にx2vncを立ち上げる。以下を実行。

$ x2vnc -shared -east localhost:1

 -eastというのは察しがつくと思うがメインディスプレイからみてどの方角に画面を出力するかというもので、-eastと設定されていればメインディスプレイの右側に画面が位置することになる。これを実行すると先程決めた(view-onlyでないほうの)パスワードを求められるので入力する。すると

x2vnc: VNC server supports protocol version 3.8 (viewer 3.3)
Password:
x2vnc: VNC authentication succeeded
x2vnc: Desktop name "nosada's X desktop (Anna:1)"
x2vnc: Connected to VNC server, using protocol version 3.3
x2vnc: VNC server default format:
screen[0] pos=1443
Xinerama detected, x2vnc will use screen 1.
Warning: Failed to bind x2vnc hotkey, hotkey disabled.
x2vnc: pointer multiplier: 1.323900

 となって実行中のままになる。これを落とすにはCtrl+Cをする。なんかWarningとか出てるけど今のところ問題起きてないので放置。

設定(クライアント側)

 次にAndroid側の設定。VNCクライアントにはRemote VNC w/Ad(https://play.google.com/store/apps/details?id=com.toremote.vncmanager&hl=ja)を使った。

 以下の説明はRemote VNC w/Ad 1.8.4におけるものなのでバージョンによって差異があるかもしれない。

 設定を開き「Add」をタップするとEditという画面が開く。ここに諸々を記述する。

  • Host

  ifconfigしかりip addrで出てくるIPアドレス(inetとある)を入力する。無線LAN内でアクセスする場合はwlan0みたいな項目を参照すれば良い。

  • Port

  5901を入力。ポート番号は”5900 + (ディスプレイ番号)”となっており、ディスプレイ番号(=VNCサーバ?)が:1であるため。

  • Password

  先程決めた(view-onlyでないほうの)パスワードを入力。

  • Listen

  設定しなかった。

  • Name

  プロファイルの名前。適宜決める。 以上で言及しなかったものはデフォルト値のままにした。

 プロファイルを設定し終えたら次に設定を開き「Settings」→「Orientation」とタップする。デフォルトではここはAutoとなっているがどうも何回かやってみたところ、このアプリは端末を縦にして使う場合はPortrait、横にして使う場合はLandscapeと別個に設定しないとエラーを吐いて画面を表示してくれない。設定を終えたら『設定と端末の向きに注意して』先に作成したプロファイルをタップすればサブディスプレイ環境が出来る。

実際

f:id:aaodsn:20120911143005j:plain

 実際にやってみた図。メインディスプレイはWeb、サブディスプレイのGalaxy Nexusはmikutterという二度手間感溢れることをしている。先日のOSC Tokyo/Fallで貰った携帯スタンドが重宝している。

 使ってみて分かったことはこの位の大きさの端末をサブディスプレイとするには少々目にキツい。タブレット端末あたりがベストだと思う。タブレットが欲しい。

 

 参考