2008年11月29日土曜日

(FreeBSD) Xorg.confをいじっても画面の解像度が変更できない・・・Xrandrってのがあるんですか

ビデオカードが1枚あまってたのでML115 G5に挿してみた

のつづきです。



Radeon HD3450というチップを使ったビデオカードで、Xorgを使ってみました。



Xが起動するまでは、何も問題なく、すぐにできたんですが、解像度を変更できなくて、ちょっと手間取りました。



ディスプレイは、しばらく前に買った

LCD-DTV221XBR 地デジチューナーつき液晶ディスプレイ

に、DVIで接続しました。1680x1050で表示できるはずなんですが、xorg.confをどう書き換えても、1280x1024でしか表示されないのです。



FreeBSDは、7.1-BETA2、Xはportsでインストールした最新のXorg 7.3 (xorg-7.3_2)。



ログファイル/var/log/Xorg.0.logをじっくりと眺めていて、ようやく気がつきました。



(II) RADEONHD(0): RandR: Adding RRoutput TV_7PIN_DIN for Output DAC B
(II) RADEONHD(0): RandR: Adding RRoutput VGA_1 for Output DAC A
(II) RADEONHD(0): RandR: Adding RRoutput DVI-I_1/digital for Output UNIPHY_KLDSKP_LVTMA
(II) RADEONHD(0): RandR: Adding RRoutput DVI-I_1/analog for Output DAC B
(II) RADEONHD(0): Output TV_7PIN_DIN using monitor section Monitor0
(II) RADEONHD(0): Output VGA_1 has no monitor section
(II) RADEONHD(0): Output DVI-I_1/digital has no monitor section
(II) RADEONHD(0): Output DVI-I_1/analog has no monitor section
(II) RADEONHD(0): I2C device "RHD I2C line 1:ddc2" registered at address 0xA0.
(II) RADEONHD(0): EDID data for LCD-DTV221X
(II) RADEONHD(0): Manufacturer: IOD  Model: 1683  Serial#: ●●●●●●●●
(II) RADEONHD(0): Year: 2008  Week: 32
(II) RADEONHD(0): EDID Version: 1.3
(II) RADEONHD(0): Digital Display Input
(II) RADEONHD(0): Max H-Image Size [cm]: horiz.: 47  vert.: 30
(II) RADEONHD(0): Gamma: 2.20
(II) RADEONHD(0): DPMS capabilities: StandBy Suspend Off; RGB/Color Display
(II) RADEONHD(0): First detailed timing is preferred mode
(II) RADEONHD(0): redX: 0.638 redY: 0.328   greenX: 0.300 greenY: 0.600
(II) RADEONHD(0): blueX: 0.149 blueY: 0.060   whiteX: 0.312 whiteY: 0.330
(II) RADEONHD(0): Supported VESA Video Modes:
(II) RADEONHD(0): 720x400@70Hz
(II) RADEONHD(0): 640x480@60Hz
(II) RADEONHD(0): 640x480@67Hz
(II) RADEONHD(0): 640x480@72Hz
(II) RADEONHD(0): 640x480@75Hz
(II) RADEONHD(0): 800x600@56Hz
(II) RADEONHD(0): 800x600@60Hz
(II) RADEONHD(0): 800x600@72Hz
(II) RADEONHD(0): 800x600@75Hz
(II) RADEONHD(0): 832x624@75Hz
(II) RADEONHD(0): 1024x768@60Hz
(II) RADEONHD(0): 1024x768@70Hz
(II) RADEONHD(0): 1024x768@75Hz
(II) RADEONHD(0): 1280x1024@75Hz
(II) RADEONHD(0): Manufacturer's mask: 0
(II) RADEONHD(0): Supported Future Video Modes:
(II) RADEONHD(0): #0: hsize: 1280  vsize 1024  refresh: 60  vid: 32897
(II) RADEONHD(0): #1: hsize: 1440  vsize 900  refresh: 60  vid: 149
(II) RADEONHD(0): #2: hsize: 1680  vsize 1050  refresh: 60  vid: 179
(II) RADEONHD(0): Supported additional Video Mode:
(II) RADEONHD(0): clock: 108.0 MHz   Image Size:  474 x 296 mm
(II) RADEONHD(0): h_active: 1280  h_sync: 1328  h_sync_end 1440 h_blank_end 1688 h_border: 0
(II) RADEONHD(0): v_active: 1024  v_sync: 1025  v_sync_end 1028 v_blanking: 1066 v_border: 0
(II) RADEONHD(0): Supported additional Video Mode:
(II) RADEONHD(0): clock: 119.0 MHz   Image Size:  474 x 296 mm
(II) RADEONHD(0): h_active: 1680  h_sync: 1728  h_sync_end 1760 h_blank_end 1840 h_border: 0
(II) RADEONHD(0): v_active: 1050  v_sync: 1053  v_sync_end 1059 v_blanking: 1080 v_border: 0
(II) RADEONHD(0): Serial No: ●●●●●●●
(II) RADEONHD(0): Monitor name: LCD-DTV221X
(II) RADEONHD(0): EDID (in hex):
(II) RADEONHD(0):     ■■■■■■■■■■■■■■■■
(II) RADEONHD(0):     ■■■■■■■■■■■■■■■■
(II) RADEONHD(0):     ■■■■■■■■■■■■■■■■
(II) RADEONHD(0):     ■■■■■■■■■■■■■■■■
(II) RADEONHD(0):     ■■■■■■■■■■■■■■■■
(II) RADEONHD(0):     ■■■■■■■■■■■■■■■■
(II) RADEONHD(0):     ■■■■■■■■■■■■■■■■
(II) RADEONHD(0):     ■■■■■■■■■■■■■■■■
(II) RADEONHD(0): Output TV_7PIN_DIN disconnected
(II) RADEONHD(0): Output VGA_1 disconnected
(II) RADEONHD(0): Output DVI-I_1/digital connected
(II) RADEONHD(0): Output DVI-I_1/analog disconnected
(II) RADEONHD(0): Output DVI-I_1/digital using initial mode 1280x1024
(II) RADEONHD(0): RandR 1.2 support enabled
(==) RADEONHD(0): RGB weight 888
(==) RADEONHD(0): Default visual is TrueColor
(==) RADEONHD(0): Using gamma correction (1.0, 1.0, 1.0)
(II) RADEONHD(0): Using 1680x1680 Framebuffer with 1728 pitch
(==) RADEONHD(0): DPI set to (96, 96)



