Xlogin を tune up しよう。

専ら "startx" だという人には余り関係無い話ですが、 xlogin は私にとってはUNIX 系OSの入口そのものです。 これは、学部の頃の幼児体験と関連があります。 当時は日本で X が普及しはじめた頃でした。 私が居た学科でも、学生の教育システムに X を導入したばかり。 先進的な環境を学部生に使わせようという先生の気概が感じられる、気合いの入っ たシステムでした。確か、ウィンドウ・マネージャは MWM でした。 先生が、授業の最初に、パスワードとログインに関する説明をしたあと、

このグラフィック環境はな、クライアント・サーバ モデルといってだなあ。

とかいって、黒板に画を描いて説明してくれました。 が、なんせメモリが足りないのか、 「 学生の emacs 使用は禁止(でもインストールされていた)。 vi 推奨。(edも 可)」 という、今思えば、やや無茶な環境でした。私としては、ぜひとも X が使えな くても emacs が使いたかった所ですが、それも今は昔の物語。 xlogin の味気ない出迎 えは、それ以来私の中で、この手ごわい OS一族と、切っても切れない関係となっ たのでした。


その昔、 Linux Japan という雑誌に xdm をもっとかっこよくしよう! という 記事がありましたが、まあ、この記事の動機もそんなもんです。 xlogin は xdm というプログラムが起動しています。 xdm はおおむね次のよう なサイクルにより、グラフィック環境に於けるユーザの login,logout を実現します。
  1. Xsetup スクリプトにより、xlogin の widget が出現する画面を作る。
  2. ユーザが login すると、 Xstartup スクリプトを root として実行する。
  3. 次に、 Xsession スクリプトを、login ユーザとして実行する。このプロ セスは、文字端末に於ける ユーザの login shell に対応するもので、ユー ザがホームディレクトリに ".xsession" ファイルを持っていれば、 Xsession スクリプトはこれを exec する。このプロセスの終了は、文字 端末に於ける login shell の終了に相当する。
  4. Xsession が終了したら、 Xreset スクリプトが実行される。1 に戻る。
たいていの xdm の実装では、これらプログラムは b-shell スクリプトです。 くわしくは、あなたのシステムで man xdm して下さい。 そこで、これらのスクリプトを変更すれば xdm の振舞を変化させる事ができるわ けですが、 xdm からしか login できない環境で、これをおかしくしてしまったら、 けっこう難儀な事になります。それを防ぐために、
●まともなファイルを取っておこう。
●ネットワークとかで、login しておこう。
というのを、念のためにやっておきましょう。 無論、これらの対策を取ったところで、絶対大丈夫という事はあり得ませんし、 取り返しのつかない事になるかもしれませんよ。


それでは手始めに、
この xlogin の味気ありすぎる背景を、 何か壁紙で置き換えてやろう。これは、 Xsetup スクリプトに、
xloadimage -onroot imagefilename
とかを追加してやれば良いだけの話ですね。 xloadimage は、画像を表示したら 死ぬので、何も問題ありません。 きれいな壁紙を表示したら、画面の狭い ノートパソコンとかで X を使っている 人には xlogin が邪魔に感じられるでしょう。 widget の設定は、リソースと決 まっています。では、xlogin のリソースはどこにあるかと言えば、 xdm のディ レクトリの xdm-config というファイルを見て下さい。リソースのファイル名が 書いてあるでしょう。今、仮にこれを Xresources としましょう。これを見ると、
  1. xlogin のキーバインド
  2. xlogin のジオメトリ
  3. フォント
  4. 表示する文字列
など、おなじみの面子がある事が判ります。 リソースは、 man xdm すれば、どういうものがあるか判ります。 さて、とりあえず無茶な設定にしてみましょう。
念のため言いますが、数式ではありませんよ。 このでたらめな xlogin のリソースを見るには、画をクリックして下さい。 login できなかった時のメッセージも adobe symbol になります。 別に本当のギリシャ語が出てる訳ではないので、全くでたらめですがね。


プログラム(例えば、時計とか)を走らせるのも、かんたんです? Xsetup に xclock -g +5+5 とか書けば良い? やってみましょう。 私のお気に入りのプログラム、 xearth でやってみたところ

これで、背景が時間によって変化してゆきます。けっこう悪くないですね。 xlock -inroot とかしてもいいですね。では、一般ユーザとして login してみ ましょう。 そうです。 xsetup は root のプロセスなので、実行したプログラムも root の プロセス。ユーザが login しても死にません。 でも、心配無く。もう一つ root として実行されるスクリプトがあります。 Xstartup です。これに、 Xsetup で実行したプログラムを終了させる命令を書 いとけば良いのです。私は、

Xsetup でプログラムを実行したら、すぐにその PID を /tmp のファイルに書き込む。
Xstartup で、 kill `cat /tmp/programname.pid` ; rm -f /tmp/programname.pid
としています。 そうそう。よく考えてみたら、上の xlogin の widget が取り込んであるの も不思議ですよね。だって、xv で grab しようにも login する前にユーザプロ セスがあるわけないし。これも、実は Xsetup で xwd -root を実行して grab したものなのです。 これで、login 画面でスクリーン セーバを使う事もできますね。スクリーンセーバに xautolock が便利です。 これは、スクリーンセーバに使うプログラムを -locker オプションで 指定できるのです。

xearth の地球を描き直す瞬間の負荷は相当なものなので、 これを使うならば、nice するとかして状況をよく考えた方が良いでしょう。 xlock も galaxy モードの負荷は、極めて凶悪です。

それでは、かっこいい login 画面ができたら私にも教えて下さいね。