ノートPCでデュアルヘッド出力(とりあえず解決編)

昨日の続きです。

調べてみたところ xrandr は、 RandR という動的に解像度変更を行なう拡張機能にアクセスするためのインターフェースコマンドのようです。Fedora 8 に入っている RandR は Version 1.2 のようですが、このバージョンから、コマンドや機能に大きく変更が入っていて、それ以前のバージョンのものとは使い方などが全然違います。バージョン情報は以下のようにして確認できます。

$ xrandr --version
Server reports RandR version 1.2

以降は、Version 1.2 の話なので、参考にされる方は注意してください。

さて、 xrandr を引数無しで実行した時には、その時点で繋がっているモニタの情報などが表示されます。

$ xrandr 
Screen 0: minimum 320 x 200, current 1024 x 768, maximum 1600 x 1600
VGA connected 1024x768+0+0 (normal left inverted right x axis y axis) 315mm x 236mm
   1024x768       84.9*+   75.1     70.1     60.0     43.5  
   1280x1024      85.0     84.8     75.0  
   1600x1200      75.0  
   1280x960       84.9  
   1152x864       75.0     74.8  
   832x624        74.6  
   800x600        84.9     72.2     75.0     60.3     56.2  
   640x480        84.6     75.0     72.8     66.7     60.0  
   720x400        87.8     70.1  
LVDS connected 1024x768+0+0 (normal left inverted right x axis y axis) 286mm x 214mm
   1024x768       60.0*+
   800x600        60.3  
   640x480        59.9  
TMDS disconnected (normal left inverted right x axis y axis)

この場合、Screen 0 (これは X で言うところの Screen で、複数のディスプレイを繋いでひとつのデスクトップにしている場合は、すべてを繋いだ仮想的な画面のことです)が、現在 1024 x 768 のサイズになっています。

また、VGA(アナログRGB)、LVDS(本体内蔵液晶)、TMDS(DVI SDVO)の3つの出力先があり、その内、前の2つはどちらとも 1024x768+0+0 、つまり左上(0,0)の座標から1024x768のサイズを表示しています。なお、各出力先の名前は、ディスプレイドライバによって違うかもしれません。(上記の出力はIntelの855GM搭載ノートPCのものです。)

各出力先のON/OFFや、解像度、表示位置の変更などは、すべてこの xrandr で行なえます。便利な例を幾つか挙げてみます。

(VGAケーブルがディスプレイが繋がっていたらそれを有効に、繋がっていなかったら無効にする)
$ xrandr --output VGA --auto

(VGAのモニタを無効にする)
$ xrandr --output VGA --off

(VGAのモニタを内蔵液晶の右側に配置する)
$ xrandr --output VGA --right-of LVDS

(VGAのモニタの解像度を 1280 x 1024 にする)
$ xrandr --output VGA --mode 1280x1024

(VGAに内蔵液晶と同じ内容を表示する)
$ xrandr --output VGA --same-as LVDS

(複数を一度に指定もできる)
$ xrandr --output VGA --auto --right-of LVDS --mode 1280x1024

ただし、複数のモニタを並べて配置する場合の合計のスクリーンサイズが、前述の情報表示で出た Screen の maximum を越えることは許されません。この最大値は X 起動時に確保したメモリサイズで決まるので、Xorg.conf の Screen セクション内の Display サプセクション内に、以下のように Virtual エントリを追加することで指定出来ます。(横幅は16の倍数を指定しておいたほうが無難です)

Section "Screen"
        Identifier "Screen0"
        Device     "Videocard0"
        DefaultDepth     24
        SubSection "Display"
                Virtual    2560 1024
                Viewport   0 0
                Depth     24
                Modes    "1024x768" "832x624" "800x600" "720x400" "640x480"
        EndSubSection
EndSection

今日しらべた所はここまでです。

一応、複数の出力先に任意の出力を設定できるようになり、ノートPCを一時的にプロジェクタや外部モニタに繋いだりする分には問題は無くなりました。

ただ、平常時から複数のモニタを繋いでいる環境では、起動時からマルチスクリーンになっていて欲しいところですし、メニューなどが表示されるプライマリのモニタを指定する方法も今ひとつなので、明日はもう少し設定を詰めてみようと思います。