Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ xdm(1) — NEWS-os 4.2.1R

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

X(7)

xinit(1)

xauth(1)

Xsecurity(7)

XDM(1)  —  NEWS-OS Programmer’s Manual

名称

xdm − XDMCP をサポートする X のディスプレイマネージャ

形式

xdm [ −config configuration_file ] [ −nodaemon ] [ −debug debug_level ] [ −error error_log_file ] [ −resources resource_file ] [ −server server_entry ] [ −session session_program ]

解説

xdm は、X ディスプレイ(ローカルホスト、あるいはリモートホスト) のコレクションを管理します。 X コンソーシアムの標準である XDMCP (X Display Manager Control Protocol) と同様、 X 端末の必要性により xdm の設計を行うことができました。 xdm は、 init、 getty および文字端末上の login により提供されるのと同様の サービス、すなわち、ログイン名/パスワードのプロンプト、 ユーザの妥当性検査、 および “セッション” の実行を提供するように設計されています。

“セッション” は、特定のプロセスの寿命に依存します。 すなわち従来の文字ベースの端末の世界では、 それはユーザのログインシェルです。 xdm のコンテキストでは、それは任意のセッションマネージャです。 なぜならば、これはウィンドウ環境にあるので、ユーザのログインシェルの プロセスは、必ずしも接続すべき端末のようなインターフェースをもつとは 限らないからです。 リアルセッションマネージャが利用できない場合は、 通常、ウィンドウマネージャまたはターミナルエミュレータが セッションマネージャとして使用されます。 つまり、 このプロセスの終了は、ユーザのセッションの終わりを意味します。

セッションが終了すると、 xdm は X サーバをリセットし、任意に)全プロセスを再開します。

xdm は、XDMCP 経由で間接的に要求を受け付けると、 chooser プロセスを起動し、 XDMCP の BroadcastQuery (指定したホストへの XDMCP 要求) を ディスプレイに対して行い、 XDMCP ディスプレイの管理が提供するホストのメニューを提供します。 この機能は、ホストメニューを提供しない X 端末に、便利です。

xdm はユーザが認識する最初のインターフェースを提供するので、それは、簡単に 使用でき、特定の現場のニーズに容易にカスタマイズできるように設計されて います。 xdm は、多くのオプションをもっています。 そのほとんどは正当なデフォルトをもっています。 様々なマニュアルのセクション全体を走査して、 変更したいものを選び出します。 特に セッションプログラム のセクションに注意を払ってください。 このセクションは、望むセッションのスタイルのセットアップ方法を 記述しています。

通常の使用法

実際、 xdm は、様々な環境で動作するように設計されています。 典型的 というのは、誤称です。

まず、 xdm のコンフィギュレーションファイルを設定しなければいけません。 関連ファイルを全て含むディレクトリ (通常 /usr/lib/X11/xdm) を作成します。 以下は、xdm-config という名前の、 適正なコンフィギュレーションファイルです。

  DisplayManager.servers:/usr/lib/X11/xdm/Xservers
DisplayManager.errorLogFile:/usr/lib/X11/xdm/xdm-errors
DisplayManager∗resources:/usr/lib/X11/xdm/Xresources
DisplayManager∗startup:/usr/lib/X11/xdm/Xstartup
DisplayManager∗session:/usr/lib/X11/xdm/Xsession
DisplayManager.pidFile:/usr/lib/X11/xdm/xdm-pid
DisplayManager._0.authorize:true
DisplayManager∗authorize:false
 

このファイルは、他のファイルへの参照しか含まないので ご注意ください。 リソースの中には、“∗” を使用して要素を分けているものがあるので、 合わせてご注意ください。 これらのリソースは、“∗” をディスプレイ名で置き換えて、 各異なるディスプレイに対してユニークにすることができますが、 通常、これはあまり便利ではありません。 完全な説明については、 リソース の項をご覧ください。

最初のファイル /usr/lib/X11/xdm/Xservers は、 XDMCP を使用していないディスプレイのリストを含みです。 ほとんどのワークステーションは、 ディスプレイを 1 つ (0 番と番号付けされたもの) しか持っていないので、 ファイルは、以下のような行を捜します。

 :0 Local local /usr/bin/X11/X :0
 

これは、このディスプレイで /usr/bin/X11/X を走らせておき、 セッションのサイクルが続くのを管理します。

ファイル /usr/lib/X11/xdm/xdm-errors は、 xdm からのエラーメッセージ、および、 Xsetup、 Xstartup、 Xsession、 あるいは Xreset の標準出力 (stderr) を含みます。 xdm の操作で問題がある場合は、 まず、このファイルをチェックして、 xdm に、その問題を解く鍵がないかどうかをみます。

