Hatena::ブログ(Diary)

技術日記@kiwanami

2011-05-14

LinuxでiPadをセカンドモニターにする

はじめに

iPad」と呼ばれるディスプレイ装置はすごいデバイスです。タッチパネル付きの9.7インチIPS液晶で、解像度はXGA、しかも無線でマシンと接続できるだけでなく、わずか700g弱という重さながら、バッテリーを内蔵していて10時間以上の連続動作が可能です。

AirDisplayというソフトを使うと、簡単にMacWindowsiPadをセカンドディスプレイにすることが出来ます。

残念ながら、このiPadLinuxでセカンドディスプレイとして使う情報はありません。いろいろ検索してみましたが、やっている人は誰もいないようです。

そこでiPadLinuxでもセカンドモニターにしてみる方法を探してみました。結果としては一応セカンドモニターとして使えなくもないことが分かりました。

達成目標

ここでの「セカンドモニター」の定義ですが、iPadのAirDisplayと同じような動作を考えています。具体的には以下のようです。

前提

とりあえずは現在の自分のマシンで動くことです。

すべてVNCのポートは5901を仮定しています。

今回試した方法は一般的なハックですので、おそらくXに詳しい人なら他の環境でも容易に実現できると思います。

あと、VNCで画面を転送していますので画面の動きがすごく遅いです。動画とかは全く無理です。シェルの操作がまあまあ我慢できるぐらいの速度です。(追記 2011/05/15)

方法1: XINERAMA + x11vnc

概要

まずはXのディスプレイ拡張技術:XINERAMAを使ってを素直に拡張する方法です。dummyドライバで見えない仮想スクリーンを作って、XINERAMAで画面をつなげます。仮想スクリーンはVNC(x11vnc)でiPad側に表示させます。

XINERAMA + x11vnc

  • 良いところ
    • すべての機能要件を満たす
  • 問題
    • Xの設定変更にはXの再起動が必要
    • xrandr, compiz が使えない
インストール

必要なもの:

  • xserver-xorg-video-dummy
  • x11vnc

x11vnc は synaptic や apt-get で入ります。

問題は xserver-xorg-video-dummy です。これをパッケージから入れようとすると、現在入っている xserver-xorg-video〜 関係が軒並み削除されようとしてしまいます。ディスプレイのない環境で使うものというパッケージとして定義されているのかも知れません。さらにコードにバグも残っていますので、以下のように手動で修正して入れる必要があります。(XorgのログにWindowTableが無いといったエラーが出る場合はこの修正が必要です)

$ sudo apt-get build-dep xserver-xorg-video-dummy
$ apt-get source xserver-xorg-video-dummy
$ cd xserver-xorg-video-dummy-0.3.3
$ vi src/dummy_driver.c
  (下の修正箇所を参照)
$ dpkg-buildpackage -rfakeroot -uc -b
$ sudo cp debian/tmp/usr/lib/xorg/modules/drivers/dummy_drv.so /usr/lib/xorg/modules/drivers/dummy_drv.so

(修正箇所)

$ diff xf86-video-dummy-0.3.3/src/dummy_driver.c mod/src/dummy_driver.c
782c782
<         pWinRoot = WindowTable[DUMMYScrn->pScreen->myNum];
---
>         pWinRoot = DUMMYScrn->pScreen->root;
Xorgの設定など

最近は xorg.conf を書かないようになってきたので、昔よりもXの設定は難しくなってきました。 xorg.conf が何か分からない人はこの方法はあきらめた方が良いと思います。分かる人が分かるように簡単に書きます。

  • xorg.conf 生成
    • Ctrl+Alt+F1 から kill でXを落とす
    • sudo X -configure で現在の設定の xorg.conf を生成する
    • できた xorg.conf をひな形として取っておく
  • xorg.conf 書き換え
    • (下の設定例を参照)
    • Monitor, Screen, Device を作る
    • xinerama を有効にする
    • ServerLayoutで相対位置設定
    • /etc/x11/xorg.conf に置く

xorg.confの内容(抜粋):

