このような外部プログラムを使っている間には、サーバはクロック選択に関係 するレジスタは一切変更しません。また、外部プログラムではクロック選択 フィールド以外は変更しないよう注意しなければなりません。外部プログラム は、標準入力と標準出力を xf86Info.consoleFd にセットして実行されます。 xf86Info.consoleFd はファイルデスクリプタであり、表示関係の ioctl() 操 作のために必要に応じて使われます。標準エラー出力はサーバの標準エラー出 力と同じになります。つまり、エラーメッセージや警告メッセージはこちらに 送られます。外部プログラムは実際に使うユーザの ID で実行されるので、特 権を必要とするシステムコールを使う場合には、外部プログラムは root に SUID しておかなければなりません。外部プログラムは I/O アクセスの特権を サーバから受け継がないので、必要なアクセス権限は自分で使えるようにしな ければならないでしょう。
外部プログラムは、正常終了すると終了ステータス 0 を返し、異常終了する と 1-254 の範囲のステータスを返すことが期待されます。サーバの初期化時 に外部プログラムが異常終了すると、サーバも終了します。モード切替えのと きに外部プログラムが異常終了すると、モード切替えが失敗し(サーバはクロッ ク周波数が変更されなかったとみなします)、サーバは実行を続けます。将来 的には、必要に応じて終了ステータスを変更できるようになるでしょう。これ により、外部プログラムがモード切替えに失敗してもサーバが終了できるよう になります。
クロック切替えプログラムの例としては、ET4000 カード(8組の決まったクロッ
ク値を使用します)で使うプログラムがあります。このプログラムは例題とし
て用意されたものであり、汎用的に使うことは考えられていません(ET4000 カー
ドはサーバの内部コードで 扱います)。このプログラムはソースツリーの
xc/programs/Xserver/hw/xfree86/etc/et4000clock.c
とバイナリツ
リーの /usr/X11R6/lib/X11/etc/et4000clock.c
にあります。
クロック設定に外部プログラムを使うというアイディアは、 Frank Klemm さん <pfk@rz.uni-jena.de> が提案したもので す。
$XFree86: xc/programs/Xserver/hw/xfree86/doc/Japanese/sgml/clkprog.sgml,v 1.1.2.2 1999/11/26 15:23:57 hohndel Exp $ $XConsortium: clkprog.sgml /main/3 1996/02/21 17:46:48 kaleb $