XFree86 3.3.x では X サーバのバイナリが複数個あり、それぞれのサーバは
異なるハードウェアを動作させる。XFree86 4.0 はこれとは異なり、
XFree86
と呼ばれるバイナリひとつだけを使う。このバイナリは
ひとつまたは複数個のドライバを静的にリンクできるし、もっと普通の使い方
としてビデオドライバやその他に必要なモジュールを動的にロードできる。
XFree86 4.0 の X サーバは Intel/x86 プラットフォーム用のほとんど の UNIX(R) および UNIX 系 OS に対応している。これに加えて、Alpha および PowerPC プラットフォーム用の Linux にも対応している。この他の アーキテクチャや OS に対応するための作業も進行中、あるいは将来の計画に なっている。
XFree86 の X サーバには組み込みのランタイムローダが組み込まれています。 これは Metro Link 社が寄付 しました。このローダはよく使われるたいていのフォーマットの 普通のオブジェクトファイルやライブラリをロードできます。このローダは OS ネイティブの動的ローダ対応に頼らないため、動的ロード機能を持たない OS でも動作し、モジュールを OS に依存しないようにできます(ただし、当然 ながら CPU のアーキテクチャには依存します)。つまり、例えば Linux/x86 でコンパイルしたモジュールを Solaris/x86, FreeBSD, あるいは何と OS/2 上で動作する X サーバでロードできます。この方法の主な利点のひとつは、 モジュールが更新されたときに様々な OS でモジュールを再コンパイルする 必要がないことです。我々はこの利点を生かし、メジャーリリースの合間でも もっとこまめにモジュールを更新しようと考えています。
バージョン 4.0 のローダは Intel(x86), Alpha, PowerPC プラットフォーム に対応しています。また Sparc プラットフォームにも予備的に対応していま すが、まだ使われていません。
X サーバがモジュールを使う対象は、ビデオドライバ、X サーバの機能拡張、 フォントのラスタライザ、入力デバイスのドライバ、フレームバッファの レイヤ(mfb, cfb 等)、一部のドライバ(XAA等)が使う内部コンポーネント等で す。
このリリースで使われているモジュールのインタフェース(API と ABI)はまだ 予告無しに変更されるかもしれません。4.0 リリースの時点では モジュールのインターフェースに関する後方互換性を保とうとしていますが (つまり 4.0 のモジュールが将来の X サーバのコアバイナリで動作するとい うこと)、必ずそうなることは保証できません。将来のリリースでは モジュールのインタフェースをしっかりと文書化して確定しようと考えていま す。それができれば後方互換性の実現は容易になるでしょう。
モジュールのセキュリティに関する注意
XFree86 の X サーバは root 権限で動作します。つまり X サーバがロードするモジュールも root 権限で動作します。 そのため、どんなユーザも入手先が信頼できるローダブルモジュール しか使わないことをお勧めします。将来のリリースでは我々が提供し たモジュールの署名/検査を行う機構が使えるようになると考えてい ます。
X サーバの設定ファイルのフォーマットは、新しい機能のいくつかを扱うため
に拡張されています。xf86config
ユーティリティを使うと基本的な
設定ファイルを生成できますが、その後にある程度は手で編集する必要がある
かもしれません。X サーバは基本的な設定ファイルの生成にも先行的に対応し
ています。これは(root になって) "XFree86 -configure
" を実行す
ると作れます。X サーバに生成させるのではなく、サンプルの
XF86Config.eg
ファイルを雛型として使うこともできます。この
サンプルファイルは /usr/X11R6/lib/X11
にインストールされてい
ます。XF86Setup
ユーティリティは現在は使えませんが、開発作業
は進めています。
主な変更点はこの文書で押えていますが、全体を網羅した情報については XF86Config のオンラインマニュアルを見てください。
.so
はモジュール名の指定で
は付けないようになりました。モジュールに対するオプションの指定は、通
常の Load キーワードではなく、SubSection 経由でモジュールをロードす
れば行えます。デフォルトでロードされるフォントモジュールは bitmap
だけです。デフォルトではサーバ機能拡張はまったくロードされませんが、
一部の機能拡張はサーバに組み込まれています。小さくて雑多な拡張機能を
集めて入れてある機能拡張モジュール(extmod
)のロードは強く勧
めます。なぜならよく使われる機能の一部は、このモジュールがないと正常
に動かないからです。以下の例は、サーバの全ての機能拡張をロードし、さ
らに Type1 フォントと TrueType フォントへの対応機能をロードする方法
です。例の中のコメントアウトされている部分は、機能拡張にオプションを
渡す方法を示しています(この例は、雑多な拡張機能(extmod
)を
XFree86-VidModeExtension 機能を無効にした状態でロードするための指定
です):
Section "Module" Load "dbe" Load "record" Load "glx" Load "pex5" Load "xie" Load "extmod" Load "type1" Load "freetype" # SubSection "extmod" # Option "Omit XFree86-VidModeExtension" # EndSubSection EndSection
この形式では、オプションは名前を指定するだけです。この名前では大文字と 小文字は区別されませんし、空白文字やアンダースコアも無視されます。 二番目の種類は名前と値からなります:Option "名前"
この値は、オプションを処理するコードに文字列として透過的に渡されます。 値のよく使われる形式は整数、真偽値、実数、文字列、周波数です。以下の 真偽値で表されるオプションは「TRUE(真)」の意味と解釈されます:Option "名前" "値"
"true"
, "yes"
, "on"
, "1"
, 空の値。
FALSE(偽)と解釈される値は "false"
, "no"
,
"off"
, "0"
です。これに加えて、"no"
は真偽値で表されるオプションの名前の前に付けて、その値が偽で
あることを示すために使えます。周波数を指定するオプションでは、指定する
数値の後に Hz
や kHz
, MHz
を追加できます。
注意: 指定する値はたとえ数値であっても二重引用符("
)でくくらな
ければなりません。
Option "blank time" "10" Option "standby time" "20" Option "suspend time" "30" Option "off time" "40"
Section "InputDevice" Identifier "Keyboard 1" Driver "keyboard" Option "AutoRepeat" "500 5" Option "XkbModel" "pc104" Option "XkbLayout" "us" EndSection Section "InputDevice" Identifier "Mouse 1" Driver "mouse" Option "Protocol" "PS/2" Option "Device" "/dev/mouse" Option "SampleRate" "80" EndSection
UseModes
"
キーワードを使ってこれらを「インクルード」できます。Monitor セクション
には Option も書けます。"DPMS"
や "Sync on Green"
といったモニタ固有の Option 設定は Monitor セクションで指定するのがよ
いでしょう。
Section "Device" Identifier "MGA 1" Driver "mga" BusID "PCI:1:0:0" Option "PCI Retry" EndSection
新しい ServerLayout セクションの書き方のもっと詳しい説明については XF86Config のオンラインマニュアルを見てください。Section "ServerLayout" Identifier "Layout 1" Screen "MGA 1" Screen "MGA 2" RightOf "MGA 1" InputDevice "Keyboard 1" "CoreKeyboard" InputDevice "Mouse 1" "CorePointer" InputDevice "Mouse 2" "SendCoreEvents" Option "BlankTime" "5" EndSection
設定ファイルの検索パスは拡張されており、/etc/X11
と
/usr/X11R6/etc/X11
ディレクトリが追加されています。検索パスの
厳密な説明は XF86Config のオンラインマニュアルに書かれています。
新しく X サーバに追加されたコマンド行オプションは以下の通りです:
-depth
nサーバが動作する際の色の深さを指定します。 ほとんどのドライバでは 8 がデフォルト値です。ほとんどのドライバ は 8, 15, 16, 24 に対応しています。一部のドライバは 1, 4 にも 対応しています。他の深さに対応しているドライバもあるかもしれま せん。注意する点は、前のバージョンで指定していた ``bpp'' と深 さは違うことです。深さは、ピクセルの値を決める上で意味がある ビットの数です。bpp は各ピクセルが使うビット数の合計であり、使 わないビットも数えます。従来の
-bpp
オプションはもう 認識しません。なぜなら、bpp はサーバの動作を指定するのによい方 法ではないからです。
-fbbpp
nフレームバッファで使う bpp のフォーマットを指定します。24 ビット モードで、フレームバッファのフォーマットがドライバがデフォルト で選ぶものと異なる場合に使えます。大抵の場合は使う必要はありません。
-pixmap24
クライアント側のピックスマップのフォーマットを バージョン 3.3.x のサーバで良く使われる packed 24 ビットフォーマット にします。デフォルト値はこれよりも使われている 32 ビットフォーマット です。普通はこのオプションを指定する必要はありません。
-pixmap32
クライアント側のピックスマップのフォーマットを 32 ビット フォーマットにします。これがデフォルト値なので、普通は指定する 必要はありません。
-layout
name設定ファイル内のどの ServerLayout セクションを使うのかを指定し ます。このオプションを指定しなければ、最初の ServerLayout セクションが使われます。ServerLayout セクションがなければ 最初の Screen セクションが使われます。
-screen
name設定ファイル中のどの Screen セクションを使うのかを指定します。 このオプションが指定されていなければ、最初の ServerLayout セクションが使われます。ServerLayout セクションがなければ最初 の Screen セクションが使われます。
-keyboard
name設定ファイル内のどの InputDevice セクションをコアキーボードの 設定に使うのかを指定します。このオプションは
-screen
オプションと組み合わせて使えます。
-pointer
name設定ファイル内のどの InputDevice セクションをコアポインタの 設定に使うのかを指定します。このオプションは
-screen
オプションと組み合わせて使えます。
-modulepath
pathモジュールの検索パスを指定します。パスはサーバモジュールを探す ディレクトリ(絶対パス)のコンマ区切りのリストです。この オプションで指定すると、設定ファイルで指定した値は上書きされま す。このオプションが使えるのはサーバを
root
ユーザで 実行した時だけです。
-logfile
fileログのファイル名を指定します。このオプションで指定すると デフォルト値が上書きされます。このオプションが使えるのはサーバ を
root
ユーザで実行した時だけです。
-scanpci
scanpci
モジュールをロードして実行することを指示しま す。これにより、PCI バスのスキャンが行われます。
-logverbose
[n]ログファイルの表示の詳しさを指定します。デフォルト値は 3 です。 The default is 3.
3.3.x から変更があった X サーバのコマンド行オプションは以下の通りです:
-verbose
[n]標準エラー出力に出力するメッセージの詳しさを指定します。この オプションを複数回指定すると、メッセージをより詳しくできます し(3.3.x と同じ)、詳しさを数値で明示的に指定することもできます。 デフォルトの詳しさのレベルは 1 です。
-xf86config
filenameこのオプションは拡張され、root でないユーザでも設定ファイル名 を選択指定できるようになりました。この場合は、設定ファイルの 検索パスはファイルを特定するために使います。これにより、ユーザ はシステム管理者が用意した複数の設定ファイルの中からひとつを 選べるようになります。
XFree86 のアクセラレーションアーキテクチャ (XAA, XFree86 Acceleration Architecture) は完全に最初から書き直しました。ほとんどのドライバは XAA モジュールを使っ てアクセラレーションを実装しています。
今回のリリースではいくつかのマルチヘッド設定に対応しています。主に 複数の PCI/AGP カードを使う設定です。ただし、この辺りはまだ開発中です。 将来のリリースではうまく動作するものも増えると思います。うまく動作する ことが分かっているのは、ほとんどが Matrox の(対応)カードを複数枚使う場 合です。
大きな問題点のひとつは、マシンの起動時に初期化されなかったカードを ドライバがうまく初期化できないことです。この問題はほとんどの ドライバが使っている INT10 対応(セカンダリのカードを「ソフトブート」で きるようになります)でいくらかましになりましたが、解決しなければならな い問題がまだ他に残っている場合もあります。カードの組合せによっては、 プライマリのドライバを入れ換える(PCI のスロットを変えるか、システムの BIOS でプライマリカードの指定を変更する)ことによって状況がよくなること もあります。
Xinerama は複数の物理的な画面をひとつの画面のように動作させるための X サーバの機能拡張です。X11 の従来のマルチヘッド機能では、ウィンドウは 物理的な画面間をまたぐことや画面間を移動することはできませんでした。 Xinerama はこの制限を取り払います。しかし Xinerama は物理的な画面の ルートウィンドウの深さが全て同じであることを要求します。したがって、例 えば 8 ビットの画面を 16 ビットの画面と組み合わせて Xinerama モードで 使うことはできません。
Xinerama はデフォルトでは有効になっていません。X サーバのコマンド行
オプション +xinerama
で有効にできます。
Xinerama は X11R6.4 に含まれていました。今回の XFree86 のリリースに含 まれているバージョンは、性能と正しさを向上するために完全に書き直したも のです。
既知の問題:
XVideo 機能拡張が今回のリリースに含まれていますが、説明を書いてくれる 人がいませんでした。
DGA 2.0 はほぼ完成していますが、まだ全てのドライバに実装されているわけ ではありません。クライアントライブラリのために前もって用意されている 文書が xc/programs/Xserver/hw/xfree86/DGA にあります。バージョン 1.0 への後方互換性もある程度確保されています。 この情報は古くなっています。
VESA(R) ディスプレイデータチャネル(DDC[tm], Display Data Channel) 標準を使うとモニタからビデオカードへモニタ自身に関する情報(特に 対応しているスクリーン解像度やリフレッシュレート)を送らせることができ ます。
ほとんどのビデオドライバで一部または完全な DDC 対応が利用できます。
DDC はデフォルトで有効になりますが、"Device" セクションで無効にできま
す(Option "NoDDC"
とします)。XFree86 は DDC のバージョン 1 と
バージョン 2 に対応しています。
Option "NoDDC1"
, Option "NoDDC2"
とすれば両者を別々
に無効にすることもできます。
X サーバはディスプレイから取り出した DDC 情報を起動時に出力しますが、
この情報はまだモード行を決めるためには使われていません。一部のドライバ
では、X サーバに設定ファイルを生成させる時に新しい -configure
オプションを使うと DDC 情報を使います。
DDC を受けて起こる動作は変更されました。いくつかのドライバは DDC
情報を使って画面の大きさとピッチを設定します。この動作は、
X サーバのコマンド行オプション -dpi 75
を使って DDC を使わな
い場合のデフォルト値である 75 に明示的に再設定するか、または設定
ファイルの "Monitor" セクションの "DisplaySize" キーワードを使って
画面のディメンジョンを適切に指定することによって上書き設定できます。
Precision Insight は Red Hat, SGI, 3Dfx, Intel, ATI, Matrox から資金提供と技術支援を受け、X11 のウィンドウ内で 3D レンダリングを行 うための機能拡張である GLX の統合を行ってきました。コアとなる 3D レンダリングコンポーネントは Mesa ライブラリでした。 SGI は GLX 機能拡張の枠組をオープンなライセンスの下で公開しました。 この機能拡張は本質的に 3D ライブラリと X ウィンドウシステムを結びつけ るものです。Precision Insight はこれらのコンポーネントを XFree86 の X サーバに組み込み、Direct Rendering Infrastructure (DRI) を追加しました。Direct Rendering は 3D データを直接グラフィックス ハードウェアに送るための高度に最適化された経路を提供します。今回の リリースでは 3Dfx Banshee と Voodoo3 グラフィックスカードを ダイレクトレンダリングに対応させるための完全な実装が用意されています。 追加のダイレクトレンダリング用ドライバは 2000 の前半のうちには 3Dfx, Intel, ATI, Matrox のボードでも使えるようになるでしょう。DRI 互換のドライバについての最新情報は SourceForge の DRI Project にあります。
XvQueryPortAttributes 関数が追加され、また XvImages もサポートされるよ うになりました。XvImages は別の色空間(YUV など)を使う XImages であり、 共有メモリセグメント経由で X サーバに渡すことができます。これにより クライアントはハードウェアによる質の高いスケーリングやフィルタリングを 使いながら YUV データを表示できます。XvImages は現時点では Matrox G200/G400 カードでしか使えません。
XFree86-Misc 機能拡張は新しいサーバアーキテクチャにはまだ完全には移植 できていません。将来のリリースでは移植は完了するはずです。
XFree86-VidModeExtension は更新されており、新しいサーバアークテクチャ
への移植はほぼできています。モードの検査周りでは必要な作業がまだ残って
いるので、この機能拡張を使うときには注意が必要です。この機能拡張は
実行時にガンマ値の設定を変える機能や、利用可能なモードに変える機能に
対応しています。新しい xgamma
ユーティリティはこの機能を使え
るようにします。バージョン 3.3.x の機能拡張との互換性も保持されていま
す。この機能拡張の足りない部分や新しい機能は、将来のリリースでは
できるようになるはずです。
XFree86 4.0 には以下のドライバが含まれています:
ドライバ名 | 説明 |
apm | Alliance Pro Motion |
ati | ATI |
chips | Chips & Technologies |
cirrus | Cirrus Logic |
cyrix (*) | Cyrix MediaGX |
fbdev | Linux fbdev |
glide | Glide2x (3Dfx) |
glint | 3Dlabs, TI |
i740 | Intel i740 |
i810 | Intel i810 |
mga | Matrox |
neomagic | NeoMagic |
nv | NVIDIA |
r128 | ATI Rage 128 |
rendition | Rendition |
s3virge | S3 ViRGE |
sis | SiS |
tdfx | 3Dfx |
tga | DEC TGA |
trident | Trident |
tseng | Tseng Labs |
vga | Generic VGA |
(*) が付いたドライバは、先行的な形で今回のリリースに入っていますが、 まだ完成していなかったり、安定していなかったりします。
これは Alliance AT3D/AT25/AT24 チップ用のドライバです。 8, 15, 16, 24, 32 ビット(32 ビットはチップの制限で 24bpp 扱い)で アクセラレーション機能に比較的うまく対応しています。AP6422 チップへの 先行的な対応も行っていますが、割とバグも多いです。このチップはまだ 3.3.x サーバでサポートされていません。Xv ドライバはほとんど OK です。 glide2x 用の Rush 機能拡張は動作し、結果のオーバーレイを含む追加機能も いくつかあります。DGA と DGA2 のテストも OK でした。 詳しい情報は README.apm にあります。
C&T についての情報は README.chips にあります。
s3virge ドライバは 3.3.x の SVGA S3 ViRGE ドライバを移植したものです。 したがって、このドライバの機能と安定度は XFree86 の前のリリースと同じ はずです。XFree86 4.0 共通の改良により、先行的に使える利点がいくつか 追加されています。
s3virge
のオンラインマニュアルにはオプションの一覧と
今回のリリースのドライバの設定に関するメモが載っています。まだ実装されていないかテストが不十分な機能のうち主だったものは以下の通 りです:
詳しい情報は README.s3virge にあります。
今回のリリースで TGA ドライバはアクセラレーションが使えるようになり、8 プレーンと 24 プレーンのフレームバッファに対応しました。これは Linux/Alpha で動作することが分かっています。詳しい情報については README.DECtga ファイルを見てくださ い。
MGA ドライバは XFree86 3.3.4 と同じ範囲のハードウェアに対応しています が、マルチヘッド対応や(落ちたりしない)オーバーレイ対応(8 ビット + 24 ビット)等の改良がたくさん行われています。
サーバを 32 bpp で起動した時(-fbbpp 32
)に
"overlay"
オプションを指定していると 8+24 モードが有効になり
ます。現在の実装は不要な exposure イベントを捨てる最適化がまだできてい
ないので、将来のリリースではこのオプションの性能はもっと向上するでしょ
う。デフォルトでは、オーバーレイを表すカラーキーは 255 ですが、個々の
問題を回避するためにこの値を "ColorKey"
オプションを使って変
えられます。キーに指定できる値は 2-255 です。
このリリースでは G400 と特に G400 MAX の性能を向上させています。また G200/G400 チップでの XvImage 対応とメモリ量の自動検出機能の改善も行わ れています。
詳しい情報はオンラインマニュアルの mga
に載っています。
ATI ドライバに関する情報は README.ati に載っ ています。現在のバージョンではアクセラレーションは効きません。 アクセラレーションへの対応は将来のリリースで計画しています。
"nv" ドライバは全ての Riva TNT アクセラレータと GeForce, Quadro アクセラレータに対応しています。DGA 2.0 にも対応しています。
詳しい情報は nv のオンラインマニュアルにあります。
このドライバは Voodoo1, Voodoo2 ボード用です。このドライバは 3DFX の Glide API (これは Linux 同様に入手できます)上で X を動かします。 このドライバを動かすためには Glide 2.x をインストールしている必要があ ります。このドライバはハードウェアアクセラレーションはまったく使いませ ん(これらのボードには 2D アクセラレーション機能がないため)がかなり高速 です。というのも、CPU はローカルの RAM に対してレンダリングし、 それからブロックごとボードにコピーするからです。残念ながら、Voodoo 1/2 ボードの解像度は割と限られています。Voodoo1 は 800x600, Voodoo 2 は 1024x768 までしか出せません。しかし、それでも Xinerama や マルチヘッドモードの 2 つめのヘッドとしてはある程度使えるでしょう。
16 bpp と 24 bpp モードに対応しています(24 ビットは 32 ビットの疎な packed モードです)。
このドライバについてのもっと詳しい情報は XFree86 の 'glide' の オンラインマニュアルに載っています。オンラインマニュアルを読む前に このドライバを動かすのはやめた方がいいでしょう。
Voodoo Banshee と Voodoo3 移行のボードでは、tdfx ドライバを使ってくだ さい。このドライバは直接ハードウェアとやりとりするので、ずっと高速です。
"glint" ドライバは 3Dlabs/Texas Instruments GLINT/Permedia チップに対 応しています。8, 15, 16, 24 ビットの深さでは(一部のチップには深さの制 限があります)対応はかなりよくできています(3.3.x よりもよい)。 8+24 のオーバーレイにも対応しています。ボードによっては Xv 機能拡張に も対応しています。
このドライバについての詳しい情報は 'glint' ドライバの オンラインマニュアルに載っています。