次のコンフィグレーションのエントリ  /usr/lib/X11/xdm/Xresources は xrdb を使用して、リソースデータベースとして、ディスプレイへロードされます。 認証ウィジェットは、 起動前にこのデータベースを読み込むので、 通常、ウィジェットに対して、以下のパラメータを含みます。

 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: CadetBlue
xlogin∗failColor: red
#endif
 

translations のエントリに注意してください。 これは、 ユーザがデフォルトのセッションからエ、スケープするのを許可するための (、そして、内部で起こりうる問題を避けるための) ウィジェットに対して行う新しい解釈を指定します。 #override が指定されていない場合、 デフォルトの translations は取り除かれ、 新しい値と置き換えられるので、ご注意ください。 これは、 (ふつうの入力として、“<Key>: insert-char ()”、というように) デフォルトの translations はかなり便利なので、 あまり便利な結果とは言えません。

ここで示す Xstartup ファイルは、 /etc/nologin ファイルが存在する間、 login を単に抑制します。 ここではメッセージを表示する規定がない (ファイルを表示するコアの X クライアントがない) ため、 ユーザは、たぶん困るでしょう。 つまり、これは、完璧な例ではなく、 単なる使用可能な機能のデモンストレーションです。

以下は、 Xstartup スクリプトのサンプル例です。

 #!/bin/sh
#
# Xstartup
#
# This program is run as root after the user is verified
#
if [ −f /etc/nologin ]; then
exit 1
fi
exit 0

Xsession が、一番興味深いスクリプトです。 このバージョンは、 上記の Xresources ファイルの translations で指定されている 特別な “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
resources=$HOME/.Xdefaults
fi
if [ −f $resources ]; then
xrdb −load $resources
fi
twm &
exec xterm −geometry 80x24+10+10 −ls
fi
 

オプション

−config オプションを除いて、 これらのオプションは全て、 リソースとして コンフィグレーションファイルで指定できる値を指定します。

−config configuration_file
xdm の動作を制御するリソースを指定するコンフィグレーションファイルの ファイル名を指定します。 ファイル /usr/lib/X11/xdm/xdm-config がデフォルトです。

−nodaemon
DisplayManager.daemonMode リソースの値として、“偽”を指定します。 これは、 普通のデーモンの動作 ( xdm は、全てのファイル記述子をクローズし、 制御端末との対応を解除し、 自身を最初に起動したときのバックグラウンドに置く動作) を抑制します。

−debug debug_level
DisplayManager.debugLevel リソースの数値を指定します。 0 でない値を指定すると、 xdm は、大量のデバッグ文を端末へ表示します。 また、 DisplayManager.daemonMode リソースを不可能にして、 xdm を同期的に実行させます。 これらのデバッグ文を解釈するには、 xdm のソースコードのコピーが必要です。 出力の一般的な説明は省略します。

-error error_log_file
DisplayManager.errorLogFile リソースの値を指定します。 このファイルは、セッションの進行中に実行された様々なスクリプトと プログラムにより stderr に書き込まれた何かと、 xdm からのエラーを含みます。

−resources resource_file
DisplayManager∗resources リソースの値を指定します。 このファイルは、 xrdb を使用してロードされ、認証ウィジェットに 対する構成パラメータを指定します。

−server server_entry
DisplayManager.servers リソースの値を指定します。 このリソースについての説明は、 サーバ指定 の項を参照してください。

−udpPort port_number
DisplayManager.requestPort リソースの値を指定します。 この値は、 xdm が XDMCP リクエストをモニタするポート番号を設定します。 XDMCP は、よく知られている UDP ポート 177 を使うので、 デバックの時以外は変える必要はありません。

−session session_program
DisplayManager∗session リソースの値を指定します。 これは、ユーザがログインした後に、 セッションとして起動するプログラム名です。

−xrm resource_specification
ほとんど X のツールキットアプリケーションのように、 任意のリソースを指定することができます。

リソース

多くの段階で、 xdm の動作は、X のリソースフォーマットにある コンフィギュレーションファイルを使用する ことにより制御することができます。 すべてのディスプレイ上の xdm の動作を修正するリソースもあれば、単一のディスプレイ上の xdm の動作を修正するリソースもあります。 動作が特定のディスプレイに関係するところでは、ディスプレイ名は、 “DisplayManager” と最後のリソース名セグメントの間のリソース名に 挿入されます。 たとえば、 DisplayManager_expo.0.startup は、 “expo:0” ディスプレイ上の開始シェルファイルを定義するリソースの名前です。 なぜなら、 xdm は、リソース名を生成するときは ドットやコロンの代わりにアンダースコアを使用しますが、 リソースマネージャは、リソース名とその値を区別するために コロンを使用し、リソース名のパートとの区別にドットを使用するからです。

