XDM(1) — NEWS-OS Programmer’s Manual
名称
xdm − X のディスプレイマネージャ
形式
xdm [−config configuration_file] [−daemon] [−debug debug_level] [−error error_log_file] [−nodaemon] [−resources resource_file] [−server server_entry] [−session session_program] [−xrm resource_specification]
解説
xdm は、X ディスプレイの(ローカル、あるいはリモートな)コレクションを 管理します。 X 端末の出現により、X コンソーシアムの標準である XDMCP (X Display Manager Control Protocol) の発展と共に、 このシステムのいくつかの部分の設計を行うことができました。 これは、init、getty および文字端末上のログインにより提供されるのと同様の サービス、すなわち、ログイン / パスワードのプロンプト、ユーザの妥当性検査、 および “ セッション ” の実行を提供するように設計されています。
“ セッション ” は、特定のプロセスの寿命に依存します。 すなわち従来の文字ベースの端末の世界では、それはユーザのログインシェルの プロセスです。 xdm のコンテキストでは、それは任意のセッションマネージャです。 なぜならば、これはウィンドウ環境にあるので、ユーザのログインシェルの プロセスは、必ずしも接続すべき端末のようなインターフェースをもつとは 限らないからです。
リアルセッションマネージャが広く利用できるようになるまでは、代表的な xdm の代用品は、終了オプションをもつウィンドウマネージャであるか、シェルを 実行している端末エミュレータ(端末エミュレータの寿命は、それが 動作しているシェルプロセスの寿命です)のいずれかです。 したがって、 X セッションを退化させると、文字ベースの端末セッションと 似たようなものとなります。
セッションが終了すると、 xdm は X サーバをリセットし、(任意に)全プロセスを再開します。
xdm はユーザが認識する最初のインターフェースを提供するので、それは、簡単に 使用でき、特定の現場のニーズに容易にカスタマイズできるように設計されて います。 xdm は、多くのオプションをもっています。 そのほとんどは正当なデフォルトをもっています。 様々なセクション全体を走査して、変更したものを選び出します。 特に Xsession のセクションに注意を払ってください。 このセクションは、望むセッションのスタイルのセットアップ方法を 記述しています。
オプション
最初に、これらのオプションのすべて(−config を除く)は、 構成ファイルでもリソースとして指定することのできる値を指定することに 注意してください。
−config configuration_file
残りの構成パラメータを指定するリソースファイルを指定します。 ファイルが指定されなくて、ファイル /etc/xdm/xdm-config が 存在する場合は、 xdm はこのファイルを使用します。
−daemon
DisplayManager.daemonMode リソースの値として “ 真 ” を指定します。 これにより xdm は、すべてのファイル記述子をクローズし、制御端末との対応を解除し、 自身を最初に起動したときのバックグラウンドに置きます(ちょうど他の デーモンのホストのように)。 これは、デフォルトの動作です。
−debug debug_level
DisplayManager.debugLevel リソースの数値を指定します。 0 でない値を指定すると、 xdm は、大量のデバッグ文を端末へ表示します。 また、 DisplayManager.daemonMode リソースを不可能にして、 xdm を同期的に実行させます。 これらのデバッグ文を解釈するには、ソースコードのコピーが必要です。 出力の一般的な説明は省略します。
-error error_log_file
DisplayManager.errorLogFile リソースの値を指定します。 このファイルは、セッションの進行中に実行された様々なスクリプトと プログラムにより stderr に書き込まれた何かと、 xdm からのエラーを含みます。
−nodaemon
DisplayManager.daemonMode リソースの値を “ 偽 ” として指定します。
−resources resource_file
DisplayManager∗resources リソースの値を指定します。 このファイルは、 xrdb(1) を使用してロードされ、認証ウィジェットに 対する構成パラメータを指定します。
−server server_entry
DisplayManager.servers リソースの値を指定します。 このリソースについて詳細に記述している以下の項を参照してください。
−udpPort port_number
DisplayManager.requestPort リソースの値を指定します。 この値は、XDM が XDMCP リクエストをモニターするポート番号を設定します。 XDMCP は、よく知られている udp ポート 177 を使うので、 デバックの時以外は変える必要はありません。
−session session_program
DisplayManager∗session リソースの値を指定します。 これは、ユーザがセッションとしてログインしたとき、実行するプログラム名です。
−xrm resource_specification
これにより、ちょうど、ほとんどのツールキットアプリケーションのように、 任意のリソースを指定することができます。
リソース
多くの段階で、 xdm の動作は、見慣れた X のリソースフォーマットにある コンフィギュレーションファイルを使用する ことにより制御することができます。 フォーマットの記述に関しては、 Jim Fulton のリソースファイルについての 論文を参照してください (/doc/X11/tutorials/resources.txt)。 すべてのディスプレイ上の xdm の動作を修正するリソースもあれば、単一のディスプレイ上の xdm の動作を修正するリソースもあります。 動作が特定のディスプレイに関係するところでは、ディスプレイ名は、 “DisplayManager” と最後のリソース名セグメントの間のリソース名に 挿入されます。 たとえば、 DisplayManager_expo.0.startup は、 “expo:0” ディスプレイ上の開始シェルファイルを定義するリソースの名前です。 なぜなら、 xdm は、リソース名を生成するときは ドットやコロンの代わりにアンダースコアを使用しますが、 リソースマネージャは、リソース名とその値を区別するために コロンを使用し、リソース名のパートとの区別にドットを使用するからです。
DisplayManager.servers
このリソースは、複数のサーバーエントリのファイル名 ( 1 ラインに 1 つ スラッシュで始まります ) を記述することができます。 各エントリは、XDMCP は使わず、いつも処理するディスプレイを指定します。 各エントリは少なくとも 3 つの部分から成ります。 ディスプレイ名、ディスプレイのクラス、ディスプレイの型、 また、ローカルサーバをスタートするためのコマンドです。 ローカルディスプレイ番号 0 のための通常のエントリは次のとおりです。
:0 Digital-QV local /usr/bin/X11/X :0
ディスプレイの型は次のとおりです。
local ローカルディスプレイ ( サーバプログラムを走らせるディスプレイ )
foreign リモートディスプレイ ( サーバプログラムを走らせないディスプレイ )
ディスプレイ名は、 −display オプションで、 任意の X プログラムに渡すことのできる何かでなければなりません。 この文字列は、特定のディスプレイを指定するためにディスプレイ固有の リソースで使用されるので、名前が一致するか注意してください(たとえば、 他のリソースが "DisplayManager._0.session" として指定されている場合は、 "localhost:0 local/usr/bin/X11/X :0" ではなく ":0 local /usr/bin/X11/X :0" を使用してください)。 ディスプレイのクラスの部分は、リソースのクラスの部分で、 特殊なディスプレイリソースを含む場合に使われます。 これは、X 端末のようなディスプレイの大きなコレクションを使う場合に、 このグループを設定するのに使うことができます。 XDMCP を使用するときは、ディスプレイのクラスを指定しなければなりません。 お持ちの X 端末のマニュアルに、 標準ディスプレイクラスが記述されています。
DisplayManager.requestPort
xdm が XDMCP リクエストの入力に使う UDP ポート番号を指定します。 システムのデバックを行わない場合は、177 ( デフォルト ) にしてください。
DisplayManager.errorLogFile
エラー出力は、通常システムのコンソールへ送られます。 それを転送するためには、単にこのリソースを任意のファイル名へ設定します。 これらのメッセージを syslog へ送る方法は、それをサポートするシステム用に 開発しなければなりません。 しかし、様々な "標準" のインターフェースは、任意のシステムに依存しない インプリメンテーションを除外します。 このファイルは、 Xstartup、Xsession および Xreset により stderr へ 送られた任意の出力も含むので、同様にそれらのスクリプト中の問題の記述も 含みます。
DisplayManager.debugLevel
この整数のリソースに対し指定された 0 でない値により、多量のデバッグ情報を 表示することができます。 また、これは、その情報を bit-bucket に転送するデーモンモードを 無効にします。 0 でない値を指定すると、ルート以外のユーザが、正常に動作しない xdm をデバックすることができます。
DisplayManager.daemonMode
普通、 xdm は連動していないデーモンに自分自身を作ろうとします。 これは、フォークして、カレントプロセスを終了します。 それから、ファイルディスクリプタをクローズし、ターミネート信号を送ります。 xdm をデバックするのに、非常に厄介になります。 このリソースを "false" に設定すると、デバックができなくなります。
DisplayManager.pidFile
指定されたファイル名は、メインの xdm プロセスのプロセス ID の ASCII 表現を含むために作成されます。 これは、システムを再初期化するのにとても役に立ちます。 xdm は、同じマシン上で2つのデーモンが走らないようにロックするファイルも使います。
DisplayManager.lockPidFile
これは、多数の xdm を走らせるとき、暴走から守るために、 xdm がロックファイルを使うかどうか、コントロールするリソースです。 SYSV 上では、"lock" ライブラリを使い、BSD 上では、"flock" を使います。 デフォルトは、"true" です。
DisplayManager.remoteAuthDir
これは、 xdm が、XDMCP を使ったディスプレイのために、 オーソリゼーションファイルが作るテンポラリのディレクトリを指定できます。 デフォルトディレクトリは、/etc/xdm です。
DisplayManager.autoRescan
これは、セッションが終了したときや コンフィグレーションファイル、サーバファイルが書き換えられたときに、 xdm がこれらのファイルを読み直すかどうか決めるものです。 デフォルトは、"true" です。 xdm は、メインプロセスに "SIGHUP" を送り、これらのファイルを再読み込みします。
DisplayManager.removeDomainname
XDMCP クライアントのディスプレイ名を決めるとき、 端末のための最適なホスト名が作られます。 この変数が設定されたとき、ローカルホストのドメイン名と同じ場合、 xdm は、ホスト名のドメイン名の部分を取り除きます。 デフォルトは、"true" です。
DisplayManager.keyFile
XDM-AUTHENTICATION-1 スタイルの XDMCP オーソリゼーションは、 xdm と端末の間に、独自のキーの割り付けを要求します。 このリソースは、ディスプレイ名とキー割り付けのエントリを記述した ファイルを指定します。 XDM-AUTHENTICATION-1 スタイルは、あまり一般的ではない DES を要求するので、 xdm はデフォルトで、サポートしていません。
DisplayManager.DISPLAY.resources
このリソースは、 xrdb(1) によりリソースデータベースとして、 ディスプレイのスクリーン 0 のルートウィンドウへロードされるファイル名を 指定します。 このリソースデータベースは、ちょうど認証プロシージャが始まる前に ロードされるので、 "ログイン" ウィンドウの外観を制御することができます。 このファイル内に置くのに適切な様々なリソースを記述している、後述の認証 ウィジェットの節を参照してください。 このリソースに対するデフォルト値はありませんが、 従来の名前は Xresources です。
DisplayManager.DISPLAY.xrdb
リソースをロードするために使用するプログラムを指定します。 デフォルトにより、 xdm は /usr/bin/X11/xrdb を使用します。
DisplayManager.DISPLAY.cpp
これは、xrdb によって使われる C 言語プリプロセッサの名前を指定します。
DisplayManager.DISPLAY.startup
これは、認証プロセスが成功した後(ルートとして)実行されるプログラムを 指定します。 デフォルトにより、プログラムは何も実行されません。 ここで使用するファイルの従来の名前は Xstartup です。 後述の Xstartup の節を参照してください。
DisplayManager.DISPLAY.session
これは、実行する(ルートとしては実行されない)セッションを指定します。 デフォルトにより、 /usr/bin/X11/xterm が実行されます。 従来の名前は Xsession です。 後述の Xsession の節を参照してください。
DisplayManager.DISPLAY.reset
これは、セッションが終了した後に(ルートとして)実行されるプログラムを 指定します。 デフォルトにより、プログラムは何も実行されません。 従来の名前は Xreset です。 詳細については後述の Xreset の節を参照してください。
DisplayManager.DISPLAY.openDelay
DisplayManager.DISPLAY.openRepeat
DisplayManager.DISPLAY.openTimeout
DisplayManager.DISPLAY.startAttempts
これらの数値リソースは、妥協的でないサーバをオープンしようとするときに xdm の動作を制御します。 openDelay は、連続する試み間の(秒単位の)休止の長さです。 openRepeat は、行われる試みの数です。 openTimeout は、実際にオープンしようとしている間に待つ時間( すなわち、 connect(2) syscall で費やす最大の時間)です。 startAttempts は、サーバ上で拒否される以前に、 全体のプロセスが実行される回数です。 openRepeat の試みが行われた後で、またはある特定の試みで openTimeout 秒が経過した場合は、 xdm は、サーバを終了し、再開して、再び接続を試みます。 このプロセスは、ディスプレイが動作しなくなったところで、 startAttempts 回繰り返されます。 この動作は任意のように思われますが、経験に基づいて開発されたもので、 ほとんどのシステム上でとてもよく動作します。 デフォルト値は、 openDelay は 5 、 openRepeat も 5 、 openTimeout は 30、startAttempts は 4 です。
DisplayManager.DISPLAY.pingInterval
DisplayManager.DISPLAY.pingTimeout
リモートディスプレイが終了したときを発見するために、 xdm は、ときどき X コネクションを使用して、XSync リクエストを送り、"pings" します。 pingInterval は、ping の間の時間 (分) を指定します。 また pingTimeout は、端末がリクエストの応答に待つ 最大の時間 (分) を指定します。 もし、端末の応答がなかったら、セッションは終了します。 デフォルトは、どちらも 5 分です。 xdm は、ローカルディスプレイには ping しません。 これは、無害なことに思えるが、 NFS サーバのためにハングアップして、ping の応答がなくて ワークステーションのセッションが、終了した場合、あまり好ましくありません。
DisplayManager.DISPLAY.terminateServer
このブール(論理)リソースは、セッションが終了したとき(セッションを リセットしないで)、X サーバも終了するか否かを指定します。 サーバは無制限に実行し続ける傾向があるので、 サーバを実行する時間を制限したい場合に、 このオプションを使用することができます。 ディスプレイ値は、 "FALSE" です。
DisplayManager.DISPLAY.userPath
xdm は、セッションに対する環境変数 PATH をこの値に設定します。 これは、コロンで区切られたリストのディレクトリでなければなりません。 詳細については sh(1) を参照してください。 デフォルト値は、 DefUserPath で、 X システムの構成ファイルに指定する ことができ、 ":/bin:/usr/bin:/usr/bin/X11:/usr/ucb" に設定されることが 多いです。
DisplayManager.DISPLAY.systemPath
xdm は、開始およびリセットスクリプトに対する環境変数 PATH をこのリソースの 値に設定します。 このリソースのデフォルトは、 DefaultSystemPath で、システム構成ファイル に指定されますが、 "/etc:/bin:/usr/bin:/usr/bin/X11:/usr/ucb" である ことが多いです。 このエントリからの "." の欠落に注目してください。 ルートに対してこれをまねるのはとてもよいことです。 なぜならば、これは多くのよくあるトロイの木馬システムの侵透計画を 防止するからです。
DisplayManager.DISPLAY.systemShell
xdm は、開始およびリセットスクリプトに対する環境変数 SHELL をこのリソースの 値に設定します。デフォルトは、"/bin/sh" です。
DisplayManager.DISPLAY.failsafeClient
デフォルトのセッションの実行に失敗した場合は、 xdm は、このプログラムに戻ります。 このプログラムは、引数なしで実行されますが、 そのセッションがもったであろう環境変数と同じ変数を使用して実行します (後述の "Xsession" を参照)。 デフォルトにより、 /usr/bin/X11/xterm を使用します。
DisplayManager.DISPLAY.grabServer
DisplayManager.DISPLAY.grabTimeout
X プロトコルの明かなセキュリティ上の欠点を消去するために、 xdm は、名前/パスワードを読み込んでいる間はサーバとキーボードをグラブします。 この grabServer リソースは、サーバが名前/パスワードを読み込んでいる間、 ホールドするかどうかを記述します。 "FALSE" なら、サーバはキーボードのグラブの成功の後、グラブしません。 "TRUE" なら、サーバはセッションが起動してから、 名前/パスワードの読み込み終了までグラブします。 grabTimeout リソースは、 xdm がグラブに成功するのに待つ最大時間を表します。 いくつかのクライアントがサーバをグラブしている場合や、 ネットワーク階層が深い場合、グラブに失敗することがあります。 grabTimeout のデフォルトは、3 秒です。 ユーザは、ディスプレイ上の同じようなウィンドウに騙されることがあるので、 立ち上げるときは注意してください。 もしグラブが失敗したら、 xdm は、終了し、サーバとセッションを再起動します。
DisplayManager.DISPLAY.authorize
DisplayManager.DISPLAY.authName
authorize リソースは、 xdm がサーバコネクションのためにオーソリゼーションを作成して、 使用するかを設定するものです。 オーソリゼーションを使用する場合、authName に使用するタイプを記述します。 現在 xdm は、MIT-MAGIC-COOKIE-1 のみサポートしています。 XDM-AUTHORIZATION-1 もサポートされているが、DES は一般には配分できません。 XDMCP コネクションは、そのオーソリゼーションタイプが 非常によくサポートされているので、この場合 authName は無視されます。 authorize は、ディスプレイを設定するものだが、 この場合そのままでは利用できないので、 ユーザは、ログインウィジェットで別のメッセージディスプレイを持つことで、 情報が得られます。 デフォルトは、authorize は、"true"、 authName は、"MIT-MAGIC-COOKIE-1" です。
DisplayManager.DISPLAY.authFile
このファイルを、−auth サーバのコマンド行オプションとともに使用して、 オーソリゼーションデータを、xdm からサーバへ伝達します。 もし削除されると、オーソリゼーションのメカニズムが動作されなくなるので、 誰でも書き込み可能なディレクトリではないところにおいてください。
DisplayManager.DISPLAY.resetForAuth
サンプルサーバにおけるオーソリゼーションの本来の動作は、 サーバのリセットの間に、コネクションの初期化のチェックの代わりに、 オーソリゼーションファイルを読み直します。 xdm は、ディスプレイに接続する前に、オーソリゼーションの情報を作成するので、 古いサーバは、新しいオーソリゼーションの情報を得ることはできません。 このリソースは、ファイルに情報をセットしてから、 xdm が、サーバに "SIGHUP" 信号を送ります。 その結果、新しいオーソリゼーションの情報が読み込まれている間に、 接続されるサーバにリセットが起こります。
DisplayManager.DISPLAY.userAuthDir
xdm は、通常、ユーザのオーソリゼーションファイル ($HOME/.Xauthority) が 書き込みできない場合、このリソースのディレクトリに 独自のファイル名でオーソリゼーションファイルを作成して、 環境変数 XAUTHORITY にファイル名を示します。 デフォルトは、"/tmp" を使用します。
サーバの制御
xdm は、 POSIX 信号を使用してローカルサーバを制御します。 SIGHUP を使用して、サーバをリセットし、すべてのクライアントとの コネクションをクローズし、他のデューティーのクリーンアップを行います。 SIGTERM を使用して、サーバを終了します。 これらの信号が期待するように動作しない場合は、 xdm は正しく動きません。
XDMCP を使用しないでリモートサーバを制御するために、 xdm は、ディスプレイ上のウィンドウ階層を探索し、 次のセッション用に端末をクリーンアップする試みで プロトコルリクエストの KillClient を使用します。 これは実際には、すべてのクライアントを強制終了させることはできません。 なぜならば、ウィンドウを作成したクライアントだけしか指摘されないからです。 XDMCP は、より良いメカニズムを用意しています。 xdm が初期化でクローズしたとき、 セッションは終了して、端末が他のすべてのコネクションに終了を要求します。
このことは、よりよい X 端末のサポートが設計されたとき変更されるでしょう。
xdm の制御
xdm は 2 つの信号、 SIGHUP と SIGTERM に応答します。 SIGHUP を送信すると、 xdm は、コンフィグレーションファイルと DisplayManager.servers リソースにより 指定されたファイルを再読込みし、 エントリが付加されたり削除されているかに注意します。 新しいエントリが付加されている場合は、 xdm は、対応付けられたディスプレイ上のセッションを開始します。 削除されたエントリはすぐに不可能にされます。 これは、進行中の任意のセッションは予告なしに終了し、 新しいセッションは何も開始されないことを意味します。
SIGTERM を送信すると、 xdm は、進行中のすべてのセッションを終了します。 これは、システムを遮断するときに使用することができます。
xdm は、コマンドラインのリストを編集して、ps(1) のために 色々なサブプロセスを注意しようとします。 xdm はこの仕事のために新たなメモリを割り当てることはできないので、 xdm を、15 〜 20 文字程度のオプションを付けて起動すると有効です。 ディスプレイをサービスする各々のプロセスが、 "-<Display-Name>" でマークされます。
認証ウィジェット
認証ウィジェットは、キーボードから名前 / パスワードのペアを読み込む アプリケーションです。 これはツールキットのクライアントなので、ほとんどの想像できるパラメータは、 リソースで制御することができます。 このウィジェットに対するリソースは、 DisplayManager.DISPLAY.resources により命名されたファイルに 置かれなければなりません。 これらすべては正当なデフォルト値をもっているので、それらを指定する 必要はありません。
xlogin.Login.width, xlogin.Login.height, xlogin.Login.x, xlogin.Login.y
ログインウィジェットのジオメトリは、通常自動的に計算されます。 それをどこかよそに配置したい場合は、これらのリソースのそれぞれを 指定してください。
xlogin.Login.foreground
入力されたユーザ名を表示するための色。
xlogin.Login.font
入力されたユーザ名を表示するためのフォント。
xlogin.Login.greeting
このウィンドウを識別する文字列。 デフォルトは、 "Welcome to the X Window System" です。
xlogin.Login.unsecureGreeting
コンフィグレーションファイルの中で、X のオーソリゼーションが、 このディスプレイは要求するが、他はしない場合、 このあいさつ文は、標準のものになります。 デフォルトは、"This is an unsecure session" です。
xlogin.Login.greetFont
あいさつ文を表示するためのフォント。
xlogin.Login.greetColor
あいさつ文を表示するための色。
xlogin.Login.namePrompt
ユーザ名の入力を促すために表示する文字列。 Xrdb は、リソース値から後続の空白をとり除くので、プロンプトの終わりで空白を 付加するために(通常はよいことです)、 スペースの前にバックスラッシュを付けます。 デフォルトは "Login: " です。
xlogin.Login.passwdPrompt
パスワードの入力を促すために表示される文字列。 デフォルトは、 "Password: " です。
xlogin.Login.promptFont
両方のプロンプトを表示するためのフォント。
xlogin.Login.promptColor
両方のプロンプトを表示するための色。
xlogin.Login.fail
認証が失敗したときに表示されるメッセージ。 デフォルトは、 "Login Failed, please try again" です。
xlogin.Login.failFont
失敗のメッセージを表示するためのフォント。
xlogin.Login.failColor
失敗のメッセージを表示するための色。
xlogin.Login.failTimeout
失敗のメッセージが表示される時間(秒単位)。 デフォルトは、 30 秒です。
xlogin.Login.translations
これは、ログインウィジェットに対して使用されるトランスレーションを 指定します。 トランスレーションに関する詳細については X ツールキットの文書を 参照してください。 デフォルトのトランスレーションテーブルは次のとおりです。
Ctrl<Key>H:delete-previous-character() \n\
Ctrl<Key>D:delete-character() \n\
Ctrl<Key>B:move-backward-character() \n\
Ctrl<Key>F:move-forward-character() \n\
Ctrl<Key>A:move-to-begining() \n\
Ctrl<Key>E:move-to-end() \n\
Ctrl<Key>K:erase-to-end-of-line() \n\
Ctrl<Key>U:erase-line() \n\
Ctrl<Key>X:erase-line() \n\
Ctrl<Key>C:restart-session() \n\
Ctrl<Key>\\:abort-session() \n\
<Key>BackSpace:delete-previous-character() \n\
<Key>Delete:delete-previous-character() \n\
<Key>Return:finish-field() \n\
<Key>:insert-char() \
ウィジェットがサポートする動作は次のとおりです。
delete-previous-character
カーソルより前にある文字を消去します。
delete-character
カーソルより後にある文字を消去します。
move-backward-character
カーソルを逆方向に移動します。
move-forward-character
カーソルを順方向に移動します。
move-to-begining
( スペルの間違いのため ) カーソルを編集できるテキストの初めに移動します。
move-to-end
カーソルを編集できるテキストの終わりに移動します。
erase-to-end-of-line
カーソルより後にあるすべてのテキストを消去します。
erase-line
テキスト全部を消去します。
finish-field
カーソルが名前フィールドにある場合、パスワードフィールドまで 進んでください。 カーソルがパスワードフィールドにある場合は、現在の名前/パスワードの ペアをチェックしてください。 名前/パスワードのペアが有効な場合は、 xdm はセッションを開始します。 そうでない場合は、失敗のメッセージが表示され、 ユーザは、再度試みるよう促されます。
abort-session
サーバを終了し、再開します。
abort-display
サーバを終了し、不可能にします。これは無謀な動作で、 デフォルトの構成では利用できません。 これは、システムを遮断するとき、または xdmshell を使用するときに、 xdm を停止するために使用することができます。
restart-session
X サーバをリセットし、新しいセッションを開始します。 これは、変更されたリソースを検査したいとき、またはスクリーンがシステム のメッセージにより重ね書きされてしまったときに、使用することができます。
insert-char
入力された文字を挿入します。
set-session-argument
開始時にセッションに渡される単一ワードの引数を指定します。 Xsession と通常の使用法の節を参照してください。
allow-all-access
サーバ内のアクセス制御を不可能にします。 これは、 .Xauthority ファイルが xdm により作成されないときに 使用することができます。 この使用には十分注意してください。 これを行う前にネットワークからマシンを切り離した方がより良いでしょう。
Xstartup ファイル
このファイルは通常シェルスクリプトです。 これは "ルート" として実行されるので、セキュリティには十分気を 配らなければなりません。 これは、 /etc/utmp に偽造のエントリを行い、ファイルサーバからのユーザの ホームディレクトリを実装し、その日のメッセージを表示し、またはログインが 許されない場合にセッションを中止するコマンドを置くための場所です。 様々な環境変数がこのスクリプトを使用するために設計されます。
DISPLAY対応するディスプレイ名に設定されます。
HOMEユーザのホームディレクトリに設定されます。
USERユーザ名に設定されます。
PATHDisplayManager.DISPLAY.systemPath の
値に設定されます。
SHELLユーザのデフォルトシェル(/etc/passwd からの)に
設定されます。
XAUTHORITYオーソリゼーションファイルが設定されます。
いかなる種類の引数もスクリプトには渡されません。 xdm は、ユーザのセッションが始まる前にこのスクリプトが終了するまで待ちます。 このスクリプトの終了値が 0 でない値の場合は、 xdm は直ちにセッションを中止し、別の認証サイクルを開始します。
Xsession のプログラム
これは、ユーザのセッションとして実行されるコマンドです。 これは、オーソライズされたユーザの許可を得て実行され、指定された いくつかの環境変数をもちます。
DISPLAY対応するディスプレイ名に設定されます。
HOMEユーザのホームディレクトリに設定されます。
USERユーザ名に設定されます。
PATHDisplayManager.DISPLAY.userPath の値に
設定されます。
SHELLユーザのデフォルトシェル(/etc/passwd からの)に
設定されます。
XAUTHORITY標準でないオーソリゼーションファイルが設定されます。
ほとんどのインストレーションでは、 Xsession は、 $HOME を見て、 各ユーザがセッションとして使用したいコマンドを含んでいる .xsession ファイルがあるか調べます。 これはシステムのデフォルトセッションに取って代わります。 Xsession はまた、ユーザ固有のセッションが終了しない場合、システム のデフォルトセッションをインプリメントすることもします。 後述の通常の使用法を参照してください。
引数は、‘set-session-argument’ 動作を使用して、認証ウィジェットから このプログラムへ渡すこともできます。 これを使用して、異なるスタイルのセッションを選択することができます。 この機能を使うとよいことの 1 つは、ユーザが通常のセッションが失敗した ときにそれから脱出できることです。 これにより、ユーザは自身の .xsession が失敗した場合、管理上の 介入を要求することなしにそれを回復することができます。 通常の使用法という節でこの機能について説明します。
Xreset ファイル
このスクリプトは Xstartup ファイルと対称的で、ユーザセッションが 終了した後で実行されます。 これはルートとして実行され、おそらく Xstartup 内のコマンドの 効力を取り消すコマンドを含まなければならず、 /etc/utmp から偽造の エントリを削除するか、ファイルサーバからディレクトリを取りはずします。 Xstartup に渡された環境変数のコレクションは、 Xreset へも 与えられます。
通常の使用法
実際、 xdm は、 " 通常の " がおそらくは誤った名称であるような様々な環境で 動作するように設計されています。 ただしこの節では、 xdm を、 X を /etc/ttys からまたは手動で開始するという従来の手段に対する すぐれた解決法にさせることに焦点をあてています。
第一に、 xdm 構成ファイルをセットアップしなければなりません。 これを行うためには、該当するすべてのファイルを含むディレクトリ (/etc/xdm がすぐに頭に浮かぶでしょう)を作成するのが よいでしょう。 xdm-config と命名できる正当な構成ファイルがあります。
DisplayManager.servers:/etc/xdm/Xservers
DisplayManager.errorLogFile:/etc/xdm/xdm-errors
DisplayManager.pidFile:/etc/xdm/xdm-pid
DisplayManager∗resources:/etc/xdm/Xresources
DisplayManager∗session:/etc/xdm/Xsession
DisplayManager._0.authorize:true
DisplayManager∗authorize:false
見てわかるとおり、このファイルは単に他のファイルへの参照を含んでいます。 なお、構成要素を区切っている “∗” で指定されるリソースもあることに 注意してください。 これらのリソースは、 “∗” の代わりにディスプレイ名を使うことにより、 異なるディスプレイそれぞれに対し、一意に作成することができますが、 これは通常とても役に立ちます。 詳細については、リソースという節を参照してください。
最初のファイル /etc/xdm/Xservers はマネージすべき ディスプレイのリストを含みます。 ほとんどのワークステーションは、 0 と番号付けられたディスプレイ 1 つ だけをもつので、ファイルは次のようになります。
:0 Local local /usr/bin/X11/X :0
これは、このディスプレイ上で /usr/bin/X11/X を実行させ続け、 連続的サイクルのセッションをマネージします。
ファイル /etc/xdm/xdm-errors は、 xdm からのエラーメッセージおよび Xstartup、Xsession または Xreset に より stderr へアウトプットされたあらゆるものを含みます。 xdm を動かそうとしたときにトラブルが生じた場合は、このファイルを チェックして、 xdm がそのトラブルに対する手がかりをもっているか否かを調べます。
次の構成エントリ、/etc/xdm/Xresources は、 xrdb(1) を使用して、リソースデータベースとしてディスプレイ上に ロードされます。 認証ウィジェットは、開始される前にこのデータベースを読み込むので、 それは通常そのウィジェットに対するパラメータを含みます。
xlogin∗login.translations: #override\
<Key>F1: set-session-argument(failsafe) finish-field()\n\
<Key>Return: set-session-argument() finish-field()
xlogin∗borderWidth: 3
#ifdef COLOR
xlogin∗greetColor: #f63
xlogin∗failColor: red
xlogin∗Foreground: black
xlogin∗Background: #fdc
#else
xlogin∗Foreground: black
xlogin∗Background: white
#endif
ここで指定された様々な色は、我々がもっているいくつかのディスプレイ上 ではほどよく見えますが、他のモニター上ではそれはひどく見えます。 X は現在のところ、標準のカラー命名方式をもっていないので、いやな結果を 生まないように、これらのエントリを調整する必要があります。 トランスレーションエントリに注意してください。 これは、ユーザをデフォルトのセッションから脱出させる(そして、その セッションで生じるかもしれないトラブルから逃れさせる)ことのできる ウィジェットに対する 2、3 の新しいトランスレーションを指定します。 なお、 #override が指定されない場合、デフォルトのトランスレーションは 削除され、新しい値と交換され、役に立つ結果を生じない〔デフォルトの トランスレーションの中には、とても役に立つものもあるので(通常の入力に 応答する "<Key>: insert-char ()" のような)〕ことに注意してください。
ここで使用されている Xstartup ファイルは、単に、 ファイル /etc/nologin が存在する間はログインを防止します。 任意のメッセージを表示するための規定は何もないので(ファイルを表示する コアの X クライアントがない)、ユーザはおそらくこの動作により 困惑させられるでしょう。 これを完全な例であるとはしませんが、単に利用できる機能の デモンストレーションとして提供します。
サンプルの Xstartup スクリプトは次のとおりです。
#!/bin/sh
#
# Xstartup
#
# このプログラムは、ユーザが検査された後で、ルートとして実行されます。
#
if [ −f /etc/nologin ]; then
exit 1
fi
exit 0
最も興味深いスクリノプトは Xsession です。 このバージョンは、上記の Xresources ファイル内のトランス レーションで指定された、特別な "failsafe" モードを認識し、通常の セッションからの脱出を提供します。
#!/bin/sh
#
# Xsession
#
# This is the program that is run as the client
# for the display manager. This example is
# quite friendly as it attempts to run a per-user
# .xsession file instead of forcing a particular
# session layout
#
case $# in
1)
case $1 in
failsafe)
exec xterm −geometry 80x24−0−0 −ls
;;
esac
esac
startup=$HOME/.xsession
resources=$HOME/.Xresources
if [ −f $startup ]; then
exec $startup
exec /bin/sh $startup
else
if [ −f $resources ]; then
xrdb −load $resources
fi
twm &
exec xterm −geometry 80x24+10+10 −ls
fi
Xreset のスクリプトは、必要はありません。 そのため用意もしていません。
他のいくつかの可能性
次のコマンド行上でサーバを指定することにより、4.3 の init オプションまたは他の適切なデーモンを使用して、一度に 1 つのセッションを 実行するために xdm を使用することもできます。
xdm −server ":0 SUN−3/60CG4 local /usr/bin/X :0"
または、ファイルサーバおよび X 端末のコレクションをもっているかもしれません。 これに対する構成は、上述のサンプルと同じように思われます。 Xservers が次のように見えることは除きます。
extol:0 VISUAL-19 用
exalt:0 NCD-19 用
explode:0 NCR-TOWERVIEW3000 用
これは、 xdm にこれら 3 つのすべての端末上のセッションをマネージするように指示します。 init(8) の従来の方法でこれらの端末を可能にしたり、 不可能にするために信号を使用することについての記述は、 上記の "xdm の制御 " の節を参照してください。
xdm が、対処を苦手とする 1 つのことは、他のウィンドウシステムとの共存です。 同じハードウェア上で複数のウィンドウシステムを使用するために、おそらく xinit により興味をもつようになるでしょう。
関連事項
著作権
Copyright 1988, Massachusetts Institute of Technology.
権利と許可の声明文については X(1) を参照のこと。
著者
Keith Packard, MIT X Consortium
NEWS-OS Release 4.1C