Section "ServerLayout"
	Identifier     "X.org Configured"
	Screen      0  "Screen0" 0 0
	Screen      1  "Screen1" LeftOf "Screen0" # 相対位置を指定
	InputDevice    "Mouse0" "CorePointer"
	InputDevice    "Keyboard0" "CoreKeyboard"
EndSection

Section "ServerFlags" 
    Option         "Xinerama" "1" 
EndSection

#(中略:ここに入力デバイスやScreen0関係)

Section "Device"
        Identifier "Dummy Device"
        Driver "dummy"
EndSection

Section "Monitor"
        Identifier   "monitor_dummy"
        ModelName    "dummy"
        HorizSync    10-200
        VertRefresh  20-90
        Modeline "768x1024_60.00"  65.13  768 816 896 1024  1024 1025 1028 1060  -HSync +Vsync
EndSection

Section "Screen"
        Identifier "Screen1"
        Device "Dummy Device"
        DefaultDepth 24
        SubSection "Display"
                Depth      24
#               Modes      "1024x768"       # 横置きの場合
                Modes      "768x1024_60.00" # 縦置きの場合
        EndSubSection
        Monitor      "monitor_dummy"
EndSection

設定が出来たらXを起動します。(OS再起動が楽かも)

無事起動できたら、普通にログインして以下のコマンドでディスプレイを確認します。

$ xdpyinfo -ext XINERAMA
name of display:    :0.0
version number:    11.0
vendor string:    The X.Org Foundation
vendor release number:    10900000
X.Org version: 1.9.0
 : (中略)
XINERAMA version 1.1 opcode: 147
  head #0: 1440x900 @ 768,0
  head #1: 768x1024 @ 0,0

このようにXINERAMAのセクションでheadが2つ出てくれば成功です。このとき、マウスを仮想スクリーンがある方(上の設定では左側)の画面端に持って行くと、見えない画面にマウスが移動します。

もし、Xの起動に失敗した場合(画面が真っ暗なままなど)は、コンソールやsshログインしてXのログ(/var/log/xorg.0.log)を確認して、xorg.confの書き換えを行います。元に戻したい場合は xorg.conf を消して再起動するだけです。

VNCで接続

仮想スクリーンが準備できたらx11vncで見えない画面をVNCでアクセスできるようにします。以下のコマンドを入力します。(とりあえずパスワード無しにしていますので、実用時はパスワードを設定するか、sshトンネルなどでセキュリティを確保しておく必要があります。)

$ x11vnc -display :0 -rfbport 5901 -nopw -clip xinerama1

起動できたら、とりあえずは本体側でvncviewerで表示できるか確認しておきます。うまくいけばディスプレイの端から消えたマウスポインターは、VNC側の画面に表示されるはずです。

ここまでくれば、あとはiPadからVNCでアクセスするだけです。

完成風景

感想など

導入が大変ですが、ディスプレイ間でウインドウが移動できますので動作としては理想的です。

しかしながらXを再起動しなければならないため、iPadをセカンドディスプレイで使いたいような出先ではあんまりうれしくないです。また、XINERAMA を使うと compiz や randr が無効になってしまうのも個人的には残念です。というか、XINERAMA は開発終了なので出来れば依存したくありません。

理論上は XINERAMA 使わずにスクリーンを2つ作る方法もいけるはずなのですが、現時点の Xorg の実装では randr 対応・非対応の Device が混在するとXが落ちるようです。 Xorg 本体の randr 側が改善するか、 dummy を randr 対応するかになると思います。おそらく、 dummy 側が randr 対応するとX再起動無しでいけるようになるのではないかなと思っていますが、まだちょっとよく分かりません。誰か作ってくれるといいですね。

とにかく、 dummy ドライバは情報が少なかったので苦労しました。

参考URL

方法2: vnc4server+x2vnc

概要

Xorg上の仕組みで頑張る方法はあきらめて、素直にVNCで拡張する方法を考えてみました。

この方法はVNCサーバーで新規にXの画面を作り、そこをVNCiPadで表示させる方法です。ウインドウディスプレイ間を移動できませんが、マウスキーボードはx2vncで移動させることが出来ます。