DisplayManager.servers
このリソースは、複数のサーバーエントリのファイル名 ( 1 ラインに 1 つ スラッシュで始まります ) を記述することができます。 詳細については、 サーバ指定 の項をご覧ください。。

DisplayManager.requestPort
xdm が XDMCP リクエストの入力に使う UDP ポート番号を指定します。 システムのデバックを行わない場合は、177 ( デフォルト ) にしてください。

DisplayManager.errorLogFile
エラー出力は、通常システムのコンソールへ送られます。 それを転送するためには、このリソースをファイル名へ設定します。 これらのメッセージを syslog へ送る方法は、それをサポートするシステム用に 開発しなければなりません。 しかし、様々なインターフェースは、任意のシステムに依存しない インプリメンテーションを除外します。 このファイルは、 Xsetup、 Xstartup、 Xsession および Xreset ファイルにより stderr へ 送られた任意の出力も含むので、同様にそれらのスクリプト中の問題の記述も 含みます。

DisplayManager.debugLevel
このリソースの整数値が、ゼロより大きい場合は、 多量のデバッグ情報を表示することができます。 また、これは、その情報を bit-bucket に転送するデーモンモードを 無効にし、 ルート以外のユーザが、正常に動作しない xdm をデバックすることができます。

DisplayManager.daemonMode
普通、 xdm は、端末と連動していないデーモンに自分自身を作ろうとします。 これは、フォークして、カレントプロセスを終了します。 それから、ファイル記述子をクローズし、 端末の制御を止めます。 ある環境では、 (特に、デバッグ中など) これは望まれません。 このリソースに "false" に設定すると、この機能は使用できなくなります。

DisplayManager.pidFile
指定されたファイル名は、メインの xdm プロセスのプロセス ID の ASCII 表現を含むために作成されます。 xdm は、同じマシン上で 2 つのデーモンが走らないように、 このファイルをロックすることができます。

DisplayManager.lockPidFile
これは、多数のディスプレイマネージャを走らせるとき、 暴走から守るために、 xdm がロックファイルを使うかどうか、コントロールするリソースです。 SYSV 上では、"lock" ライブラリを使い、 BSD 上では、"flock" を使います。

DisplayManager.authDir
これは、 xdm が セッションの初期化の時に 認証ファイルを保存するディレクトリを、 指定します。 デフォルトディレクトリは、 /usr/lib/X11/xdm です。

DisplayManager.autoRescan
これは、 セッションが終了し、 コンフィグレーションファイル、 サーバ、アクセス制御、および認証キーファイルが 変更された後、 xdm がこれらのファイルを読み直すかどうかを制御する論理値です。 デフォルトは、"true" です。 xdm は、メインプロセスに "SIGHUP" を送り、これらのファイルを再読み込みします。

DisplayManager.removeDomainname
XDMCP クライアントのディスプレイ名を決めるとき、 端末のための最適なホスト名が作られます。 この変数が設定されたとき、ローカルホストのドメイン名と同じ場合、 xdm は、ホスト名のドメイン名の部分を取り除きます。 デフォルトは、"true" です。

DisplayManager.keyFile
XDM-AUTHENTICATION-1 スタイルの XDMCP の認証は、 xdm と端末の間に、独自のキーの割り付けを要求します。 このリソースは、ディスプレイ名とキー割り付けのエントリを記述した ファイルを指定します。 アメリカの輸出制約により、 XDM-AUTHENTICATION-1 スタイルは あまり一般的ではない DES を要求するため、 デフォルトでは、 xdm は XDM-AUTHENTICATION-1 スタイルをサポートしていません。

DisplayManager.accessFile
認証されていない XDMCP サービスを阻止するため、 および XDMCP の IndirectQuery リクエストを転送させるために、 このファイルは、 このマシンを直接アクセスできるホスト名のデータベース、 あるいはリクエストを転送するホスト名のリストを持ちます。 このファイルの形式は、 XDMCP アクセスコントロール の項で説明されています。

DisplayManager.exportList
空白文字で区切られた環境変数のリストは、 Xsetup、 Xstartup、 Xsession および Xreset プログラムに渡されます。

DisplayManager.randomFile
認証キーの種を生成するチェックサムファイルです。 このファイルは、しばしば変更すべきです。 デフォルトは、 /dev/mem です。

DisplayManager.DISPLAY.resources
このリソースは、xrdb によりリソースデータベースとして、 ディスプレイのスクリーン 0 のルートウィンドウへロードされるファイル名を 指定します。 Xsetup プログラム、Login ウィジェット、および chooser は、このファイルで設定されたリソースを使用します。 このリソースデータベースは、ちょうど認証プロシージャが始まる前に ロードされるので、ログインウィンドウの外観を制御することができます。 このファイル内に置くのに適切な様々なリソースを記述している、 認証ウィジェット の項を参照してください。 このリソースに対するデフォルト値はありませんが、 /usr/lib/X11/xdm/Xresources が、通例使用する名前です。

