NetBSDとEee PCで外部ディスプレイを使う
2008/07/15(火) 25:14 NetBSD はてブ情報 はてブに登録 はてブ数

Eee PCには内蔵LCDパネルが小さくて狭いという不満があります。しかし、外部ディスプレイ端子があるので、家にいるときなどは大きな液晶ディスプレイにつないでその不満を解消することができるはずです。

Windowsでは簡単にできるマルチディスプレイですが、NetBSDではどうでしょうか?

ここではIO-DATAの液晶ディスプレイLCD-A173Vを例にマルチディスプレイを実現する方法について説明したいと思います。

まず、普通に外部ディスプレイをつないでXを起動すると、なんとか写りはするものの、640x480の解像度でせっかくの外部ディスプレイを生かすことができません。

pkgsrcからインストールしたmoduler-xorgではxrandrコマンドをつかって、この辺りの制御ができるようです。

まずは、現状の確認です。
tokuda@eeepc>xrandr
Screen 0: minimum 320 x 200, current 800 x 480, maximum 2080 x 1024
VGA connected (normal left inverted right)
   640x480        60.0  
LVDS connected 800x480+0+0 (normal left inverted right) 0mm x 0mm
   800x480        60.0*+
   640x480        85.0     72.8     75.0     59.9  
   720x400        85.0  
   640x400        85.1  
   640x350        85.1  
TV disconnected (normal left inverted right)
外部ディスプレイの解像度はSXGA (1280x1024) なのに、なぜか640x480しか画面モードを認識していないようです。

そこで、xrandrを使って明示的に1280x1024のモードを追加する方法でマルチディスプレイを実現します。

新しいモードを追加し、それを有効にするには三つのステップが必要になります。
  1. -newmodeオプションを使って、新しいmodelineを作成
  2. -addmodeオプションを使って、外部ディスプレイ (VGA) に新しいmodelineを追加
  3. 追加したmodelineを有効化
  4. 内蔵液晶パネルとの位置関係を指定
まず、-newmodeオプションを使ってmodelineを作成します。といっても、modelineの知識はないので/var/log/Xorg.0.logからmodelineを拝借してきます。
tokuda@eeepc>grep Modeline /var/log/Xorg.0.log | grep 1280x1024             [~]
(II) intel(0): Modeline "1280x1024"  135.00  1280 1296 1440 1688  1024 1025 1028 1066 +hsync +vsync
(II) intel(0): Modeline "1280x1024"  109.00  1280 1368 1496 1712  1024 1027 1034 1063 -hsync +vsync
(II) intel(0): Modeline "1280x1024"  135.00  1280 1296 1440 1688  1024 1025 1028 1066 +hsync +vsync
さて、どのModelineを使えば良いのでしょうか? といっても、一行目と三行目は同じなので、二つのパターンとなります。

両方試してみましょう。それぞれを"1280x1024-1", "1280x1024-2"という名前にしています。
tokuda@eeepc>xrandr --newmode "1280x1024-1"  135.00  1280 1296 1440 1688  1024 1025 1028 1066 +hsync +vsync
tokuda@eeepc>xrandr --newmode "1280x1024-2"  109.00  1280 1368 1496 1712  1024 1027 1034 1063 -hsync +vsync
xrandrの実行結果は次のようになります。
tokuda@eeepc>xrandr
Screen 0: minimum 320 x 200, current 800 x 480, maximum 2080 x 1024
VGA connected 640x480+0+0 (normal left inverted right) 338mm x 270mm
   640x480        60.0* 
LVDS connected 800x480+0+0 (normal left inverted right) 0mm x 0mm
   800x480        60.0*+
   640x480        85.0     72.8     75.0     59.9  
   720x400        85.0  
   640x400        85.1  
   640x350        85.1  
TV disconnected (normal left inverted right)
  1280x1024-1 (0x50)  135.0MHz
        h: width  1280 start 1296 end 1440 total 1688 skew    0 clock   80.0KHz
        v: height 1024 start 1025 end 1028 total 1066           clock   75.0Hz
  1280x1024-2 (0x51)  109.0MHz
        h: width  1280 start 1368 end 1496 total 1712 skew    0 clock   63.7KHz
        v: height 1024 start 1027 end 1034 total 1063           clock   59.9Hz
実行結果の後ろの方に追加したmodelineが見られます。ここで注目したいのは、それぞれの二行目のclockです。

1280x1024-1のclockは75.0Hzで1280x1024-2のclockは59.9Hzです。液晶ディスプレイではたいていの場合60Hzにあわせるので1280x1024-2のほうがアタリということになります。

ここまでくれば、後は簡単です。--addmodeオプションで新規作成したmodelineをVGAに加えます。
tokuda@eeepc>xrandr --addmode VGA 1280x1024-2
tokuda@eeepc>xrandr
Screen 0: minimum 320 x 200, current 800 x 480, maximum 2080 x 1024
VGA connected 640x480+0+0 (normal left inverted right) 338mm x 270mm
   640x480        60.0* 
   1280x1024-2    59.9  
LVDS connected 800x480+0+0 (normal left inverted right) 0mm x 0mm
   800x480        60.0*+
   640x480        85.0     72.8     75.0     59.9  
   720x400        85.0  
   640x400        85.1  
   640x350        85.1  
TV disconnected (normal left inverted right)
  1280x1024-1 (0x50)  135.0MHz
        h: width  1280 start 1296 end 1440 total 1688 skew    0 clock   80.0KHz
        v: height 1024 start 1025 end 1028 total 1066           clock   75.0Hz
ちゃんとVGAのところに1280x1024-2が追加されていますね。

次に現在640x480になっているVGAの設定を新規追加した1280x1024-2に変更します。
tokuda@eeepc>xrandr --output VGA --mode 1280x1024-2
この段階で外部ディスプレイは1280x1024が表示されているはずです。ただし、内蔵も外部も同じ内容が表示されるいわゆるミラーモードになっているはずです。

最後に、外部ディスプレイと内蔵液晶パネルとの位置関係を指定すれば各々の画面が個別に有効になります。
tokuda@eeepc>xrandr --output VGA --right-of LVDS
さて、長々と書いてきましたが、結局のところ次の四つのコマンドを叩けば良いことがわかりました。
xrandr --newmode 1280x1024 109.00 1280 1368 1496 1712 1024 1027 1034 1063 -hsync +vsync
xrandr --addmode VGA 1280x1024
xrandr --output VGA --mode 1280x1024
xrandr --output VGA --right-of LVDS
上記の四行をshellスクリプトにしておけば、Xを再起動することなくマルチディスプレイを楽しむことができます。Windowsのようにほぼ自動とまではいきませんが、スクリプト一発でマルチディスプレイにできるのでかなり便利です。

家ではマルチディスプレイでひろびろ、外では1kgを切る軽さで楽々モバイル生活。

Eee PCはなかなか良いですね。

名前:  非公開コメント   

  • TB-URL  http://www.tokuda.net/diary/0696/tb/