vnc4server + x2vnc

インストール

必要なもの:

  • vnc4server
  • x2vnc

全部 synaptic, apt-get で入ります。

基本的な設定

まず、vnc4serverを起動します。初回はパスワードを設定が必要です。

$ vnc4server :1 -geometry 768x1024 -alwaysshared

ちなみに vnc4server の終了は以下のようです。動かしたサーバーは停止させるまでずっと裏で動いています。

$ vnc4server -kill :1

次に、ディスプレイの端とVNCの画面をつなげるためにx2vncを起動します。下の場合はディスプレイの左側がVNC画面と繋がります。

$ x2vnc -shared -west localhost:1

ここでもvncviewerで動作確認をしてみてください。

問題なければiPad側からVNCで接続してみます。うまく画面が表示されれば成功です。

快適化

マウスキーボードが使えるのはいいのですが、vnc4serverがデフォルトで用意してくれる xstartup だとターミナルが一つ表示されるだけで少し使いづらいです。そこで、使いやすくカスタマイズします。

以下に自分で使っている xstartup ファイルを示します。背景を真っ白にして、VNC内でもATOKを使えるようにして、あとは狭い画面を有効に活用できるようにタイル型ウインドウマネージャーのxmonadを導入しました。

$ cat ~/.vnc/xstartup
#!/bin/sh
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid white
/opt/atokx3/bin/atokx3start.sh
vncconfig -iconic &
gnome-terminal&
exec xmonad

xmonadでは、dmenuを入れただけで特にあまりカスタマイズはしていません。

注意点

この方法ではメインのディスプレイが「:0」、VNC側が「:1」になります。基本的に各ディスプレイのX環境は独立していて、アプリケーションは起動させたディスプレイで表示され、起動後のウインドウの移動は出来ません。

Xに慣れた人なら分かると思いますが、DISPLAY変数アプリケーション引数などで表示するディスプレイを選ぶことが出来ます。

まれにGNOMEアプリのテーマが適用されなくなるなど、多少混乱があるようです。

感想など

個人的にはこの方法を使っています。メインの環境に全く影響が無く、セカンドディスプレイ内の通常の操作だけでなく日本語入力も問題ありません。

ウインドウの移動が出来ませんが、Twitterやログ表示のような軽いアプリであれば全く問題ありません。

方法3: x11vncの特定ウインドウ表示

概要

最後はおまけのような方法です。

x11vncで指定したウインドウVNCiPadに表示させるだけです。ほとんど操作は出来ませんが、iPadで表示したいウインドウが今そこにある場合には手軽で便利かも知れません。

x11vncによる特定ウインドウ表示

  • 良いところ
    • 現在表示させているウインドウをすぐに表示できる
    • 導入が一番楽
  • 問題
導入方法

必要なものは x11vnc のみです。synaptic, apt-get で入ります。

表示したいと思ったところで以下のコマンドを入力します。「-id pick」がポイントです。

$ x11vnc -xwarppointer -nopw -rfbport 5901 -nocursorpos -nocursor -id pick

そのあと、表示したいウインドウ内部でクリックします。

あとはiPad側からVNCで接続してみます。うまく画面が表示されれば成功です。

注意点

以下のような操作ができません。大抵 x11vnc が落ちるか、調子が悪くなります。

また、指定したウインドウでないもの(そのウインドウから起動されたメニュー、ポップアップダイアログなども)も表示できません。

上のような理由から、おそらくタイル型ウインドウマネージャーとは相性が悪いと思います。

感想

ログや Twitter の TL、R や Gnuplotプロット画面、 LaTeX 編集時やWeb開発時の表示確認などの、ちらっと見るだけで良いものには便利です。また、ポート番号を変えれば方法1,2とも同居できます。

しかしながら、思わず最小化したりしてしまうとVNCの更新が止まってしまったりするため、個人的にはあまり使っていません。

まとめ

以上、いろいろ試してみました。方法2の vnc4server を使う方法が楽で良いと思います。

将来 xrandr 対応 dummy ドライバが出来て、自由にウインドウが移動できるようになると良いなと思っています。

