yendo weblog


X でのデュアルモニター (NVIDEA 編)

書いていたのを忘れていた古い記事だが、CRT が壊れた記念に公開しておく。

前置き

捨て置いていた CRT モニターがあったので、デュアルモニターを設定してみた。 OS は Debian GNU/Linux。ハードウェアの構成は以下の通り。

ビデオカードASUS N6200 (Geforce 6200)-
液晶モニター (プライマリ)EIZO FlexScan L4611280x1024
CRT モニター (セカンダリ)NEC MultiSync 15 (PC-KM153R)1024x768

このビデオカードには、DVI 接続と VGA 接続が一つづつあるので、 それぞれにモニターを接続することになる。 メインは液晶モニター、その右側にサブとして CRT モニターを設置して使う。 なお、この CRT モニターはもともと PC-9821 シリーズ向けのものなので、 接続のために変換アダプタ (800円ぐらい) を購入した。

Geforce のドライバは、NVIDIA 提供の最新のもの をあらかじめインストールし、設定しておく。

Xinerama vs. TwinView

X でのデュアルモニターには Xinerama を使うのが一般的だが、 NVIDIA の純正ドライバだと TwinView なるものが使える。 TwinView の利点は何かというと、マニュアルによれば以下の通りらしい。

この説明では私は良く意味が分からなかったが、具体的に設定してみて分かっ た範囲で、TwinView の特徴をまとめると以下のような感じだった。 Xinerama の方は十分に試したという訳でもないので、いくつかの項目は もしかしたら Xinerama でも TwinView でもたいして変らないかもしれないけど……。

TwinView の長所

TwinView の短所

せっかくなので、私は TwinView を利用することにした。

設定

ドライバのバグというか仕様なのか、一部面倒なところがある。

TwinView を有効にする

/etc/X11/xorg.conf の "Device" セクションにまずは以下のものを追加する。 これで TwinView が有効になる。

Option    "TwinView" "on"

DVI 接続をプライマリに設定 + 基本設定

私は、DVI 接続の液晶モニターをプライマリとして、 VGA 接続の CRT モニターをセカンダリとして利用したいのだが、 デフォルトでは VGA 接続の CRT モニターがプライマリとして認識されてしまう。 これは、以下のオプションで変更する。

Option    "TwinViewXineramaInfoOrder" "DFP, CRT"

しかし、ややこしいことに、 設定の際、明示しないかぎり暗黙のプライマリ接続は VGA 接続の方だとみなされてしまう。 水平周波数、垂直周波数 は、 それぞれ DFP (DVI 接続)、CRT (VGA 接続) と明示した方が 分かりやすいだろう。 "SecondMonitorHorizSync" と "SecondMonitorVertRefresh" は使わない。 モニタの配置順序は、暗黙のプライマリ接続の「左」に、 暗黙のセカンダリ接続を配置するため、"LeftOf" とする。 明示的に "DFP RightOF CRT" と書いた方が分かりやすいのだが、 これだと SDL なアプリケーションではなぜか 両モニターをまたぐフルスクリーン表示で左右が逆になってしまった。

Option    "HorizSync"   "DFP: 31.5-64; CRT: 24.8-57"
Option    "VertRefresh" "DFP: 50-75;   CRT: 55-90"
Option    "TwinViewOrientation" "LeftOf"

Metamodes の設定

最後に "Metamodes" 画面モードの設定を行なう。"," で区切って、複数のモニター の解像度を設定する。";" で区切ることによって、複数のモードを設定できる。 以下は読みやすいように複数行にわたって書いているが、実際は一行にまとめる 必要があったと思う。
Option    "Metamodes" "DFP: 1280x1024, CRT: 1024x768 +1280+110 @1024x768 ; 
                       DFP: 640x512 @640x512, 1024x768 ; 
                       DFP: 1280x1024, CRT: NULL"

一行目の "+1280+110" というのは、"TwinViewOrientation" による配置順序を無視 して、独自に位置関係を設定する項目である。異なるモニタを使えば、 普通スクリーンの上下の位置は、適切なものとはならないだろう。 ここでは、CRT モニターの方を上に、110 ドット分ずらしている。 この設定ゆえ、右方向に 1280 ドット分ずらす設定も併記しておく。

一行目、二行目にある "@1024x768" という項目で、パンニング・ ドメインなるものを設定する。これを設定すると、いろいろあるけど、 相対的に画素数の少ないモニターで 表示できない範囲を無視してくれるようになるはずなのだが完全ではないようだ。 設定しないとどうなるんだっけ。上下にビューポイントが 動いたりするんだっけか。確か面倒だった。

三行目の "NULL" という設定は、 そのディスプレイを利用しないための設定。 DPMS のオフステートに対応したディスプレイならば、 電源もちゃんと切れて無いものとしてくれる。

この例のように設定すると、 GNOME の場合「画面の解像度の設定」で設定を動的に変更できる。 二つのデバイスをまとめて、三つの解像度が利用できるわけだ。

なお、設定をぜんぶまとめると以下の通り。

Option    "TwinView" "on"
Option    "TwinViewXineramaInfoOrder" "DFP, CRT"
Option    "TwinViewOrientation" "CRT LeftOf DFP"
Option    "HorizSync"   "DFP: 31.5-64; CRT: 24.8-57"
Option    "VertRefresh" "DFP: 50-75;   CRT: 55-90"
Option    "Metamodes" "1024x768 +1280+110 @1024x768, 1280x1024 ; 
          1024x768, 640x512 @640x512 ; NULL, 1280x1024"

まとめ 〜残された問題

古い mplayer のフルスクリーン表示で、映像の一部が表示されないことがある。 また古い mplayer だと異なるモニタのアスペクト比に自動では対応できない。 コマンドラインで、 "-xineramascreen 1" などと表示するモニターを明示したり、 "-monitoraspect 4:3" としてモニタのアスペクト比を明示しなければならない場 合もあろう。 ちなみに、Totem ならどちらも問題ない。

SDL を利用するアプリケーションでは、一方のモニターで SDL アプリケーションをフルスクリーンで表示し、 一方のモニターで通常画面を表示することができない。 SDL アプリケーションをフルスクリーン表示するには、 どちらか一方のモニターを無効にしないと、 二つのモニターにまたがって中央に表示が行なわれてしまう。

他にも、液晶ディスプレイと CRT モニターで 色合いが結構違ったりするのが気になったりもするけれども、 デュアルモニターは思った以上に便利。 私の CRT モニターでは、小さな文字を読むのはしんどいが、 大きな文字で端末エミュレータ専用にしてもいいし、 映像はやはり液晶モニタよりはきれいだったりする。 腐った CRT モニタでも捨てるにはお金がかかるので、 電気代に注意しつつ、有効に使ってもよいだろう。

2008/04/18 (Fri) 13:20 | タグ: computer


同じカテゴリの最新記事

  1. Gtk2-Perl でバックグラウンド動作
  2. Twitim: Twitter 専用 XMPP クライアント
  3. X でのデュアルモニター (ATI 編)
  4. scanbuttond for EPSON GT-S600/GT-F650
  5. マイナーアップデート ―私家版 BigClock 2.83c #5