DisplayManager.DISPLAY.chooser
特別なホスト名 CHOOSER へ Indirect 要求をするための ホストメニューを提供するプログラムを指定します。 /usr/lib/X11/xdm/chooser がデフォルトです。 XDMCP アクセスコントロール および、 CHOOSER の項を参照ください。

DisplayManager.DISPLAY.xrdb
リソースをロードするために使用するプログラムを指定します。 デフォルトにより、 xdm は /usr/bin/X11/xrdb を使用します。

DisplayManager.DISPLAY.cpp
これは、 xrdb によって使われる C 言語プリプロセッサの名前を指定します。

DisplayManager.DISPLAY.setup
これは、Login ウィンドウを出す前に、(ルート) で起動するプログラムです。 これは、 Login ウィンドウの画面の外観を変更したり、 他のウィンドウ (例えば、xconsole を起動して) を出すのに 使用します。 デフォルトでは、プログラムは何も実行されません。 ここで使用されるファイルの通例的な名前は、 Xsetup です。 プログラムの設定 の項を参照してください。

DisplayManager.DISPLAY.startup
これは、認証プロセスが成功した後(ルートとして)実行されるプログラムを 指定します。 デフォルトでは、プログラムは何も実行されません。 通例、ここで使用するファイル名は Xstartup です。 セッションプログラム の項を参照してください。

DisplayManager.DISPLAY.session
これは、実行する(ルートとしては実行されない)セッションを指定します。 デフォルトにより、 /usr/bin/X11/xterm が実行されます。 通例、名前は Xsession です。 セッションプログラム の項を参照してください。

DisplayManager.DISPLAY.reset
これは、セッションが終了した後に(ルートとして)実行されるプログラムを 指定します。 デフォルトにより、プログラムは何も実行されません。 通例、名前は Xreset です。 プログラムのリセット の項を参照してください。

DisplayManager.DISPLAY.openDelay

DisplayManager.DISPLAY.openRepeat

DisplayManager.DISPLAY.openTimeout

DisplayManager.DISPLAY.startAttempts
これらの数値リソースは、妥協的でないサーバをオープンしようとするときに xdm の動作を制御します。 openDelay は、連続する試み間の(秒単位の)休止の長さです。 openRepeat は、行われる試みの数です。 openTimeout は、実際にオープンしようとしている間に待つ時間( すなわち、 connect(2) システムコールで費やす最大の時間)です。 startAttempts は、サーバ上で拒否される以前に、 全体のプロセスが実行される回数です。 openRepeat の試みが行われた後で、またはある特定の試みで openTimeout 秒が経過した場合は、 xdm は、サーバを終了し、再開して、再び接続を試みます。 このプロセスは、ディスプレイが動作しなくなったところで、 startAttempts 回繰り返されます。 この動作は任意のように思われますが、経験に基づいて開発されたもので、 ほとんどのシステム上でとてもよく動作します。 デフォルト値は、 openDelay は 5、openRepeat も 5、 openTimeout は 30、startAttempts は 4 です。

DisplayManager.DISPLAY.pingInterval

DisplayManager.DISPLAY.pingTimeout
リモートディスプレイが終了したときを発見するために、 xdm は、ときどき X コネクションおよび XSync コールを使用して、ping します。 pingInterval は、ping の間の時間 (分) を指定します。 また pingTimeout は、端末がリクエストの応答に待つ 最大の時間 (分) を指定します。 もし、端末の応答がなかったら、セッションは終了します。 デフォルトは、どちらも 5 分です。 ホスト管理の必要のない X 端末をよく使用する場合は、 これに大きい値を設定するといいです。 端末がたまたま使用不可になった場合でも、 セッションがそのまま存在し続けることが、唯一の心配です。 xdm は、ローカルディスプレイには ping しません。 これは、無害なことに思えるが、 NFS サーバのためにハングアップして、ping の応答がなくて ワークステーションのセッションが、終了した場合、あまり好ましくありません。

DisplayManager.DISPLAY.terminateServer
このブール(論理)リソースは、セッションが終了したとき(セッションを リセットしないで)、X サーバも終了するか否かを指定します。 サーバは無制限に実行し続ける傾向があるので、 サーバを実行する時間を制限したい場合に、 このオプションを使用することができます。 ディスプレイ値は、 "false" です。

DisplayManager.DISPLAY.userPath
xdm は、セッションに対する環境変数 PATH をこの値に設定します。 これは、コロンで区切られたリストのディレクトリでなければなりません。 詳細については sh(1) を参照してください。 通常の設定は、 “:/bin:/usr/bin:/usr/bin/X11:/usr/ucb” です。 デフォルト値は、 作成時に、 X システムコンフィギュレーションファイルの DefaultUserPath に 指定できます。

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 は、このプログラムに戻ります。 このプログラムは、引数なしで実行されますが、 そのセッションがもったであろう環境変数と同じ変数を使用して実行します ( セッションプログラム の項を参照)。 デフォルトにより、 /usr/bin/X11/xterm を使用します。