他にも良い方法がありましたら是非教えてください。


各地のドキュメントやXのソースを読みながら、さらに Ubuntu 11.04 で Wayland がやってきたりするのを見て、まだまだディスプレイ関係は進化が続いて大変だなと思いました。

2010-04-19

PS2→USB変換

まだPS2インタフェースキーボードがいくつかあるため、PS2USB変換アダプタを使ってつないでいる。今まではどれも同じだろうとArvelの適当なものを使っていたが、同時押し(Ctrl+Shift系とか)や時間の遅延(Ctrlが効き始めるまでに間がある)などがあり、コンソールやEmacsでの入力がかなり困難だった。結局テンキーを使うような作業の時につなげて使うだけになってしまっていた。

以下のサイトを見て、DRKBCNという変換アダプタがいいらしいということで使ってみた。

結果、同時押しや時間遅延の問題が無くなり、普通に使えるようになった。PCWatchのサイトで出ていたようなCapsLockの問題はこちらでは出ていないため、おそらくKVMスイッチの問題ではないかと思う。

ちなみに、このサイト(http://wikiwiki.jp/fpag/)のキーボードマウスの評価一覧はおもしろい。

また、WindowsでUSとJPのキーボードを同時に使う方法が紹介されていた。

ペアプロとかで便利かもしれない。

2010-04-11

ThinkPad X201s きた

次期マシン選定

前回のX61は本体のパフォーマンス自体は悪くなかったが、熱の問題でこれ以上使い続けるのは困難になった。手が熱すぎて外付けキーボード無しで仕事にならない。さすがにキーボード・トラックボールを持ち歩くのはもう疲れた。

そこで、去年の後半から次期マシン選定に入っていた。重量とスペックからVAIO Z(軽さ、スペック)とThinkPad X200s(軽さ、トラックポイント)、MacBookPro(外見、スペック)に絞り込んだ。重量が軽くスペックの高いVAIO Zの方向で考えていたが、VAIO ZのリニューアルやX200シリーズのバージョンアップなどが予定されていたため、もう少し待つことにした。

そして出てきたのがFHD液晶とSSDのVAIO Zと、マイナーアップデートながら手堅いThinkPad X201s。待った甲斐があった。どちらも素敵。スペックからVAIO Zが勝ちだけども、トラックポイントとキーボードが安心なX201sも捨てがたい。残念ながらこれら2つが出たからには重量のマイナスポイントでMacは今回も外れた。

あとは実機を見て判断することにした。X201sは実際に触って試すことができないが、外見などはX200シリーズとほとんど同じと思われるので、手持ちの情報から何とか外挿できそう。ということでVAIO Zを実際にさわってみてから決めることにした。このサイズで1920x1080(FHD)という解像度は使いやすいのか、キーボード具合はどうか、外見や熱はどうかがチェックポイント。運良く発売日直後に確認できた。

画面についてはパネルの面積が大きくなかったため、第一印象ではあまり広いという印象はなかった。色はなかなか綺麗。字が小さいと情報量は増えるがやっぱり見づらいため、字を大きくして使いたい。そうすると情報量としては変わらないというか、縦が短くなった分狭く感じる。やっぱり解像度を増やすのであれば面積も増やしたいため、このサイズでのFHD自体は魅力にならないという結論になった。

キーボードもイマイチな気がした。ちょっと触った感じでは、キーの間隔が広すぎる気がした。キーのタッチや配列など、間隔以外は悪くない。慣れの問題かもしれないが、キーを外れると隙間に指がはまる感触にすこし違和感を感じた。外見や熱については特に問題なし。

結果、VAIO Zは悪くはないが直ちに購入決定できるほど良くもないという結論に至った。

利用状況を考えながら両者のスペックを確認したり、カスタマイズを繰り返しながら、最後に値段を考えて、結局X201sにした。VAIO Zだと40万近くになってしまうが、X201sだとウルトラベースが無料で付いてきて13万程度。これだけ値段の差が付けば仕方がない。

3月頭に注文して、4月1日にきた。

使ってみた

解像度が高いのは綺麗。画面も明るい。でもX61と比べてやっぱりパネルの面積が狭くなったような気がする。

X61と比べて横幅が増えているため、右側のキーが若干遠く感じる。キータッチはX61と違うけども悪くはない。今回からUS配列にしてみた。

マルチタッチができるタッチパッドはWindowsのマルチタッチと関係があるのかと思っていたけども、全然関係なかった。誤動作を防ぐためにBIOSで無効にした。

重量がX61よりも軽くなったような気がする。バッテリーが6セルになったからかもしれない。

そしてなにより、パームレストが熱くない! 暖かくはなるけども、X61のように痛くはない。

しばらくWindows7を使ってみたが、Vistaほどは悪くない感じ。Cygwinもちゃんと動くし、Emacs23もある。Windowsでもいけるかなとちょっと思った。とりあえずリカバリメディアを作成した。

Ubuntu 10.04 beta1 / ThinkPad X201s

試しに Ubuntu9.10 (amd64) のCDで起動させてみた。動かなかった。キーに反応してCDが動いたりするので、何となく画面が映らないのが問題っぽい。

今度は 10.04 beta1 を試してみる。あっさり動いた。Windows7に引っ越す作業を進めていたが、いろいろ面倒くさくなってきたので、ハードディスクからWindows7を消して10.04を入れた。EmacsとVMWareが動けば普通に仕事ができるので、引っ越しはデータのコピーだけでほぼ完了。いくつか問題があるけども、何となく乗り切れそう。

X201sでの問題

2回目のサスペンドからの復帰がうまくいかない。

BIOSの問題らしい。コメントの流れによるとLenovoが修正予定だそうなので、4月下旬には直るかも。

あと、サスペンドからの復帰後、USBポートが使えない。上の問題とつながっているか、もしくはこの問題?

サスペンドができないので毎回シャットダウンしているけども、起動が安定しない。正確にはOSは動いているけども、画面が出ないことがある。以下関係しそうなもの。

4回に1回程度失敗する感じ。何度かやり直せばいいのでしばらく運用で回避。

起動と終了が速い。Windows7の起動を速くするLenovoEEより速い(ログインして普通に使えるようになるまでの時間)。ただ、作業状態の保存という重要な役目があるのでサスペンドがいらなくなるということはない。

Intel Turbo Boost が効いてないっぽい。それよりも、ここによるとまだ10.04のACPI周りは怪しいみたい。

ノートでの64bit環境は初めて。たまにパッケージからインストールができないものがあってもどかしい感じ。

トラックポイント

スクロールがデフォルトではできない。このあたりは毎回バージョンがあがるたびに変わって困る。

とりあえずは下のサイトを参考にxinputでログインごとに毎回入れてる。

あとでちゃんと調べてみよう。

プリンタ

64bit用は無いよと言われるけども、強引に入れて大丈夫みたい。

sudo dpkg --force-all -i cnijfilter-*

Canon PIXUS IP4500 は AirMacExpress経由でいけた。

Epsonの複合機にはいけない。ログにも出ないのでよくわからない。

その他

VMWare Server 2.0.x と ATOK X3 for Linux は、9.10の手順でいけた。

beta2 ?

じゃんじゃんアップデートされてる。挙動がたまに変わったりして驚く。変更点に beta2 という文字を見かけるので、きっと beta2 相当になったのかな。

しばらく launchpad を見ながら生活する。

2010-03-19

ScanSnap S1500

名刺や紙資料を何とかしようと思って、ScanSnap S1500を買った。普通にUSBを差し込むとxsaneでスキャン可能になった(Ubunti9.10)。VMWareの中のWindowsからも使用可能なのでスキャンし放題。

スキャン速度がとにかく速い。しかも両面。ハード側のボタンでスキャンというのはすごく楽。

名刺数百枚をスキャンした。最近はやりの細長いものはスキャナを通過できないので不可。透明なものも不可。

実際の名刺管理ソフトは自作する予定なので、OCRの性能で名刺管理ソフトを選んでみた。

結果、「やさしく名刺ファイリングPRO v.9.0」を買った(今はVersion10が出てるらしい。)。ScanSnapとの連携も問題なし。

手持ちの名刺のスキャンをすると、白地でない名刺はぜんぜんダメ。住所も文字が小さかったり、レイアウトが複雑だったりすると感覚的に6割以上は手直しが必要。ただ、住所とかは余り必要だと思ってないのでこれでOK。

2010-03-15

KINESIS Advantage

コード書きになるとかなり集中するので、体調に合わせたキーボードが必要になる。自分の経験では、指に負荷のかかる大量のキー入力にはRealForce、長時間連続稼働の場合には分離型のエルゴノミクスキーボードを使い分けると、体への負担が少ない。

最近また長時間稼働することが多くなってきたため、肩が痛くなりはじめた。数年前にスーツ族になってから長時間じっとしていることが少なくなったので、分離型のキーボード(Microsoftのエルゴノミックなもの)を手放してしまった。分離型が必要になったので、この機会に KINESIS Advantage を購入してみることにした。

買う

10年前からかなり気になっていたキーボードだったため、すごくうれしい。(本当は指の形に並んだトロンのキーボードを試してみたかったのだけども、どこにも売ってない。残念。でも、もし買えても常用できなさそう。)

ちなみに自分は日本語(JIS)配列も英語(US)配列も、両方それほど支障無く使える。JISとUSがごっちゃになっていて、しかもログイン先によっても切り替わったりするような環境で長年鍛えられたため、「Shift+2」で出てきた文字を見た瞬間に手が自動的に切り替わるようになっている。

購入には以下のサイトを参考にした。

メールを数通やりとりして3週間ほどでやってきた。

最初「N」であるべきところに「M」キーがあって(つまりMが2つ)、メールで問い合わせたらすぐに「N」キーが送られてきた。サポートもしっかりしてる。

慣れるまで

来て2週間は辛かった。とにかく最初は思うようにキーが打てない。さらにEmacsの場合はCtrlの感覚がぜんぜん違うのでなかなか難しい。最初は毎秒0.3ストロークぐらいだった。初めてキーボードをさわって、キーを探しながら入力している頃を思い出したりした。

マニュアルの「最初は辛いけど慣れると良くなるから、とにかく俺を信じて練習しろ!」とかっこいいことが書いてあった。書かれた通り、泣きながらキーボードについていたハノンのような教本を毎日練習して、タイピングソフトでも練習した。

リマップについては以下のサイトを参考にしながら、結局10カ所ぐらい取り替えた。親指周りはかなり取り替えてる。

結果、1ヶ月以内で普通のキーボードと同じぐらいの速度で打てるようになった。

良いところ

  • 指の移動が無理してないのが分かる。手がすごく自然な感じ。
  • 肩の楽さがかなりちがう。今まで1日に何度も体の中心をキーボードの「B」に合わせようと微調整していた動作が要らなくなった。とにかく楽。
  • リストレスト込みなので、リストレストの位置や感触やでこぼこでイライラしなくていい。
  • 数字がブラインドタッチできるのが良い。
  • 右手とトラックボールの位置も近くなったので、腕の移動の負担が減った。
  • Emacs使いにとっては、Ctrlが親指で押せるのがすばらしい。
  • リマップやマクロの自由度がいい。
  • かっこいい

悪いところ

  • 最大入力速度はRealForceほど速くはない。
    • キーの運指が強制されるため。もしかしたら、もう少し慣れたら運指の変形も行けるかもしれない。
  • キーが茶筒
    • HHKやRealForceと比べるとやっぱりキーのレベルが落ちる
    • ややうるさい。逆に威嚇になって良いかも。
  • ファンクションキーの列がしょぼい
    • ゴム。。。
  • キーの配列がやっぱり変態
    • リマップでも限界がある。たまにしか使わないキーはやっぱり考えてしまう。
  • Excelとかとは相性が良くない
    • カーソールキーを多用したり非Emacs環境で大量に日本語入力をする場合は、無理せず日本語キーボードに取り替えてる。

心配していたほどKINESIS依存症にはなってない。

いいものを買った。

その他、キーボードについての考察など

ホームポジションを取り替えるという発想はなかった。