ここでは、お使いのシステムを変えて良くすることを少し考えてみましょ う。今のところ説明したのはウィンドウマネージャーの設定だけです。ウィンド ウマネージャを使えば、ウィンドウの外で起こることは何でも (ウィ ンドウ、枠、境界、ボタン、デスクトップ等) カスタマイズできますが、ウィ ンドウの内部を良くすることについてはどうでしょう? これを行う ためには、システムの X リソースを修正するしかありません。
X リソースは、プログラムのリソースのデフォルト値を格納し、ウィンドウ環 境のルック & フィールをユーザの好みに合わせるための機構です。リソー スはテキスト文字列として指定され、アプリケーションが実行されたときに様々 な場所から読み込まれます。プログラムの要素には、クラス名とインスタンス 名で識別される階層内のオブジェクトを使って、階層的に名前が付けられます。 階層のトップレベルは、アプリケーションそのもののクラス名とインスタンス 名です。慣習的にアプリケーションのクラス名はプログラム名と同じになりま すが、最初の文字だけは大文字になります (例: Bitmap, Emacs) 。ただし、名 前が「 X 」で始まる一部のプログラムは、歴史的経緯により 2 番目の文字も大 文字になります (例: XTerm)。
リソースの世界に楽に入るため、例をいくつか試してみましょう。まずは xterm のウィンドウを開きます。たぶん既に 1 つは開いてあるでしょうし、 メニュー選択で開くこともできます。あるいは、進路を確かめるためにこのド キュメントの少し前に戻ってみてもよいでしょう! xterm のウィンドウへ以下 のようなコマンドを入力してみましょう:
xterm -background blue &
このコマンドを実行すると別の xterm が画面上に現われますが、今回の xterm は背景が青いはずです。「あれ、どうして」と思うかもしれません。し かし実際にそうなるのです。
次の例を試す前には、少し背景となる知識が必要です。さっき開いた xterm で 「 exit 」と入力し (これでウィンドウが閉じます)、コマンドを入力した元 のウィンドウに戻ります。そして次の操作を行います: Ctrl キーを押し、そ のままマウスの左ボタンを押します。次は中ボタンを試してください。それか ら右ボタンも。xterm のウィンドウは全て、実行中にオプションを試すことが できます。例えば右ボタンの場合には、ウィンドウのフォントを変えることが できます。このメニューの色に注意しておいてください。その上で、この例を 試してみましょう:
xterm -xrm 'xterm*fontMenu*background: green' &
今回は、ごく普通の xterm のウィンドウに見えます。しかし、Ctrl キーを押 したままでウィンドウ内部でマウスの右ボタンを押すと、このメニュー (先ほ どの例で「 fontMenu 」と言ったものです) は緑色になります。いったい何が起 こったのでしょうか? xterm のオンラインマニュアルを見ると、 -background や -font といったコマンドラインオプショ ンがあると思います。このオプションは X 上でウィンドウを立ち上げるとき に設定できるもので、xterm 専用のオプションの後に列挙します。 このような特別なオプションは X ツールキットオプションと呼ばれ、 X のほとんど全てのアプリケーションに適用されます。
本当に X のリソースの内部に立ち入るには、editres を実行す る必要があります。さあ、前に進んで editres (および遊ぶ対象に するサンプルプログラム)を実行しましょう:
xclock &
editres &
たぶん、表示されるのは何の変哲もない見栄えのシンプルな時計と、ほとんど
何も表示されていない editres のウィンドウでしょう。メインウィ
ンドウに表示されるのは、デスクトップ上の指定されたウィンドウのリソース
ツリーであり、プログラムの起動時には何もありません。したがって、まずは
ツリーを与えてみましょう。「 Commands 」メニュー上で左ボタンを押し、
「 Get Tree 」を選択します。すると、ウィンドウの最上部に
「 Click the mouse pointer on any toolkit client
(任意のツール
キットクライアント上でマウスポインタをクリックしてください) 」と表示さ
れるはずです。このメッセージには見た目以上の意味があって、X アプリケー
ションが全てツールキットクライアントというわけではないことを示していま
す (基本的なアプリケーションの大部分はツールキットクライアントですが、
そうでない場合にも普通、オンラインマニュアルには説明はありません) 。マ
ウスのカーソルは細い十字形にかわり、他のウィンドウでのクリックを待つ状
態になります。
この例では、まずは xclock をクリックしてみましょう。 editres のウィンドウに 2 つの項目が表示されるはずです。これら はツールキットが認識している設定可能なブランチ (枝) です。右下のブランチ (clock) をクリックしてみましょう。すると反転するはずです。ここで ``Commands'' から ``Show Resource Box'' を選択してください。すると上の 方に ".xclock.clock.unknown" と表示された別のウィンドウが現 われるはずです。どうだい!
これ以降、 xclock のメインウィンドウの設定オプションで遊ぶ ことができます。このリソースの一部をテストしていることを示すため、まず は一番下の ``Set Save File'' をクリックし、 /home/yourname/resources のようなファイル名を入力してください。 ここで ``foreground'' をクリックし、その隣の ``Enter Resource Value:'' プロンプトに ``blue'' を入力してください。それから一番下の ``Apply'' をクリックします。時計の回りの細い刻み目が青くなるはずです。 ``background'' に行き、 ``navajowhite'' (あるいは好みの色) を入力してく ださい。これも反映するはずです。ご覧になったように、このようにしてウィ ンドウ全体を格好良く設定することができます。しかし、別の xclock を起動した場合、これは変更をする前のただの xclock にしか見えないでしょう。このような変更を保存する必要が あるのです。
まず ``Save'' を、その次に ``Popdown Resource Box'' (機能は ``Close'' なので、実際のところ変な名前ですね)をクリックしてください。たった今生 成したファイルを (cat /home/yourname/resources あたりで) 見て みると、便利なことにこれらのリソースが正しい X ツールキットのフォーマッ トで書き出されているのが分かるかと思います。しかし、これだけでは嬉しく ありません。というのも、新しく xclock を起動してみればわかり ますが、立ち上がった xclock はすっぴん (デフォルト設定) のまま なのです。つまり、リソースをロードするという最後の仕上げが残っているの です:
xrdb -merge /home/yourname/resources
このコマンドは、たった今書き出したリソースを現在の X セッションの
X リソースデータベース (xrdb) にマージします。
すなわち、修正を行った X アプリケーションをこれ以降に呼び出すと、変更
が適用され、結びつけられたままになります。したがって、別の
xclock を実行すると、いつ実行しても今さっき設定したように格好
良くなります。ただ、xrdb は複雑なプログラムなので、次に進んだ
り、もう少しこれで遊ぶ前には、オンラインマニュアルを見るとよいでしょう。
本ドキュメントで前に挙げた、 X の起動時に自動的にリソースをロードするた
めの変更を .xinitrc
に行っている場合には、 X セッションの途中
に変更を行ったとき以外には xrdb のことを意識する必要はありま
せん。
ご覧のように、ここで設定オプションが多すぎることに気付かれたと思い ます。このような X の設定方法は、既に述べたように、ほとんど無限の可能 性を与えますが、同時に同じだけの混乱をもたらしてしまいます。X ツールキッ トイントリンシクス単独でのリソースの適用範囲のイメージをつかむためには、 viewres プログラムを実行し、これで少し遊んでみましょう。この プログラムは Xt ライブラリのリソースのツリーをグラフィカルに表 示します。
X のオンラインマニュアルを読むと、 X が理解するリソースを定義 するための正確な文法についての定義が比較的不明瞭なことに気付かれるでしょ う。これはかなり簡略化し、本質的な文法定義に分割することができます:
<プログラム><結合子><ウィジェット><結合子><ウィジェット><...><リソース>:<値>
これは本当に簡単なようには見えないかもしれませんが、実は簡単なのです。 さてここで、たった今説明したことに関して何か定義してみましょう。そうす れば、言っていることが結局分かるかと思います。もしそうしたければ、この セクションを読みながら次のセクションの例を眺めてもいいでしょう。
この定義における プログラム はリソースデータベース内でのアプ
リケーションの呼び出しです。これは xterm の呼び出しの場合は
XTerm
となり、emacs
テキストエディタの呼び出しの場合
には emacs
となります。あるいは、アプリケーションが
-name コマンドラインオプション付きで起動された時に与えられた、
ユーザ定義の名前になることもあります。このようにすると、異なる使われ方
をする複数の xterm に対して別々のリソースを定義することができ
ます。これは実に素晴らしいことです。
結合子 は、ウィジェット等を区切るための 2 種類の文字のどちら
かになります。.
(ピリオド) を使った場合には、強い結合 (tight
binding) が得られます。これはあるウィジェットがウィジェット階層内
で他のウィジェットのすぐ上か下になることを意味します。これは指定方法の
中でも最も高い優先度を持っています。 *
(アスタリスク) を使った場
合には、緩い結合 (loose binding) が得られます。これは階層内で任
意の数のウィジェットを飛ばし、マッチすることができる次の定義されている
ウィジェットにマッチしようとします。
ウィジェット エントリはウィジェットツリー内の要素であり、特定
されているものから、されていないものの順に並んでいます。要素はウィジェッ
トツリー内に現われ、 editres で見ることができます。任意の単独
のウィジェットエントリは ?
(疑問符) で置換えることができ、 1 つの
ウィジェット定義を飛ばしたり、可能な任意のウィジェット要素とマッチさせ
ることができます。
リソース 要素は必ず指定しなければならず、?
文字で置
き換えることはできません。これは階層内で最も特定されている要素であり、
定義する実際の色や定義する実際のフォント等のような要素を通常は含んでい
ます。実際、この定義中でリソースより前の要素は全て取り除き、アスタリ
スク 1 つで置き換えることができますが、定義する実際のリソースはなけれ
ばいけません。アスタリスクと最も特定されているリソース名だけを指定した
場合(*background: blue
等)、可能であれば X は全てのクライアン
トに対してそのリソースをグローバルに定義しようとします。
コロンの後は値エントリです。このエントリにはリソースに設定す るもの (フォント名や色の値など) を定義します。この値は (文脈に従って) 真偽 値や数値、テキストデータ型として指定することができます。正しいリソース 定義においては、この値エントリも省略することはできません。
.Xdefaults と呼ばれる、ホームディレクトリに置くことができ る魔法のファイルがあります。リソースファイルの行を最後の例から抜き出し てホームディレクトリの .Xdefaults にコピーすると、 xclock をもう二度と設定しなくてもよくなります! これはこのユー ティリティのとても良い例ではないかもしれませんが、的を射ているとは思いま す。このファイルには X で実行する全ての種類のプログラムに対して、思い のままのオプションを詰め込むことができ、適切に注意すれば、必要な時に簡 単に元の状態に戻り、少しだけ変更を行うこともできます。しかし、大量の変 更を行うことと、 editres を使って細々としたオプションをたくさ ん見つけ出すことは、大変面倒で苦痛を伴う作業です。実際のところ、これは 大変すぎる作業であることが多いです。また、システムに用意されているリソー スの大部分はすぐに使える状態ですし、きちんと整理されており、プログラム ごとにまとめられています。
/var/X11R6/lib/app-defaults ディレクトリには、X ツールキット プログラムにちなんだ名前が付いているファイルがたくさんあります。これら のファイルを調べれば、それぞれに非常にたくさんの設定オプションがあるこ とが分かると思います。非常にたくさん! これらののファイルからオプション の全てを .Xdefaults に入れたいとは思わないでしょう。こ れらを全部扱うのは実に面倒な作業です。これらの値はデフォルト値なので、 これらの値から特定の設定について何を変えたいのか決めることができます。
以下に .Xdefaults ファイルから抜き出した例を示します。リソー
ス定義ファイルについてまだ説明していないことがいくつかあるので注意して
ください。行が「 !
」 (感嘆符) で始まる場合、その行はコメントとし
て扱われ、その行の残りの部分は無視されます。行が
「 #include ファイル名
」で始まる場合、その行は
インクルードディレクティブであり、リソースをロードするとき、
リソース中のこの位置に別のファイルがマージされます。これを使って、リソー
スファイルが膨れあがるのを防ぐことができます。以下に例をいくつか示しま
す:
! Default resources for me@localhost xterms
! start with the generic, move to the specific...
*Dialog*Text*font: -b&h-lucida-medium-r-*-*-12-*-*-*-*-*-*-*
*dialog*value*background: white
*Dialog*Label*font: -adobe-helvetica-bold-r-*-*-12-*-*-*-*-*-*-*
*MenuButton*font: -adobe-helvetica-medium-r-*-*-12-*-*-*-*-*-*-*
*MenuButton*background: grey80
*MenuButton*foreground: black
*Label.font: -adobe-helvetica-medium-r-*-*-10-*-*-*-*-*-*-*
*Label*shadowWidth: 1
*SmeBSB.font: -adobe-helvetica-bold-r-*-*-12-*-*-*-*-*-*-*
*SimpleMenu*font: -adobe-helvetica-medium-r-*-*-10-*-*-*-*-*-*-*
*OptionMenu*font: -adobe-helvetica-medium-r-*-*-10-*-*-*-*-*-*-*
*Command.font: -linotype-helvetica-bold-r-narrow-*-12-*-*-*-*-*-*-*
*commandBox*font: -b&h-lucida-bold-r-*-*-12-*-*-*-*-*-*-*
*Toggle.font: -adobe-helvetica-bold-o-*-*-12-*-*-*-*-*-*-*
*Form.background: grey70
*TransientShell*Dialog.background: grey70
*Scrollbar.Foreground: grey80
*Scrollbar.Background: grey50
*Scrollbar*cursorName: top_left_arrow
*Scrollbar*width: 16
*shapeStyle: Rectangle
*XlwMenu.shadowThickness: 1
*shadowWidth: 1
! xterm stuff
xterm*scrollbar.background: grey40
xterm*foreground: grey90
xterm*background: grey25
xterm*cursorColor: white
xterm*visualbell: on
! rxvt stuff (a quicker, better xterm)
rxvt*color12: steelblue
rxvt*color15: white
rxvt*color9: rgb:ff/7f/5f
rxvt*foreground: grey90
rxvt*background: grey10
rxvt*cursorColor: white
rxvt*font: lucidasanstypewriter-12
rxvt*loginShell: false
rxvt*saveLines: 1024
rxvt*title: shell
rxvt*geometry: 80x25
! Make Xman just a little bit more sane
xman*topBox: false
xman*background: lightsteelblue
xman*foreground: black
! xcalc is too bland by default...
xcalc*Command.font: -adobe-helvetica-bold-r-*-*-10-*-*-*-*-*-*-*
xcalc*customization: -color
! Disallow the <blink> tag in Netscape
Netscape*blinkingEnabled: False
! Merge other resources (example)
# include $HOME/.otherXresources
KDE のユーザに対して、X のリソースに関する注意を一言述べておきます。 コントロールパネルに設定がありますが、これはアプリケーションにおける X のリソース設定を全て上書きします。これは便利な機能でもありますが、リソー スを苦心して設定した人にとってはうっとうしい機能でもあります。コントロー ルパネルを開き、``Fonts etc.'' セクションを探してください。ここに ``Apply style to non-KDE apps'' というオプションがあります。これをオン にすると、KDE が設定したルック & フィールが全てのプログラムに適用さ れます (これを通知するために X を再起動する必要はありません)。この機能 をオフのままにしていれば、リソースは以前に設定した状態のままとなります。
先に述べたシステム全体用の app-defaults ディレクトリとちょ
うど同じように、ユーザもリソースファイルのディレクトリを作成することが
できます。プログラムごとにリソースファイルは 1 つです。単にディレクト
リを作成し (このドキュメントの例ではホームディレクトリの
app-defaults ディレクトリを使います)、環境変数 XAPPLRESDIR
が
このディレクトリを指すように設定します。この変数は .xinitrc
の先頭部分で設定するのが良いでしょう。設定では、
export XAPPLRESDIR=$HOME/app-defaults
のような行を追加します
(リソースファイルをホームディレクトリ下の app-defaults ディレ
クトリに置く場合)。
これにより、X のプログラムを起動すると必ず、プログラムのリソース名と同
じ名前を持つファイルが、システム全体用のディレクトリとちょうど同じよう
にこのディレクトリから検索されます。この名前は .Xdefaults
ファ
イルで使われているクライアント名です。
例えば、XTerm というファイルに *background: gold
と
いう行があると、全ての xterm の起動時の背景色はデフォルトで
金色になります。これは .Xdefaults
だけを使うのとは別の選択肢で、
どの設定を後で行うか決めようとしている時や、特定のプログラムの
設定を探す時には分かりやすい方法です。しかし、.Xdefaults
にも
まだ使い道はあります。このファイルは 1 つのプログラムに限定されないリ
ソースを設定する際に便利です。これは例えば、アプリケーションに関係なく
特定の種類のボタンを全て青色に変える修正をしたい場合です。