DisplayManager.DISPLAY.grabServer

DisplayManager.DISPLAY.grabTimeout
安全性を良くするために、 xdm は、ログイン名/パスワードを読み込んでいる間は サーバとキーボードをグラブします。 この grabServer リソースは、サーバがログイン名/パスワードを読み込んでいる間、 ホールドするかどうかを記述します。 "false" なら、サーバはキーボードのグラブの成功の後、グラブしません。 "TRUE" なら、サーバはセッションが起動してから、 名前/パスワードの読み込み終了までグラブします。 デフォルトは、"false" です。 grabTimeout リソースは、 xdm がグラブに成功するのに待つ最大時間を表します。 いくつかのクライアントがサーバをグラブしている場合や、 ネットワーク階層が深い場合、グラブに失敗することがあります。 grabTimeout のデフォルトは、3 秒です。 ユーザは、ディスプレイ上の同じようなウィンドウに騙されることがあるので、 立ち上げるときは注意してください。 もしグラブが失敗したら、 xdm は、終了し、サーバとセッションを再起動します。

DisplayManager.DISPLAY.authorize

DisplayManager.DISPLAY.authName
authorize リソースは、 xdm がローカルなサーバコネクションのために認証を作成して、 使用するかを設定するものです。 認証を使用する場合、 authName は、 使用する認証のメカニズムのリストです。 これは、空白文字で区切られています。 XDMCP コネクションは、 どの認証のメカニズムがサポートされるかを ダイナミックに指定します。 そのため、この場合 authName は無視されます。 authorize は、ディスプレイを設定するものだが、 この場合そのままでは利用できないので、 ユーザは、ログインウィジェットで別のメッセージディスプレイを持つことで、 情報が得られます。 デフォルトは、authorize は、"true"、 authName は、"MIT-MAGIC-COOKIE-1" です。

DisplayManager.DISPLAY.authFile
このファイルを、−auth サーバのコマンド行オプションとともに使用して、 認証データを、 xdm からサーバへ伝達します。 もし削除されると、認証のメカニズムが動作されなくなるので、 誰でも書き込み可能なディレクトリではないところにおいてください。

DisplayManager.DISPLAY.authComplain
"false" に設定されている場合、 ログインウィンドウで unsecureGreeting を使用することができません。 認証ウィジェット の項を参照してください。 デフォルトは、"true" です。

DisplayManager.DISPLAY.resetSignal
サーバをリセットするために、 xdm が送るシグナルの数です。 サーバの制御 の項を参照してください。 デフォルトは、1 (SIGHUP) です。

DisplayManager.DISPLAY.termSignal
サーバを終了するために、 xdm が送るシグナルの数です。 サーバの制御 の項を参照してください。 デフォルトは、15 (SIGTERM) です。

DisplayManager.DISPLAY.resetForAuth
サンプルサーバにおける認証の本来の動作は、 サーバのリセットの間に、コネクションの初期化のチェックの代わりに、 認証ファイルを読み直します。 xdm は、ディスプレイに接続する前に、認証の情報を作成するので、 古いサーバは、新しい認証の情報を得ることはできません。 このリソースは、ファイルに情報をセットしてから、 xdm が、サーバに "SIGHUP" 信号を送ります。 その結果、新しい認証の情報が読み込まれている間に、 接続されるサーバにリセットが起こります。 デフォルトは、"false" で、 全ての MIT サーバに作動します。

DisplayManager.DISPLAY.userAuthDir
xdm は、通常、ユーザの認証ファイル ($HOME/.Xauthority) が 書き込みできない場合、このリソースのディレクトリに 独自のファイル名で認証ファイルを作成して、 環境変数 XAUTHORITY にファイル名を示します。 デフォルトは、 /tmp を使用します。

XDMCP アクセスコントロール

DisplayManager.accessFile で指定されているデータベースファイルは、 xdm が XDMCP サービスをリクエストしているディスフレイからのアクセスを 制御するために使用する情報です。 このファイルには、以下の 3 タイプのエントリがあります。 Direct および Broadcast 要求への応答を制御するエントリ、 Indirect 要求への応答を制御するエントリ、 および、マクロの定義です。

