Setting of X Window System(X.Org) on Linux box

参照回数[counter]

XFree86-4.5.0からX11R6.9 by X.Orgにバージョンアップしました。 linuxカーネルは2.4.33.xボードはMatrox G400 SHを利用しています。

事前作業

カーネル再構築

linux-2.4.32に含まれるMatrox G400のDRM(Direct Rendering Manager)ドライバでは DRI機能が有効になりません。いろいろ調べた結果、 G400のDRMドライバをモジュール(mga.o)化し、 後で、http://dri.freedesktop.org/ から取得したソースからmga.oをビルドし入れ換えます。

コンフィグ内容

<*> /dev/agpgart (AGP Support)
[*]   Intel 440LX/BX/GX and I815/I820/I830M/I830MP/I840/I845/I850/I86
Direct Rendering Manager (XFree86 DRI support)  --->
  [*] Direct Rendering Manager (XFree86 DRI support)
  <M>   Matrox g200/g400

/etc/rc.d/rc.modules

/sbin/modprobe mga

2006/08/17 追記 : linux-2.4.33.xに含まれるMatrox G400のDRMドライバでは DRI機能が有効になりました。ですので、特にモジュール化する必要は無くなり ました。

X11R6.9 by X.Orgのビルド

/etc/X11/xorg.conf

XF86Configがそのまま使えたので、
cp /etc/X11/XF86Config /etc/X11/xorg.conf
DRIを有効にするためのキモは、
Section "Module"

    〜途中省略〜

    Load       "glx"
    Load       "dri"

EndSection

Section "DRI"
        Mode    0666
EndSection

DRMモジュールの更新

DRI機能を有効にするため、kernelに含まれるmga.oを http://dri.freedesktop.org/ から取得したソースでビルドしたmga.oに入れ換えます。

2006/08/17 追記 : linux-2.4.33.xに含まれるMatrox G400のDRMドライバでは DRI機能が有効になりました。ですので、以上のモジュール入れ換え作業は 特に必要有りません。

動作確認

とりあえず、X.Orgのビルドは完了!

余談

xterm

デフォルトではxtermはビルドされません。host.defで
#define BuildXterm YES
としたら、Xのビルド時に一緒に出来上がるはずです...が、Slackware-8.0な 環境では多少問題があって(group utmpが無いとか...)うまく行かなくて、 xtermのソースディレクトリで個別に すればうまく行きました。また、インストール先が/usr/local/bin/xterm なので、
ln -sf /usr/local/bin/xterm /usr/X11R6/bin/xterm
した方がいいかもしれません。

2048x1536ドット(QXGA)

うちは、 という組合せなんですが、 xorgcfgで何も考えずに作ったxorg.confで、なんと2048x1536ドット(QXGA)の 解像度が出てしまいました。まぁリフレッシュレートが60Hzで若干ちらつき が有るのと、メモリが足りなくてDRIが有効にならないので常用は出来ません でしたが。ちょっとびっくりしました。
※ DRIに必要なメモリ容量 = 水平解像度 x 垂直解像度 x (depth / 8) x 3

gtf (Modeline算出コマンド)

希望する解像度で起動しない場合、xorg.confのSection "Monitor"でModelineを記述して やるとうまく行くことが有ります。Modelineの各パラメータを求めるためには 非常に複雑な計算を行わなければなりません...と思っていたのですが、今は便利な コマンドが有るんですねぇ。

たとえば、横方向解像度 1600ドット、縦方向解像度 1200ドット、リフレッシュレート 75Hzで 表示したい場合、以下のように実行します。

gtf 1600 1200 75

  # 1600x1200 @ 75.00 Hz (GTF) hsync: 93.97 kHz; pclk: 205.99 MHz
  Modeline "1600x1200_75.00"  205.99  1600 1720 1896 2192  1200 1201 1204 1253  -HSync +Vsync
で、結果から水平同期周波数の93.97kHzがモニターの適正範囲内でかつ、ピクセルクロックの205.99MHzが ビデオボードの適正範囲内であれば、"1600x1200_75.00"を"1600x1200"に修正してxorg.confに 転記してやればうまくいく可能性が高いです。

TrueType(OpenType)フォントの扱いに関して

Core X font system経由で描画する場合

流れとしては
X client -> xlib(のfont描画関数) -> (freetype|xtt) module -> font描画
こんな感じ(と想像する)。Core X font systemでは、サーバ側でfont描画を行います。 kterm, tgif等、比較的古いアプリケーションはこの方式を利用してます。

フォントパスの指定

/etc/X11/xorg.confにて
Section "Files"
        RgbPath      "/usr/X11R6/lib/X11/rgb"
        ModulePath   "/usr/X11R6/lib/modules"
        FontPath     "/usr/share/fonts/TrueType"
        FontPath     "/usr/X11R6/lib/X11/fonts/misc/"
        FontPath     "/usr/X11R6/lib/X11/fonts/Speedo/"
        FontPath     "/usr/X11R6/lib/X11/fonts/Type1/"
        FontPath     "/usr/X11R6/lib/X11/fonts/CID/"
        FontPath     "/usr/X11R6/lib/X11/fonts/75dpi/"
        FontPath     "/usr/X11R6/lib/X11/fonts/100dpi/"