ふとRandRってなんだろうなぁ???と思って調べてみたら、これのことでした。

http://www.thinkwiki.org/wiki/Xorg_RandR_1.2
Xorg RandR 1.2

Xrandrという名前は、portupgradeしたときによく目にしていたので、知ってはいたのですが

Xrandr - X Resize, Rotate and Reflection extension.

というものだそうで、これを使って、解像度やスクリーンサイズを変更できるのでした。



この手の設定は、以前は、xorg.confにあれこれ書いて設定していたのですが、現在、RandRが使える場合には、xorg.confに書いた内容の一部は、無視されてしまうそうです。
この記述は無視するよ、とwarningメッセージとしてログに残してくれてれば、もっとわかりやすかったのに・・・



そういえば、Linuxのナンカでgnome2やkdeとかを使ってると、解像度を変更できるんですが、いったいどういう仕組みになってるんだ?Linux方面で勝手に拡張されたのかね?と、そのときは思ってました。



200811291







200811292



fvwm-1.24rを10年以上使い続けてきた私は、まるで浦島太郎・・・
最近は、若者に負けないように(?)、gnome2とmetacityにしてがんばってますけど。



MacやWindowsと比べて、X Window Systemは歴史は長いものの、機能的にはなんだかなぁと見劣りするところがあって(歴史が長いゆえのしがらみかも)、使っている最中に解像度を変更することは、あまり自由にはできなかったのですが、X RandRのおかげで、ようやくWindows 95程度までに進歩した、ってことでしょうか。





xrandrというコマンドがあって(x r and rという区切りになっていることを、今回初めて知った!)、これで画面の解像度を変更できるそうです。