Direct エントリのフォーマットは、簡単です。 ホスト名またはホスト名から区別されるパターンです。 パターンは、1 個以上のメタキャラクタ ( ‘∗’ は 0 文字以上の文字列、 ‘?’ は 1 文字にそれぞれマッチします。) を含み、ディスプレイデバイスのホスト名と比較されます。 エントリがホスト名の場合は、 全ての比較は、ネットワークアドレスを使用して行われます。 そのため、正確なネットワークアドレスへの変換できる名前は どれでも使用できます。 パターンの場合は、正規のホスト名のみが、比較の際に使用されます。 そのため、別名とマッチしないようにしてください。 ホスト名およびパターンの前に ‘!’ 文字がある場合は、 そのエントリに一致したホストは、無視されます。

Indirect エントリも、ホスト名またはパターンを含みますが、 間接的な要求を送るべき ホスト名またはマクロのリストがその後に続きます。

マクロ定義は、マクロ名、および ホスト名と展開するマクロのリストからなります。 マクロとホスト名を区別するために、 マクロ名は、 ‘%’ から始まります。 マクロは、ネストしていても構いません。

また、Indirect エントリには、 xdm に chooser を起動させて、接続するホストのメニューを表示させるように 指定できます。 CHOOSER の項を参照してください。

特定のディスプレイのホストへのアクセスをチェックする場合、 各エントリ、は、順番にスキャンされ、 最初に一致したエントリが、その答えとなります。 Indirect エントリをスキャンする時、Direct および Broadcast エントリは、 無視されます。 Direct エントリ、および Broadcast エントリの場合も、同様です。

空行は、無視されます。 ‘#’ は、コメント行として扱われ、それ以降の行は無視されます。 ‘\newline’ は、改行文字を無視するため、 間接的ホストを複数行にわたってリストすることができます。

以下は、Xaccess ファイルの例です。

#
# Xaccess − XDMCP access control file
#
 #
# Direct/Broadcast query entries
#
 !xtra.lcs.mit.edu# disallow direct/broadcast service for xtra
bambi.ogi.edu# allow access from this particular display
∗.lcs.mit.edu# allow access from any display in LCS
 #
# Indirect query entries
#
 %HOSTSexpo.lcs.mit.edu xenon.lcs.mit.edu \
excess.lcs.mit.edu kanga.lcs.mit.edu
 extract.lcs.mit.eduxenon.lcs.mit.edu#force extract to contact xenon
!xtra.lcs.mit.edudummy#disallow indirect access
∗.lcs.mit.edu%HOSTS#all others get to choose

CHOOSER

Broadcast または Indirect 要求を使用して ホストメニューを表示しない X 端末では、 chooser プログラムが、これを行います。 Xaccess ファイルで、Indirect ホストのリストの最初のエントリに、 “CHOOSER” と指定してください。 Chooser が、リスト中の各ホストに Query 要求を送り、 応答したホストにメニューを表示します。

リストには、“BROADCAST” という単語を指定できます。 その場合、 chooser が、Broadcast を代わりに送り、それに応答したホストにメニューを 表示します。 オペレーティングシステムによっては、 UDP パケットをブロードキャストできないため、 この機能が使用できませんのでご注意ください。

chooser を使用した Xaccess ファイルの例:
 

extract.lcs.mit.eduCHOOSER %HOSTS#offer a menu of these hosts
xtra.lcs.mit.eduCHOOSER BROADCAST#offer a menu of all hosts

chooser として使用するプログラムは、 DisplayManager.DISPLAY.chooser リソースで指定されます。 このプログラムのリソースは、 DisplayManager.DISPLAY.resources で指定した名前のファイルに、記述できます。

サーバ指定

DisplayManager.servers リソースは、 サーバの指定をします。 または、スラッシュ (/) で始まる値がある場合は、 それは、 サーバの指定がされているファイルの名前です。 これらの指定は、1 行に、1 つの指定がされます。

各指定は、 常に管理すべきディスプレイで、XDMCP を使用しないものを指します。 各指定には、最低、以下の 3 つの部分からなります。 ディスプレイ名、ディスプレイクラス、 ディスプレイタイプ、そして (ローカルサーバの場合は) サーバを起動するコマンドライン。 普通、ローカルディスプレイ番号 0 のエントリは、 以下のようになります。

   :0 Digital-QV local /usr/bin/X11/X :0
 

ディスプレイタイプは、以下のようになります。

 locallocal display: xdm must run the server
foreignremote display: xdm opens an X connection to a running server
 

ディスプレイ名は、 X プログラムの −deisplay オプションで渡すことができるものでなければいけません。 この文字列は、 ディスプレイごとのリソース名を作成するのに使用されます。 そのため、名前が一致するように注意してください。 (例えば、他のリソースが、 “DisplayManager._0.session” として指定されている場合は、 “localhost:0 local /usr/bin/X11/X :0” の代わりに “:0 local /usr/bin/X11/X :0” を使用してください。) ディスプレイクラスの部分は、 各ディスプレイごとのリソースで、リソースのクラスとして使用されます。 これは、類似したディスプレイがたくさんある場合 (X 端末がたくさん繋がっているような場合)、 それらのリソースを設定したいときに有用です。 XDMCP を使用している場合は、 ディスプレイに ディスプレイクラスを 指定しなければいけません。 つまり、 ある特定の X 端末に関するマニュアルに、 デバイスのディスプレイクラスを文字列で記述されていなければいけません。 記述されていない場合は、 xdm をデバッグモードで起動して、 そのデバイス用に作成されるリソース (文字列) を検索できます。 作成されるリソースには、クラス (文字列) も含まれます。

