xrandrコマンドを使ってモニタ出力を動的に変更する。
背景 †
ノートパソコンを使う場合、 システムを再起動することなく外部モニタ出力に 画面を出力したり、必要のないモニタ出力を切ったりといったことが 求められる。 特に最近はパソコンからプロジェクタに 画面を出力してプレゼンをすることが一般的になっているため、 人によっては動的なモニタ出力変更機能は必須と言える。
LinuxではGUI画面の制御は基本的にXサーバが取りしきっている。 Xサーバの一種であるXorgにはXRandR(X Resize and Rotate Extension) と呼ばれる拡張機能があり*1、 画面出力設定を動的に(つまり、システムやXサーバを再起動することなく) 変更することができる。 これは単にモニタの解像度の変更や外部出力の切り替えのみにとどまらず、 複数のモニタを連結して一つのスクリーンのように扱う出力設定を することもできる(と、言われている)。
テスト環境 †
- Model: HP Compaq nc6230
- OS: Ubuntu Linux 7.10 日本語ローカライズ版
- Kernel: 2.6.22-14-generic
- Video Card: ATI Technologies Inc. M22 [Mobility Radeon X300]
- Version of Xorg: 7.2
XRandRを使えるようにする †
初めに気をつけたいのは、ビデオカードドライバによってはXRandRの機能を (一部あるいは全て)使えないということだ。 参考セクションに挙げたDebian Wikiに対応ドライバのリストがあるのでまずチェックする。 あるいは、以下に述べるコマンドで挙動がおかしかったり不十分だったりしたら ドライバを変えてみるといい。
筆者の場合、当初はメーカー製のプロプライエタリドライバ"fglrx"を使っていたが、 この状態では外部モニタ出力の制御はできなかった。 そこで、ドライバを"radeon"に変更したところ、うまく動くようになった。
ドライバ以外ではxorg.confの記述について特別の注意を払う必要は ないようだ。 デュアルヘッド構成をする場合は仮想画面サイズの設定 (Screenセクション、DisplayサブセクションのVirtualディレクティブ) が必要となるが、 それ以外では複数の出力デバイスがあるということを 示す必要すらないらしい。
xrandrコマンド †
XRandRの機能はxrandrコマンドによって使うことができる。 個人的に不思議だったが、このコマンドは管理者権限を必要としない。
バージョン表示 †
$ xrandr -v
出力デバイス列挙 †
$ xrandr -q
操作可能な出力デバイスを列挙する。 これを実行すると、コネクタにモニタがつながっていようがいまいが 全ての出力先が列挙されるはず。
Screen 0: minimum 320 x 200, current 1024 x 768, maximum 1024 x 1024 VGA-0 disconnected (normal left inverted right) DVI-0 disconnected (normal left inverted right) LVDS connected 1024x768+0+0 (normal left inverted right) 0mm x 0mm 1024x768 60.0*+ 60.0 800x600 60.3 640x480 59.9 S-video disconnected (normal left inverted right)
実際には複数の出力先があるのに 列挙されない場合、ドライバがXRandRに対応していないのかもしれない。
外部出力(解像度を指定) †
$ xrandr --output デバイス --mode モード
指定した出力デバイスに対し指定したモードで画面を出力する。 例えば、
$ xrandr --output LVDS --mode 800x600
というふうに使う。
外部出力(自動) †
$ xrandr --output デバイス --auto
指定したデバイスにモニタが接続されていれば、 適当な解像度で画面を出力する。 接続されていなければ出力を切る。
外部出力を切る †
$ xrandr --output デバイス --off
その他 †
その他、デュアルヘッド構成のやり方などは マニュアルや以下の参考Webサイトを参照。
参考 †
- X Org Wiki - Projects/XRandR
- Debian Wiki - HowToRandR12
- xrandr manpage
- radeon manpage
