  クロック設定用外部プログラムの使用と開発に関する情報
  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 さ
  ん <pfk@rz.uni-jena.de> が提案したものです。

  $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 が行いました (翻訳: 藤原輝
  嘉 <fujiwara@linux.or.jp> <mailto:fujiwara@linux.or.jp>, 校正: 金田浩
  司  <vanitas@ma3.seikyou.ne.jp> <mailto:vanitas@ma3.seikyou.ne.jp>)。
  問題点の指摘やご意見は藤原まで御連絡ください。原文の著作権は XFree86
  プロジェクト社にあり、日本語訳の著作権は X Japanese Documentation
  Project にあります。