プログラムの設定

サーバをリセットした後、そして、Login ウィンドウが表示去れる前に、 Xsetup ファイルが起動されます。 このファイルは、普通、シェルスクリプトです。 これは、ルートで起動するので、安全性には、十分ご注意ください。 これは、ルートのバックグラウンドの変更、 または Login ウィンドウと一緒に画面に表示したい他のウィンドウ を出すところです。

DisplayManager.exportList で指定されたものの他に、 以下の環境変数が渡されます。

 DISPLAY結び付いたディスプレイ名
PATHDisplayManager.DISPLAY.systemPath の値
SHELLDisplayManager.DISPLAY.systemShell の値
XAUTHORITY認証ファイルに設定される値

xdm は、キーボードおグラブするので、 他のウィンドウは、キーボード入力を受け付けることができなくなるので ご注意ください。 マウスを通して、交信できますが、 ここには、セキュリティーホールがあるのでご注意ください。 DisplayManager.DISPLAY.grabServer が設定されていると、 Xsetup は、ディスプレイを接続できません。 このプログラムのリソースは、 DisplayManager.DISPLAY.resources で指定された名前のファイルに置かれます。

認証ウィジェット

認証ウィジェットは、キーボードから、名前/パスワードのペアを読み込む アプリケーションです。 これはツールキットのクライアントなので、ほとんどの想像できるパラメータは、 リソースで制御することができます。 このウィジェットに対するリソースは、 DisplayManager.DISPLAY.resources で指定されている名前のファイルに 置かれなければなりません。 これらは、すべて正当なデフォルト値を持っているので、 デフォルトを指定する必要はありません。

xlogin.Login.width, xlogin.Login.height, xlogin.Login.x, xlogin.Login.y
ログインウィジェットのジオメトリは、通常自動的に計算されます。 それをどこか別の場所に配置したい場合は、これらのリソースのそれぞれを 指定してください。

xlogin.Login.foreground
入力されたユーザ名を表示するための色。

xlogin.Login.font
入力されたユーザ名を表示するためのフォント。

xlogin.Login.greeting
このウィンドウを識別する文字列。 デフォルトは、 "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 incorrect" です。

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
開始時にセッションに渡される単一ワードの引数を指定します。 セッションプログラム と 通常の使用法 の項を参照してください。

allow-all-access
サーバ内のアクセス制御を不可能にします。 これは、 .Xauthority ファイルが xdm により作成されないときに 使用することができます。 この使用には十分注意してください。 これを行う前にネットワークからマシンを切り離した方が良いでしょう。

起動ファイル

Xstartup ファイルは、通常シェルスクリプトです。 これは "ルート" として実行されるので、セキュリティには十分気を 配らなければなりません。 これは、 /etc/utmp にエントリを追加するコマンド、 ファイルサーバからユーザのホームディレクトリへマウントするコマンド、 その日のメッセージの表示するコマンド、 あるいは、 ログインが許されない場合にセッションを中止するコマンドを 置くための場所です。

DisplayManager.exportList により指定されたものの他に、 以下の環境変数が渡されます。

 DISPLAY対応するディスプレイ名
HOMEユーザのホームディレクトリ
USERユーザ名
PATHDisplayManager.DISPLAY.systemPath の値
SHELLDisplayManager.DISPLAY.systemShell の値
XAUTHORITY認証ファイルに設定

スクリプトには、 何も引数は渡されません。 xdm は、ユーザのセッションが始まる前にこのスクリプトが終了するまで待ちます。 このスクリプトの終了値が 0 でない値の場合は、 xdm は直ちにセッションを中止し、別の認証サイクルを開始します。

セッションプログラム

Xsession プログラムは、ユーザのセッションとして実行されるコマンドです。 これは、認証されたユーザの許可で実行されます。

DisplayManager.exportList で指定されたものの他に、 以下の環境変数が渡されます。

 DISPLAY対応するディスプレイ名
HOMEユーザのホームディレクトリ
USERユーザ名
PATHDisplayManager.DISPLAY.userPath の値
SHELLユーザのデフォルトのシェル (getpwnam から)

XAUTHORITY標準でない認証ファイルの設定
 

