ラベル DisplayLink の投稿を表示しています。 すべての投稿を表示
ラベル DisplayLink の投稿を表示しています。 すべての投稿を表示

2014年9月25日木曜日

UbuntuのXディスプレイをSSHからパワーセーブ解除する

こんなことやりたい人がいるかわかりませんが、XディスプレイをSSHからパワーセーブしたり、パワーセーブを解除したりする方法について。

通常、Xディスプレイを操作するにはxsetを使います。SSHから操作する場合もこれは変わりませんが、そのままのコマンドでは、SSHコンソールがグラフィカルウィンドウではないため、所望のXディスプレイを特定して操作することができません。したがって、-displayウィンドウを使ってXディスプレイを指定してやる必要があります。

-displayオプションに指定すべきサーバー名をうまいこと調べる方法がぐぐってもなかなか見つからないんですが、たぶん一番簡単にできるのは、当該のディスプレイ側で仮想コンソール(Xtermなどのターミナルソフト)を開いておいて、wコマンドを打つ方法です。wはSSHからでもOKです。
ここでFROMにある:0とかがXディスプレイのサーバー名です。

あとxsetコマンドがない場合は下記でパッケージインストールします。
まずは、パワーセーブを解除して復帰させるコマンド。
次に、指定時間でパワーセーブに入らせるコマンド。
タイムアウトを秒単位で指定できます。
すぐにオフにしたい場合は、
それからデフォルトのタイムアウト時間を指定しておきたい場合は、 /etc/X11/xorg.conf.d/の下にconfファイルを作っておく。
ServerLayoutセクションのOptionエントリで、"0"を指定するとその機能が無効、それ以外の数字を指定した場合は、分単位でタイムアウト時間が設定される。
この場合、1分でディスプレイがオフになる。あとMonitorセクションのOptionでDPMSを有効にしておく必要があるようです。

Raspberry PiにつないでいるUSB接続のDisplayLinkモニタをセンサー入力でオンできないかなー、なんてのが動機ですが、そこまでやるかは気分次第。


参考

Display Power Management Signaling (日本語) - ArchWiki
A Primer on Screen Blanking Under Xorg - Shallowsky.com
list existing X display names? - Ask Ubuntu

2013年11月19日火曜日

DisplayLinkモニタでRaspberry Piデスクトップを使用する

これまで、DisplayLinkモニタ用のフレームバッファドライバudlfbをカーネルコンフィギュレーションで有効化し、フレームバッファデバイスをXで扱うためのグラフィックドライバxf86-video-fbdevをインストールしました。

今回はDisplayLinkモニタでデスクトップを立ち上げるようにしたメモです。

1. xorg.confを設定

エディタでxorg.confの設定をします。
内容は以下。
これを保存すれば、usb_modeswitchでモニタをストレージからDisplayLinkデバイスへ切り替えるだけで、デスクトップを表示させることができるはずです。コマンドは前々回に書いたので割愛します。

2. udevルールでストレージ認識を回避

起動後、自動的にDisplayLinkモニタにデスクトップを立ち上げるようにするための設定です。Raspbianの起動中にudevdがDisplayLinkモニタを見つけたとき、ストレージではなくDisplaLinkデバイスとして認識するようにします。
エディタで下記のルールファイルを作成します。
中身には下記の行を記述。
こうすることでドライバとしてcdromではなくudlfbがロードされます。

3. X起動設定

RPiが起動したら自動的にstartxするよう、次のファイルに記述を加えます。
exit 0の直前に一文追加するだけでOKです。
4. 再起動

ここまでで、起動後にDisplayLinkモニタでデスクトップが表示されるようになったはずです。ためしに再起動してみます。
再起動後、下の画像のように(デフォルトのままなら)LXDEのデスクトップが表示されます。

5. タッチパネルのキャリブレーション