#       FontPath     "tcp/localhost:7100"
EndSection
のように指定する。

フォント情報の作成

フォント情報の作成(fonts.dirが既に手作業で作成済の場合)

設定例

TTCap拡張書式の参考ていどに...

Xft2 + fontconfig経由で描画する場合

流れとしては
X client -> gtk+-2.x -> gdk -> Xft2 + fontconfig -> font描画
こんな感じ(と想像する)。gtk+-2.xを利用したアプリケーションでは、クライアント側でfont描画を行います。 gnome, firefox等、比較的新しいアプリケーションはこの方式を利用してます。

フォントパスの指定

デフォルトのフォントパスは/etc/fonts/fonts.confの<dir></dir>タグ の中で指定されています。

独自にフォントパスを追加したい場合は、/etc/fonts/local.conf にて

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
        <dir>/usr/share/fonts/TrueType</dir>
</fontconfig>
のように指定する。

フォント情報の作成

fc-cache -f -v
上記のコマンド実行で、/etc/fonts/以下の設定ファイルで指定したフォント格納 ディレクトリ配下にfonts.cache-1が作成される。

クラッシュ(2006/01/11)

ふとしたはずみでXがクラッシュする事を発見した。一つはtgifを起動した時、もう一つは OpenOfficeを起動して、フォントを変更しようとした時...

/var/log/Xorg.0.log.oldの最後には以下のメッセージが記録されていた。

        This should not happen!
        An unresolved function was called!

Fatal server error:



Please consult the The X.Org Foundation support 
         at http://wiki.X.Org
 for help. 
Please also check the log file at "/var/log/Xorg.0.log" for additional information.
「これはありえな〜い!解決できない機能がよびだされたよ〜ん」との事。 ん〜なんだか深みにはまりそうな気配が...と思ったけれど、ふとログの 何行か上を見てみると...
Symbol Xllalloc from module /usr/X11R6/lib/modules/fonts/libspeedo.a is unresolved!
Symbol Xllalloc from module /usr/X11R6/lib/modules/fonts/libspeedo.a is unresolved!
Symbol Xllrealloc from module /usr/X11R6/lib/modules/fonts/libspeedo.a is unresolved!
Symbol Xllalloc from module /usr/X11R6/lib/modules/fonts/libspeedo.a is unresolved!
Symbol Xllalloc from module /usr/X11R6/lib/modules/fonts/libspeedo.a is unresolved!
Symbol Xllalloc from module /usr/X11R6/lib/modules/fonts/libspeedo.a is unresolved!
Symbol Xllalloc from module /usr/X11R6/lib/modules/fonts/libspeedo.a is unresolved!
Symbol Xllalloc from module /usr/X11R6/lib/modules/fonts/libspeedo.a is unresolved!
Symbol Xllalloc from module /usr/X11R6/lib/modules/fonts/libspeedo.a is unresolved!
Symbol Xllalloc from module /usr/X11R6/lib/modules/fonts/libspeedo.a is unresolved!
Symbol Xllalloc from module /usr/X11R6/lib/modules/fonts/libspeedo.a is unresolved!
Symbol Xllalloc from module /usr/X11R6/lib/modules/fonts/libspeedo.a is unresolved!
Symbol Xllalloc from module /usr/X11R6/lib/modules/fonts/libspeedo.a is unresolved!
こないなメッセージがぁ...。とりあえず/etc/X11/xorg.confから
        FontPath     "/usr/X11R6/lib/X11/fonts/Speedo/"
        Load  "speedo"
上記のどちらかの行をコメントアウトすると現象は回避されるよう。

半角文字が全角文字と同じ幅で表示される問題(2008/03/21)

別のマシンでSlackware-11(Xorg-6.9)を入れた際にこの問題が発生。 特定の固定幅TrueTypeフォント(例えばIPAフォント)を利用すると 発生する場合があるとの事で、解決策としては、/etc/fonts/local.conf を以下の内容で作成するとよい。
 
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<!-- /etc/fonts/fonts.conf file to configure system font access -->
<fontconfig>

<!--
  Some Asian fonts misadvertise themselves as monospaced when
  in fact they are dual-spaced (half and full).  This makes
  FreeType very confused as it forces all widths to match.
  Undo this magic by disabling the width forcing code -->

        <match target="font">
                <test name="family"><string>IPAGothic</string></test>
                <edit name="globaladvance"><bool>false</bool></edit>
        </match>

        <match target="font">
                <test name="family"><string>IPAMincho</string></test>
                <edit name="globaladvance"><bool>false</bool></edit>
        </match>

</fontconfig>
問題を起こすフォントに関してglobaladvanceという機能を無効に しています。別の幾つかのアジア圏のフォントについては /etc/fonts/fonts.confに既に同様の設定が記述されており、ある程度 既知の問題のよう。 根本の解決はfontconfig(or freetype or xft ?)のバージョンアップらしい。
Return
Introduction of Kyoto internet people
[更新]