web-dev-qa-db-ja.com

X、Xorg、D-Bus:違いは何ですか?

GUIプログラミングで特定のことを行うことを学習する過程で(たとえば、アプリケーション用に画面上のスペースを予約するなど)、ウィンドウマネージャー(通常はLinux上のX11)についてさらに学ぶ必要があります(ディストリビューションさえあるかどうかわかりません) 、X11以外のものを使用しますが、 Wayland についてはまだ聞いていませんが、まだ実装されていません。)

私はプログラミングに非常に慣れておらず、せっかちです。だから私はそれに飛び込んでいます。現在、私はICCCMを読んでいます。詳細を知りたいと思っています。ただし、このドキュメントは、私より(方法)をよく知っている大衆を対象としています。だから私はいくつかの情報に出くわしました、そして私はいくつかの明確化を得たいと思います。

セクション2 ICCCMの引用:

所有者と要求者の間で転送されるすべてのデータは、通常、Xバージョン11環境のサーバーを経由して送信される必要があることに注意してください。クライアントは、別のクライアントが同じファイルを開いたり、直接通信したりできると想定することはできません。他のクライアントは、完全に異なるネットワークメカニズムを使用してサーバーと通信している可能性があります(たとえば、1つのクライアントがDECnetで、他のクライアントがTCP/IPである場合があります)。したがって、データへの間接参照(ファイル名、ホスト名、ポート番号など)を渡すことは、両方のクライアントが明確に同意する場合にのみ許可されます。

私が理解している限り、X Window ManagerはTop of X Serverに基づいて構築されています(Wikipediaに感謝)。上記の引用では、クライアントはDECnetまたはTCP/IPを使用してサーバーと通信できると述べています。これまでのところ、「サーバー」は品詞だと思っていましたが、今は疑問です。Xサーバーは「Webサーバー」のようなサーバーですか?その機能/定義をどのように理解すればよいですか?

次に、X11、Xorg、Xサーバー、Xウィンドウマネージャーへの参照がよくあります。それは混乱します:X11はXorgとX Window Managerを含むバンドルですか?もしそうなら、このX11バンドルには他に何かありますか?

Xにはマウスやキーボード、またはその他の種類の入力も必要です:Xサーバーの機能のこの部分もですか? X Window Managerは厳密に表示のみを管理していますか?

最後に、上記の引用は、クライアントが互いに通信しているかどうかに言及しています:これは、学習のために少し使用したD-Busを思い出させました。 D-Busを使用すると、ウィンドウイベントをトリガーすることもできます。そのため、プログラム同士の通信方法について少し混乱します。*Xサーバーを使用して対話するプログラムとD-Busを使用して対話するプログラムの間にはどのような違いがありますか? *

この情報がどういうわけか曖昧なままであるのは残念です、それは学ぶのを難しくします、しかしうまくいけばこれにいくつかの光をもたらすことができます:)ありがとう。

36
Benjamin

ここでは5つの質問をしているので、5つの質問をするほうがよいかもしれません。

  1. Xはサーバーであり、特定のプロトコル(Xプロトコル)を話す着信接続をリッスンし、応答を発行するプロセスである「Webサーバー」と比較できます。接続はXクライアントから行われます。Xクライアントは、ローカルホストまたはネットワーク経由でアクセスされるリモートホスト上にあります。

  2. X11は、Xプロトコルの「メジャーバージョン」であり、当初から進化しています。 X11は最新のプロトコルであり、最も一般的です。 (XorgはXサーバー、Xライブラリ、およびクライアントのコレクションの実装であり、すべてX11を使用しています。他にも実装があります。ほとんど機能しなくなったXFree86、Hummingbird Exceedなどの商用のもの、Mac OS Xで実行されるXQuartzなどのフォークです。 )

  3. 「ウィンドウマネージャ」はウィンドウを管理するXクライアントです。通常は、ベベル/ボーダー、ドロップシャドウ、ボタンを含むメニューバーなどでウィンドウを装飾し、ウィンドウ配置のロジックを処理します。ドラッグ、サイズ変更、再配置などのウィンドウをサポートします。

  4. Xは入力を必要とし、それをカーネルで管理する責任を共有します。歴史的に、Xは多くのハードウェア管理を行いました。現代では、Linuxプラットフォームでは、Xは徐々に「小さく」なり、この責任をLinuxカーネルに委任しています。この利点は次のとおりです。Xコードベースが小さい。カーネルとXが同じものを管理しようとする「クロスワイヤー」の数が少なくなります。 (これの例は、Linuxイベントインターフェースであり、マウスなどからのイベントがカーネルとそのドライバーによって解釈され、Xサーバーによって消費される/dev/input/event*の標準インターフェースに変換されます)。他のプラットフォーム(BSD、Solaris)では、Xは依然としてかなりモノリシックであることに注意してください。

  5. プロセスが相互に通信する方法は数多くあります。 XクライアントはXプロトコルを介して対話できると思います(たとえば、従来のXウィンドウマネージャーは、他のクライアントがウィンドウを描画するタイミングを知って装飾する必要があります。ページャーは、ウィンドウのサイズや位置が変わるときを知っておく必要があります。ページャーにそれを反映してください)。 D-Busは、他の方法の欠点に対処するために開発された最新のプロセス間通信(IPC)テクノロジです。 X固有ではありません。

65
jmtd