さて、とりあえずLXDEが起動し、キーボードとマウスを繋げばデスクトップPCとして使えるようになりました。しかし、今回使用しているDisplayLinkモニタLCD-USB10XB-Tはタッチパネル搭載です。マウスで使うなんて野暮。触って操作しましょう。
幸運にもRaspbianにはタッチパネルコントローラeGalaxに対応するドライバが標準でインストールされていまです(万が一無かったとしてもカーネルコンフィギュレーションで有効化するだけですけどね)。したがって、既にタッチ操作はできるはずです。
ただし初期状態ではタッチ位置とデスクトップ上の座標にズレがあったり、ドライバ等ソフトウェアの仕様によって反転していたりすることがあります。タッチ点を画面の座標上に正しく対応させるため、キャリブレーション(校正)を行う必要があります。
キャリブレーションには、xinput_calibratorというツールを使います。freedesktop.orgからソースをダウンロードしてきてインストールします。
インストールしたら、X上のターミナルから起動します。そのターミナルを起動するためにデスクトップのアイコンをダブルクリックするのは、キャリブレーションしていないタッチスクリーンではちょっと苦労します(笑)。キーボードやマウスで操作したほうが早いと思います。
コマンドを実行すると画像のようなフルスクリーンのUIが表れます。4つの十字マークが順次表示されるので、交点をなるべく正確に押していきます。中心の円グラフは操作の残り時間を示しています。残り時間がなくなるとプログラムは終了しますが、上記コマンドで何度でもやり直しできます。

4点の入力が終わるとプログラムが終了しますが、これで完了ではありません。コマンドラインにコンフィギュレーションスクリプトが生成されるので、これをコピーして下記ファイルに書き込みます。
以上で終了です。

参考情報

DisplayLink - wiki.archlinux.org
RPi Debian Auto Login - elinux.org
xinput calibrator - freedesktop.org
How to get eGalax TouchScreen film (0eef:0001) working in Linux for Raspberry Pi - Black God

2013年11月9日土曜日

Raspberry Piにxf86-video-fbdevをインストール

前回、DisplayLinkモニタのためのudlfbドライバをRaspberry Piにインストールしました。今回はフレームバッファデバイスのためのX11グラフィックドライバ、xf86-video-fbdevをインストールしたので、メモ。

まずはここからソースをダウンロードし、解凍。
で、いつものconfigureとmakeではなく、シェルスクリプトautogen.shを走らせます。 何やらエラーが。autoreconfのソースをダウンロードしてビルドしてみる。 おや。
sanitize.shってのは、acscriptsっていうのに入ってるらしい。 ではもう一度autoreconfのビルドを。 おやおや。m4のインストールが必要。 おk。ではもう一度。 ではxf86-video-fbdevのインストールに戻りまして。 うーん、今度はautoconf? これでいいかな。もう一度。 xorg-macrosとやらが必要とな。ぐぐってみるとxutils-devを入れればOKとのこと。 今一度。 にゃー。libtoolが欲しいって。 んでもう一度。 ここはシンボリックリンクで対応。 もう一度。 RANDRとな。ぐぐってxorg-devをインストール。 もーいっかい。 これでautoconf.shは通った。Makefileが生成されるので、あとはいつものやつです。

2013年11月4日月曜日

Raspberry Pi でDisplayLinkのudlfbドライバを使う

前回、RPiに接続したDisplayLinkコントローラ搭載のUSBモニタにlibdloライブラリを使って描画するテストをしてみました。今回はフレームバッファデバイスとして汎用的に使えるようにするため、udlfbドライバをインストールし、ロードできることを確認します。操作は下記のとおり。

1. udlfbドライバのインストール(カーネル再構築)


DisplayLinkをフレームバッファデバイスとして使うためのドライバとしてudlfbが必要です。ぐぐってみると、udlfbはPlugableのサイトでソース配布されていて、これをビルドすればOK、という記述もちらほら見つかるんですが、実はカーネルソースツリーのdrivers/gpu/drm/udlに(バージョン2.6.31以降?)入っていて、コンフィギュレーションしてビルドすればカーネルモジュールが生成されるようになっています。そこで今回は、udlfbのビルドを有効にしたうえでカーネルを再構築しインストールしてみます。
本当はeLinux.orgの記事にあるとおり、PCのlinuxマシンで作業したほうがビルドが早く済むんですが、今回はRPi上で作業しちゃってます。

まずはGitHubのレポジトリからカーネル取得。
使用中のカーネルのコンフィギュレーションをコピーしてきて、適用する。 次に、udlfbのドライバを有効にする。 下記のように進んで、Displaylink USB Framebuffer supportをモジュール選択します。依存するEnable Video Mode Handling Helpersも自動的に有効になります。 menuconfigの画面上では、下の画像の項目です。

SaveしてExitします。で、さっそくビルド。 RPi上でビルドしたせいもあり、たぶん10時間くらいかかったかな。
ビルドが終わったら、モジュールとカーネルをインストールして再起動します。

2.usb_modeswitchのインストール


