概要
現時点での FreeBSD と XFree86 との関係を概説します.
概要
現時点での FreeBSD と XFree86 との関係を概説します.
対象は次のようなものです.
目次
FreeBSD と XFree86 および X.Org との関係は,X on PC-98 にまとめました. そこに書くと散漫になるような話題のために,このページを作りました.
XFree86 と X.Org の分裂以来,FreeBSD はどちらが「標準」かは別として,どちらでも選べる環境を提供していました. XFree86 は「標準」でなくなった後も,4.5.0 までは ports から導入することができました. (逆に言うと,4.5.0 までで update は打ち切られました.)
そしてついに,X.Org 7 系の採用を契機に,XFree86 は ports からはずされました. (うちでは FreeBSD 6.2 から 7.2 の間は導入していないので正確にいつからとは言えませんが,この二つの version の間です.)
では,ports を使わなければ XFree86 を導入,利用できるかということですが,以下のような状態です.
この場合に注目しなければならないのは,動作するか否かだけでなくそもそも make World ができるか否かです. XFree86 3.3.6 および XFree86 4.8.0 に対するそれらの状況を,種々の version の FreeBSD に対して次表に示します. この表の「動作」は PC-98 + MGA だけの結果です.
FreeBSD | XFree86 3.3.6 | XFree86 4.8.0 | |||
---|---|---|---|---|---|
version | gcc | make | 動作 | make | 動作 |
4.11 | 2.95.4 | 〇 | 〇 | 〇 | △ |
5.3 | 3.4.2 | △ | △ | 〇 | △ |
6.2 | 3.4.6 | △ | △ | 〇 | △ |
7.2 | 4.2.1 | △ | △ | × | ― |
8.0 | 4.2.1 | △ | ? | × | ― |
表中の make の欄の記号の意味は次の通り.
〇 : ソースの修正なしに make することができる.
△ : エラーに対処してソース修正すれば make することができる.
× : make できない.[1]
また,動作の欄の記号の意味は次の通り.
〇 : 問題なく動作する.
△ : 動作に問題がある.
× : 動作しない.
? : 確認作業をしていない.
― : make できないため確認できない.
表中に△で示した「動作の問題」は,具体的には次のようなものです.
(1) XFree86 3.3.6
Bus Mouse はキーボードからの入力ができないか,またはマウスを動かすまで反映されません.
USB Mouse はそれに加えてマウスのイベントが余計に発生し,意図した操作ができません.
[2]
(実用性という観点からは×を付けても良い状態です.)
なお,これは PC-98 特有の問題であり,少なくとも AT 互換機 + MGA では生じませんでした.
(2) XFree86 4.8.0
X Server が起動しません.
本来は×ですが,暫定対策を施して△にしました.
詳細は 2.2 節を参照して下さい.
make において独自の修正が必要であったり,make に失敗したりする理由は,
などです. XFree86 4 系は現在も FreeBSD 用に binary が供給されています. ただし,FreeBSD 7 系のためのものは FreeBSD 7.0 にて make したものです. このままだと供給は続けられなくなるかもしれません.
次にグラフィックカードごとの動作について概観します. (確認は FreeBSD(98) 4.11 にて行なっています.)
上記のような確認作業を行なって実感したのは,OS の update に追従して X もメンテを続けないと,動作云々以前に compile すらできなくなってしまうのだなあということです.
素直に OS 標準の X を使うのが楽でかつ確実でしょう.
(逆に「この X を使いたい」という要求があるなら,それに見合った version の OS を選べば良いのです.[3])
2003 年に XFree86 と X.Org とが分裂した時点では帰趨が分からなかったし,PC-98 にとっては XFree86 の方がきちんと対応してくれたので 4.8.0 まで動作の確認を続けてきたのですが,そろそろ潮時のようです.
[1] 原理的には修正を続ければ make できるはず,すなわち「△」になるはずですが,現実には極めて困難です.
[2] XF86Config にてマウスを効かないようにすれば,キーボードは正常に動作します. 一見容易に解決できそうですが,意外と奥が深いです. そもそも原因が分かりませんし. PCI のグラフィックボードならば,X.Org 7 系を修正した方がいろいろな意味で楽かもしれません.
[3] 当然ですが,古い OS や X を使いたい場合には,導入する前に security がどうなっているかを調べましょう.
XFree86 4.7.0 までは,グラフィックボードが MGA のみである PC-9821 Rv20 では X Server の起動と終了を繰り返すことができました. ところが,「抜いてはいけない」グラフィックボードである Trident を持つ PC-9821 Ra20 に MGA を挿してこれを使うと,OS を起動してから X Server の起動,終了,起動とすると,二回目の起動は途中で止まりました.[1][2] (Trident の方は MGA を挿した状態においても,起動と終了を繰り返すことができます.)
症状としては,起動しても console から X の画面に切り換わらずにそこで固まります. XFree86 Server が CPU のほぼ 100% を占めます. log の最後は
(--) MGA(0): MMIO registers at 0x20414000
です. 正常に動作する場合には,さらに次のように続くはすです.
(WW) MGA(0): Video BIOS info block not detected! ← PC-98 なので,これで正しい.
(==) MGA(0): Write-combining range (0x20004000,0x4000) was already clear
この症状は XFree86 が 4 系になってから PC-98 + MGA に対して生じたり直ったりしてきたものです.[3]
[1] OS は生きているので,電源 OFF 以外の方策はあります.
[Ctrl] + [Graph] + [DEL] で reboot するとか,LAN 経由で ssh で入って対処するとか.
[2] この「PC-9821 Ra20 おける X Server の二回目の起動の問題」は X.Org 6 系でも同様に生じます.
一方 X.Org 7.4 ではこの問題は解決されています.
Video BIOS の検出は driver の側にてより安定した形で実現されています.
(mga_bios.c)
ソースを参考にするなら,ports で言うと以下のところです.
/usr/ports/x11-drivers/xf86-video-mga/
/usr/ports/x11-servers/xorg-server/ ← 参考までに,server はこちら.
[3] 私がではないのですが,意識的に直してくれた方もいらしたし,AT 互換機のための改変によりついでに直ったこともありました.
XFree86 4.8.0 においては,Rv20, Ra20 の別なく一回目の起動から上記の症状が出て X Server が動作しません.
これは driver (/usr/X11R6/lib/modules/drivers/mga_drv.o) の問題ではありません.[1]
すなわち,
この問題には,OS を起動したら先ず XFree86 4.7.0 や X.Org 6.9.0 の X Server を立ち上げてそれを終了させ,次いで XFree86 4.8.0 の X Server を立ち上げるようにすれば対処できます. (それができる環境ならば,XFree86 4.7.0 や X.Org 6.9.0 を使えば良いのですが.)
[1] 問題が生じる箇所は X Server の PCI がらみの部分です. ソースで言えばここです.
xc/programs/Xserver/hw/xfree86/os-support/bus/Pci.c の xf86ReadPciBIOS()
しかし,この問題が生じる原因までは追求できませんでした.
参考までに補足致します. XFree86 4.7.0 までは,(そして X.Org 7.4 でも)
(!!) More than one possible primary device found (--) PCI: (0:7:0) NEC Corporation PCI to PC9800 Core-Graph Bridge rev 2 (--) PCI: (0:14:0) Matrox Graphics, Inc. MGA 2064W [Millennium] rev 1, Mem @ 0x20004000/14, 0x23000000/23
のように PCI を認識できていたのが,XFree86 4.8.0 では上記の修正の有無に関係なく,2 行目が次のようになります.
(--) PCI: (0:7:0) unknown vendor (0x1033) unknown chipset (0x0009) rev 2
mga が動作しないことと原因が同じとは限りませんが,XFree86 の側も FreeBSD から遠ざかっているという印象です.