% xrandr
Screen 0: minimum 320 x 200, current 1680 x 1050, maximum 1680 x 1680
TV_7PIN_DIN disconnected
VGA_1 disconnected
DVI-I_1/digital connected 1680x1050+0+0 474mm x 296mm
   1280x1024      60.0 +   75.0     59.9 
   1680x1050      59.9*    59.9 
   1440x900       60.0 
   1024x768       75.1     70.1     60.0 
   832x624        74.6 
   800x600        72.2     75.0     60.3     56.2 
   640x480        75.0     72.8     66.7     60.0     59.9 
   720x400        70.1 
DVI-I_1/analog disconnected



こんな感じで、変更できました。

% xrandr -s 800x600
% xrandr -s 1280x1024
% xrandr -s 1680x1050




これまで、チップセット内蔵ビデオ機能か、古くて枯れたビデオカードと、古いウインドウマネージャを使ってた私には、わからなかったことばかりです。せっかく、やや新しいRadeon HD 3450を使ってみたので、compiz-fusionというウインドウマネージャを試してみようと思いました。



OpenGLをつかってデスクトップを3Dでグリグリ動かしちゃう、見た目は派手だが、実用的ではなく安定性を求めるならやめとく、みたいなものらしいです。



インストールするだけなら、FreeBSDだと、portsで簡単にできました。compizとcompiz-fusionの2つがあって、別物らしい(?)んですが、compiz-fujisonの方がよさそうです。



 ・ ・ ・ で す が、全然、動きませんでした。



いろいろ調べてたら気がついたんですが、dmesgをみてもdrmがでてこないのです。



普通だったら、portsで、graphics/driをインストールしておけば、Xが起動しているときに、radeon_dri.soとかi915_dri.soみたいなのが使われると思うのですが、それは使われいない。なぜなら、drmというカーネルサポートが動いていなかったから。



drm.koとかradeon.koとかi915.koとか、そういったカーネルモジュールが自動的にロードされるはずなのに、それらもロードされていない。



これってのは、



FreeBSDのカーネルでは、Radeon HD 3450がまだサポートされていない



っていうことでした。



Xorgのログを見ると



(II) RADEONHD(0): Unknown card detected: 0x95C5:0x174B:0xE400.
    If - and only if - your card does not work or does not work optimally
    please contact radeonhd@opensuse.org to help rectify this.
    Use the subject: 0x95C5:0x174B:0xE400: <name of board>
    and *please* describe the problems you are seeing
    in your message.
(--) RADEONHD(0): Detected an RV620 on an unidentified card



とか出てて、Unknownはちょっと気になるのですがそれはおいておくとして、RV620とかいうチップなんだってことがわかります。



ちなみに、同じくXorgのログには、こんな対応関係が記録されています。



RV610 : Radeon HD 2350, HD 2400 Pro/XT, HD 2400 Pro AGP; FireGL V4000.
RV620 : Radeon HD 3450, HD 3470.
RV630 : Radeon HD 2600 LE/Pro/XT, HD 2600 Pro/XT AGP; Gemini RV630;
    FireGL V3600/V5600.
RV635 : Radeon HD 3650, HD 3670.
RV670 : Radeon HD 3690, 3850, HD 3870, FireGL V7700, FireStream 9170.



FreeBSDのカーネルで、drmのソースコードはsys/dev/drm/のあたりにありました。drm_pciids.hというファイルにPCIのIDが列挙されていてので、この中で検索してみると、RV620が無いです。



http://www.jp.freebsd.org/cgi/cvsweb.cgi/src/sys/dev/drm/drm_pciids.h



最新の8-CURRENTで使われていると思われるHEADブランチを眺めてみると



http://www.jp.freebsd.org/cgi/cvsweb.cgi/src/sys/dev/drm/drm_pciids.h?rev=1.12&content-type=text/x-cvsweb-markup



まだ入ってないですね。



2008年10月13日のコミットログに、Add support for Radeon rs740 (HD 2100)とあるのですが、もうちょっと先のことでしょうかね?
PCI IDを書き加えるだけで、動いてしまう可能性もあるのかなぁ。





i815な別のパソコンで30分ほど格闘してみましたが、そちらでも動かせず、あきらめました。



2 件のコメント:

  1. 解像度の動的な変更だけなら、昔からAlt+Ctrl+"+"やAlt+Ctrl+"-"でできてましたよね。

    返信削除
  2. 私も解像度の変更が出来ずに困っていました。
    参考にさせていただきます。

    返信削除