2010/10/07(Thu)Fedoraで自動認識していない画面解像度に変更する方法

2010/10/07 15:04 Software::Linux
以前、X Window Systemを最適な解像度で立ち上げるにはxorg.confをいじったり色々面倒だったが、最近は自動的に最適解像度を検知して、画面が映らないことがないようにしてくれる。
一見これは便利なのだが、モニタ情報を正しく吐かないKVMスイッチなどを使っていると、SXGA(1280x1024)が映るモニタなのにXGA(1024x768)までしか選べないなんて事が起こって非常に不便。

ということで、今回は解像度のリストにない任意解像度に切り換える方法を紹介。

gnome-display-properties

gnome-display-propertiesというコマンドを実行するとこのような画面が現れる。

fedora-monitor-lowreso.png

正しくモニタを認識していれば、モデル名と解像度がきちんと出るのだが、先のようにKVMスイッチがモニタ情報を中継してくれない場合などは正しく検知されずにこうなってしまう。
私が使っているモニタはDELL E193FPというSXGA(1280x1024)まで出力可能なモニタなので、SXGA表示できるようにしてみる。

変更方法

X Window Systemで動的に画面解像度を変更するにはxrandrというコマンドを使う。
xrandrはバージョンによって出来ることに差があり、v1.0やv1.1だと今回のような方法は取れないと思うので、その場合はxorg.confを直す方が早いと思われる。

とりあえず、現状の解像度リストを出力してみる。現在は"VGA-1"というVGA接続の主モニタにXGAで表示中。(↓の太字部分をメモしておく)
$ xrandr --version
Server reports RandR version 1.3

$ xrandr
Screen 0: minimum 320 x 200, current 1024 x 768, maximum 2048 x 2048
VGA-1 connected 1024x768+0+0 (normal left inverted right x axis y axis) 0mm x 0mm
   1024x768       60.0*
   800x600        60.3     56.2
   848x480        60.0
   640x480        59.9

もし、ssh経由などリモートコンソールから変更する場合は、DISPLAYという環境変数をexportしておけばローカルコンソールの設定を変更可能。wコマンドでローカルがどのDISPLAYを使っているか表示できるが、たいていは":0.0"で問題無いと思われる。
$ xrandr
Can't open display        <== ssh越しなのでDISPLAYが定義されてない

$ w
 14:38:19 up 1 day, 15:03,  3 users,  load average: 0.05, 0.08, 0.03
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
kero     tty1     :0               Tue23   39:02m 17:54   0.11s pam: gdm-password
kero     pts/0    hogehogehoge     Tue23    0.00s  0.44s  0.01s w
kero     pts/1    :0.0             Wed21    1:25   0.13s  0.13s bash

$ export DISPLAY=:0.0

次に、変更したい解像度の周波数情報などを自動的に計算してくれるcvtを使って、設定値を得る。
$ cvt 1280 1024

# 1280x1024 59.89 Hz (CVT 1.31M4) hsync: 63.67 kHz; pclk: 109.00 MHz
Modeline "1280x1024_60.00"  109.00  1280 1368 1496 1712  1024 1027 1034 1063 -hsync +vsync
任意の名前(今回は"1280x1024"とした)に続けて、cvtの3列目以降の設定値をxrandrに足し(--newmode)、出力デバイスと紐づけて(--addmode)、最後に切り換える(--outputと--mode)。なお、デバイスの名前"VGA-1"は$ xrandrをしたときに表示されているので、DVI接続の場合などは読み替えること。
$ xrandr --newmode "1280x1024" 109.00  1280 1368 1496 1712  1024 1027 1034 1063 -hsync +vsync
$ xrandr --addmode VGA-1 "1280x1024"
$ xrandr --output VGA-1 --mode 1280x1024