ほとんどのインストレーションでは、 Xsession は、$HOME を見て、 各ユーザがセッションとして使用したいコマンドを 含んでいる .xsession ファイルがあるか調べます。 これはシステムのデフォルトセッションに取って代わります。 Xsession はまた、ユーザ固有のセッションが存在しない場合、システム のデフォルトセッションをインプリメントすることもします。 通常の使用法 の項を参照してください。

引数は、‘set-session-argument’ 動作を使用して、認証ウィジェットから このプログラムへ渡すこともできます。 これを使用して、異なるスタイルのセッションを選択することができます。 この機能の良い使用例は、ユーザが通常のセッションが失敗した ときにそれから脱出できることです。 これにより、ユーザは自身の .xsession が失敗した場合、管理上の 介入を要求することなしにそれを回復することができます。 通常の使用法 の項でこの機能について説明します。

プログラムのリセット

このスクリプトは Xstartup ファイルと対称的で、 ユーザセッションが終了した後で実行されます。 これはルートとして実行され、 Xstartup 内のコマンドの効力を取り消すコマンドを含みます。 /etc/utmp からエントリを削除したり、 ファイルサーバからディレクトリをアンマウントします。 Xstartup に渡された環境変数は、 Xreset へも渡されます。

サーバの制御

xdm は、POSIX 信号を使用してローカルサーバを制御します。 SIGHUP を使用して、サーバをリセットし、 すべてのクライアントとのコネクションをクローズし、 他のクリーンアップを行います。 SIGTERM を使用して、サーバを終了します。 これらの信号が期待するように動作しない場合は、 DisplayManager.DISPLAY.resetSignal リソースおよび DisplayManager.DISPLAY.termSignal リソースは、 使用できる他のシグナルを指定します。

XDMCP を使用していないリモートサーバを制御するために、 xdm は、ディスプレイ上のウィンドウ階層を探索し、 次のセッション用に端末をクリーンアップする試みで プロトコルリクエストの KillClient を使用します。 これは、実際には、クライアントを全て強制終了させるわけではなく、 ウィンドウを作成したクライアントを知らせるだけです。 XDMCP は、もっと良いメカニズムを用意しています。 xdm が最初の接続を終了すると、 セッションが終了し、 他のすべての接続を終了するように、端末に要求します。

xdm の制御

xdm は 2 つの信号、 SIGHUP と SIGTERM に応答します。 SIGHUP を送信すると、 xdm は、コンフィグレーションファイル、 アクセス制御ファイル、 および、サーバファイルを再度読み込みます。 サーバファイルの場合、 エントリが追加されたか削除されたか、報告します。 新しいエントリが追加されている場合は、 xdm は、対応付けられたディスプレイ上のセッションを開始します。 削除されたエントリはすぐに不可能にされます。 これは、進行中の任意のセッションは予告なしに終了し、 新しいセッションは何も開始されないことを意味します。

SIGTERM を送信すると、 xdm は、進行中のすべてのセッションを終了し、exit します。 これは、システムを遮断するときに使用することができます。

xdm は、コマンドラインの引数リストをその場で編集して、 ps(1) 用の様々なサブプロセスをマークしようとします。 xdm はこの仕事のために新たなメモリを割り当てることはできないので、 xdm を、 適切な長さのコマンドラインを使用して (フルパス名を使用すれば十分でしょう)、 起動すると有効です。 ディスプレイをサービスする各々のプロセスは、 −display でマークされます。

他の可能性

次のコマンド行上でサーバを指定することにより、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 は、 他のウィンドウシステムとの共存は、あまりうまく働きません。 同じハードウェア上で複数のウィンドウシステムを使用したい場合は、 おそらく xinit をお勧めします。

関連ファイル

/usr/lib/X11/xdm/xdm-config
デフォルトの構成ファイル

/usr/lib/X11/xdm/Xaccess
デフォルトのアクセスファイル。認証されたディスプレイのリスト

/usr/lib/X11/xdm/Xservers
デフォルトのサーバファイル。管理する XDMCP 以外のサーバのリスト

$(HOME)/.Xauthority xdm がクライアントが読み込むキーを保存しておくユーザ認証ファイル

/usr/lib/X11/xdm/chooser
デフォルトの chooser

/usr/bin/X11/xrdb デフォルトのリソースデータベースのローダ

/usr/bin/X11/X デフォルトサーバ

/usr/bin/X11/xterm デフォルトセッションプログラムおよび失敗しないクライアント

/usr/lib/X11/xdm/A<host>−<suffix>
認証ファイルのデフォルトの場所

関連事項

X(7), xinit(1), xauth(1), Xsecurity(7)
および XDMCP

著作権

Copyright 1988, Massachusetts Institute of Technology. 
権利と許可の声明文については、 X(7) を参照のこと。

著者

Keith Packard, MIT X Consortium

NEWS-OS Release 4.2.1R

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026