デュアルヘッドに挑戦(xorg.confメモ)

前回の続きです。

デュアルヘッドを構成させるため、xorg.confの書きかたを調べてみました。xorg.confの書式は man xorg.conf で読めます。書式だけなら manpage を見なおせばすぐに思いだせそうな単純なものですが、概念自体がわかりにくいのでメモしておきます。

なお、これは RandR のバージョン 1.2 の場合の説明です。1.1以前のドライバではこの記述通りに書いても動作しませんのでご注意下さい。

xorgの構造

ファイル全体は Section の列挙で構成されています。さらに、各 Section はエントリの列挙で構成されています。また、セクションの中に SubSection があることもあります。多くのセクションでは、セクションの識別名を指定する Identifier エントリが必須項目となっていて、この識別名は、別の Section からその Section を参照するときに使用します。

Monitor セクション

Monitorセクションは、物理的な出力装置、例えば液晶やCRTなどを表現するセクションです。1つの出力装置につき1つのMonitorセクションを書きます。必須のエントリは Identifier だけで、自動検出に問題がない限りは特別なエントリは不要です。

Device セクション

グラフィックデバイス(≒グラフィックスカード、グラフィックスチップ)を表現するセクションです。Identifier エントリと、どのドライバを使うかを指定する Driver エントリは必ず含めなければなりません。

また、Deviceセクションにはデバイスドライバに渡すオプションを指定する Option エントリを記述することもでき、以下のように書くことでデバイスの出力先と Monitor を関連付けることができます(RandR 1.2 用)。

   Output "Monitor-出力先名" "モニタセクションの識別子"

Screen セクション

設定ファイル中に必ず必要なセクションで、仮想的な「デスクトップ」に対応(していると私は認識)しています。Identifier の他、この Screen が使用する Device の指定が必須です。また、このセクションには、デスクトップの広さや色数を指定する Display サブセクションを含めることができます。

ServerLayout セクション

ServerLayout は、1つ以上の Screen と、1つ以上の InputDevice をどう組み合わせて使うかを定義するセクションです。(Xの関連のドキュメントでServerといった場合は、X Server、つまり実際にグラフィックスドライバを制御して画面に映像を出力するプログラムのことを指します)

出来上がったxorg.conf

上にあげた以外にもInputDeviceなどのセクションがありますが、そのセクションが意味するとこは明確なので説明は省略します。

さて、これらの情報をふまえて、デュアルヘッドに対応した xorg.conf を自分なりに書いてみました。ノートの内蔵液晶が左で、アナログVGAでつないだCRTが右になるように配置しています。解像度は指定していないので、繋いでいるデバイスの最適解像度が自動的に選ばれるかと思います。

Section "ServerLayout"
 Identifier     "Multihead layout (modified)"
 Screen      0  "Screen0"
 InputDevice    "Keyboard0" "CoreKeyboard"
 InputDevice    "Synaptics" "CorePointer"
 Option     "Xinerama" "off"
 Option     "Clone" "on"
EndSection

Section "InputDevice"
 Identifier  "Keyboard0"
 Driver      "kbd"
 Option     "XkbModel" "jp106"
 Option     "XkbLayout" "jp"
EndSection

Section "InputDevice"
 Identifier  "Synaptics"
 Driver      "synaptics"
 Option     "Device" "/dev/input/mice"
 Option     "Protocol" "auto-dev"
 Option     "Emulate3Buttons" "yes"
EndSection

Section "Monitor"
 Identifier   "VGA Monitor"
 Option     "dpms"
 Option      "RightOf" "LVDS Monitor"
EndSection

Section "Monitor"
 Identifier   "LVDS Monitor"
 Option     "dpms"
EndSection

Section "Device"
 Identifier  "Videocard0"
 Driver      "intel"
 Option      "Monitor-VGA" "VGA Monitor"
 Option      "Monitor-LVDS" "LVDS Monitor"
EndSection

Section "Screen"
 Identifier "Screen0"
 Device     "Videocard0"
 DefaultDepth     24
 SubSection "Display"
  Depth    24
  Virtual  2560 1024
 EndSubSection
EndSection

この設定で、一応は期待通り快適に動いているのですが幾つか問題があります。

  • GnomeツールバーがCRT側に表示される。(内蔵液晶側に表示させる方法が判らない)
  • (上記と本質的には同じだろうが)ログイン画面もCRT側に出る
  • 解像度が違うモニタを横に並べた場合、高さの違いから「段差」ができて、小さいモニタの下の部分は絶対に表示されないが、デスクトップとしては有効な領域となっており、デスクトップのアイコンやUIMの変換候補のウィンドウなどがはみ出る

というわけなので、まだまだ精進が必要なようです。