今回使用しているLCD-USB10XB-Tは(もしかしたら他のDisplayLinkモニタも同様かもしれませんが)、コンピュータにUSB接続すると、初めにストレージデバイスとして認識されます。ストレージ内にはautorun.infが入っていて、Windows PCなどの場合、同梱のドライバインストーラを起動する仕組みになっています。ドライバがインストールされた後はストレージではなく、DisplayLinkモニタとして認識されるようになります。この仕組みはUSB接続のモデムなどでも見られることがあります。こうすることで、デバイスメーカーはドライバのCDを製品に添付せずに済むわけです。
Linuxマシンに接続した場合も、この仕組みのせいでストレージデバイスとして認識され、本来のDisplayLinkデバイスとしての使用を妨げてしまいます。 そこで、どのデバイスとして認識するかの切り替えができるusb_modeswitchを導入します。デスクトップのUbuntuではパッケージレポジトリに登録されているようですが、Raspbianではapt-getでインストールできなかったので、ソースからビルドします。#追記:Raspbianでも、ちゃんとapt-get updageすればレポジトリからインストールできるようです。ただしバージョンが古く(Version 1.2.3)今回の用途では正しく動作しないため、新しいVersion 2.0.1をソースビルドしてインストールする必要があります。
ここからusb_modeswitchのソースをダウンロードして、makeします。
バイナリのインストール。


3.udlfbドライバのロード


modprobeコマンドで、モジュールをロードします。 lsmodコマンドを打つと、モジュールがロードされていることを確認できます。 udlfb本体と同時に、依存するモジュールもロードされています。
最後に、インストールしたusb_modeswitchコマンドで切り替えを行います。あらかじめlsusbコマンドやdmesg等でDisplayLinkモニタのベンダIDとプロダクトIDを調べておく必要があります。 DisplayLinkというデバイスの17e9:0156がベンダIDとデバイスIDの対です。これをusb_modeswitchコマンドの-vパラメータと-pパラメータに指定して実行します。 成功すれば、DisplayLinkモニタの画面がクリーン一色になります。
udlfbはフレームバッファドライバなので、デバイスファイルfb1が増えていることも確認できます。


参考情報

DisplayLink - ArchWiki
RPi Kernel Compilation - eLinux.org
Raspberry Pi でカーネルにaufsを組み込む - よもやま雑記帳
LCD-USB10XB-TをUbuntuで使う - PPE : Petit Panda Extreme
UbuntuでEmobileのD21LCを利用する - Blog.37to.net

2013年10月29日火曜日

Raspberry PiにlibdloをインストールしてDisplayLinkモニタを動かす

巷には、PCにUSB接続するLCDのサブモニターやグラフィックアダプタ(参考:Amazon)というものがあります。これらに採用されているのがDisplayLink社のデバイスコントローラです。公式のドライバはWindowsとMac用なんですが、Freedesktop.orgでLinuxドライバの対応が行われているので、実はLinuxでも動かすことはできます。

今回はうちにあるIODATAのLCD-USB10XB-TをRaspberry Piに接続して、libdloライブラリを導入してテスト表示が映るところまでやってみたので、手順をメモっておきます。

DisplayLinkデバイスを何らかのLinuxディストリビューションで動かす話をぐぐってみるといろいろな登場人物が出てきてややこしいんですが、私なりに整理すると、
  • udlfb: デバイスドライバ
  • libdlo: DisplayLinkに描画するためのユーザスペースライブラリ
  • xf86-video-displaylink: udlfbのクライアントとなるX Server
って感じだと思います。たぶんに誤解を含むと思いますが。。中にはlibdloがドライバっていう記述もあったりしますが、libdloをビルドしてもカーネルモジュールは生成されません。でもudlfbなしに表示を試せたりしちゃいます。この辺のソフトウェアスタックがどうなってるのか、あまり詳しく調べてないのでよくわかりません。規模も大きくないので、そのうちソースでも読んでみようかとも思います。

さて、今回はlibdloをインストールして表示のテストを。

まずは所要のライブラリをインストール。
次にlibdlo本体をダウンロード、続けてアーカイブ展開し、いつものようにconfigureとmakeでビルド。
ビルドができたら表示のテストをしてみます。DisplayLinkデバイスをUSB接続し、
とコマンドしてモニタに何か表示されれば成功です。次のように直接バイナリをたたいてもOKです。


参考情報

libdlo - Freedesktop.org
What is udlfb? - kernel.org
DisplayLink - archlinux