.Xresourcesと.Xdefaultsの違いは何ですか?


59

これらの2つのファイルは同じ機能を持っているようです。もしあれば、2つの違いは何ですか?

回答:


68

~/.XdefaultsXリソースを保存する古い方法です。このファイルは、Xlibプログラムが起動するたびに再読み込みされます。X11をネットワーク経由で使用する場合、ファイルはプログラムと同じファイルシステムに存在する必要があります。

~/.Xresourcesより新しいです。それがロードされるxrdbRESOURCE_MANAGERX11のルートウィンドウのプロパティ。プログラムがリソースを検索するたびに、から直接読み取られRESOURCE_MANAGERます。

このプロパティが存在しない場合、Xlibは.Xdefaultsすべてのプログラム起動時に古い読み取り方法に戻ります。ほとんどのディストリビューション~/.Xresourcesは、存在する場合は自動的にロードされるため、手動で.Xdefaults実行したことがない場合でも無視されることに注意してくださいxrdb

新しいメソッドの利点は、xrdb一度呼び出すだけで十分であり、ローカルまたはリモートに関係なく、このディスプレイで実行されているすべてのプログラムがリソースを利用できることです。(名前~/.Xresourcesは単なる慣習です。xrdb任意のファイルをロードするために使用できます.Xdefaults。)

XlibプログラミングマニュアルP.441:

X11R2より前は、Xリソース設定はユーザーのホームディレクトリの.Xdefaultsファイルから読み取られ、オプションでXクライアントが実行されているマシンで読み取られたため、複数のファイルを維持するのは困難でした。

その後、xrdbプログラムは、.Xresourcesのユーザーリソース設定を現在のXサーバーのルートウィンドウのXA_RESOURCE_MANAGERプロパティに保存するようになり、同じサーバーに接続されているすべてのクライアントがそれらにアクセスできるようになりました。ユーザーがxrdbを呼び出してプロパティを設定していない場合、.Xdefaultsが読み取られます。

ウィキペディア

[...] Xリソースは、すべての画面に適用されるか特定の画面に適用されるかに応じて、2つの標準の場所に保存されます。

  • 画面0のルートウィンドウのRESOURCE_MANAGERプロパティ
  • 任意の画面のルートウィンドウのSCREEN_RESOURCESプロパティ

それで終わりではありません。

  • また、$XENVIRONMENT変数もあり、設定されていない場合はデフォルトになります。これは、同じ方法で使用されているが、常に関係なく、かどうかの読みが存在します。ファイルを使用して、一部の設定をマシン固有に保ちながら、グローバル設定を使用できます。~/.Xdefaults-hostname.XdefaultsRESOURCE_MANAGER.Xdefaults-hostnamexrdb

以下にリストされている項目#4と#5は両方とも、純粋なXlibプログラムでのみ使用されるように見えます。GTK3や他のツールキットでは使用されません。

  • 4番目の場所は、$XAPPLRESDIR環境変数が指すディレクトリです。(奇妙なことに、変数が設定$HOMEされていない場合はデフォルトとして使用されます。)プログラムが起動されると、次のファイルのいずれかが存在するかどうかが調べられます(ファイル名はプログラムのクラス名と同じです):

    • $XAPPLRESDIR/$LC_CTYPE/XTerm
    • $XAPPLRESDIR/language/XTerm
    • $XAPPLRESDIR/XTerm

    (最初のコンポーネント以外のすべてを除去languageすること$LC_CTYPEにより派生します。たとえば、en_US.utf-8en。)

  • 第五の位置は、システム全体「のapp-defaults」ディレクトリです。繰り返しますが、app-defaultsディレクトリは、プログラムにちなんだ名前のファイルがある場合、プログラムの起動時にチェックされます。たとえば、XTerm(Arch Linux)では次を使用します。

    • /etc/X11/$LC_CTYPE/app-defaults/XTerm
    • /etc/X11/language/app-defaults/XTerm
    • /etc/X11/app-defaults/XTerm
    • /usr/share/X11/$LC_CTYPE/app-defaults/XTerm
    • /usr/share/X11/language/app-defaults/XTerm
    • /usr/share/X11/app-defaults/XTerm

    app-defaultsファイルは通常/usr/share、プログラム自体とともにインストールされます。管理者のオーバーライドはに行きます/etc


上記のすべての詳細は、X.orgツールキットのドキュメント(記事X Toolkit Intrinsics-C Language Interfaceのセクション「Resource Databaseのロード」)で詳しく説明されています。

残念ながら、私は(読み:恐ろしく時代遅れの)彼らは今年2012年にしかし、歴史のために無関係である主な理由は、Xのリソースを記述する任意の最近のユーザーガイドを見つけることができなかった情報を、あなたが読むことができますX11 R3とR4のためのX Window SystemのユーザーガイドをX Window Systemセクション9:リソースの設定(181ページから始まる)の。


すばらしい答えですが、すべての実装が規則に正しく従っているわけではないことに注意してください。たとえば、SunOS 4およびSolaris 6のアプリは、後で "xrdb"を明示的に実行しない限り、.Xdefaultsの変更を認識しないことを覚えています。また、アプリとXサーバーが異なるホストで実行されていると、奇妙なことがあります。ローカルファイルを読み取るアプリもあれば、Xサーバーからデータベースを読み取るアプリもあります。
デビッドC. 14

1
@DavidC:Xdefaultsの動作上記のルールに従っています。場合xrdbしているこれまでのログイン以来、このXディスプレイのために実行されて-であるXのrootプロパティが存在する場合、 -その後、Xlibはまったくもう.Xdefaultsファイルを使用しません。
grawity

1
それは理にかなっている。ただし、〜/ .Xresourcesの内容を読み取り、xrdbデータベースを無視する、明らかに壊れたアプリがまだ多数あります。異なるホスト(異なる.Xresourcesを持つ)にログインして、アプリがローカルで実行したときのようにアプリのコンテンツを表示していないことがわかった場合、これは非常に迷惑です。
デビッドC. 14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.