クロック設定用外部プログラムの使用と開発に関する情報 The XFree86 Project, Inc. 16 December 1994 The X Japanese Documentation Project 13 January 1999 ____________________________________________________________ 目次 1. クロック設定用外部プログラムの使用 2. クロック設定用外部プログラムの開発 3. 日本語訳について ______________________________________________________________________ 1. クロック設定用外部プログラムの使用 XFree86 には、グラフィックスカードのクロック周波数の設定を外部プログラ ムから行うための機能があります。これにより、標準ドライバがサポートして いない方法でクロック選択を行うカードを扱えるようになります。 この機能を有効にするには、XF86Config ファイルの Device セクションに ClockProg という行を追加します。この行のフォーマットは以下のようになっ ています: ClockProg "commandpath" ここで commandpath はクロック設定プログラムのフルパス名です。 command- path に引き数を付けることはできません。 このオプションが使われ、かつ Clocks 行を指定されていない時には、カード のクロックは完全にプログラマブルである(例: SS24)ものと想定されます。し かし、カードで選べるクロックが予め決まっている場合には、 XF86Config ファイルの Device セクションに Clocks 行が必要であり、これを使って利用 可能なクロック周波数をサーバに教えてやらなければなりません。Clocks 行 におけるクロックの順序は、カードやプログラムが想定している順序と一致し ていなければなりません。クロック値は 128 個まで指定することができま す。 サーバが外部プログラムを呼び出すのは、クロック周波数を変更する必要があ るときです。変更する必要が生じるのは、サーバの起動時とホットキーシーケ ンスによってモードが切替えられたときです。外部コマンドには2つのコマン ドライン引き数が渡されます。最初の引き数はクロック周波数です(MHz を単 位とする浮動小数で、現在はほぼ 0.1MHz 単位で指定できます)。2番目の引き 数は Clocks リストにおけるクロック値のインデックス番号です(最初のク ロック値のインデックス番号は 0 になります)。選べるクロック値の組合せが 決まっているカードではインデックス番号を使うことになるでしょうし、ク ロックが完全にプログラマブルなカードでは周波数を引き数にすることになる でしょう。 2. クロック設定用外部プログラムの開発 このような外部プログラムを使っている間には、サーバはクロック選択に関係 するレジスタは一切変更しません。また、外部プログラムではクロック選択 フィールド以外は変更しないよう注意しなければなりません。外部プログラム は、標準入力と標準出力を 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 さ ん が提案したものです。 $XFree86: xc/programs/Xserver/hw/xfree86/doc/Japanese/README.clkprog,v 1.1.2.2 1999/11/26 15:23:18 hohndel Exp $ $XConsortium: clkprog.sgml /main/3 1996/02/21 17:46:48 kaleb $ 3. 日本語訳について 日本語訳は X Japanese Documentation Project が行いました (翻訳: 藤原輝 嘉 , 校正: 金田浩 司 )。 問題点の指摘やご意見は藤原まで御連絡ください。原文の著作権は XFree86 プロジェクト社にあり、日本語訳の著作権は X Japanese Documentation Project にあります。