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


35

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

私はプログラミングを始めたばかりで、いらいらします。だから私はそれに飛び込んでいます。今、私はICCCMを読んでいます。もっと学びたいと思っています。ただし、このドキュメントは、私よりも(方法)を知っている大衆を対象としています。それで、私はいくつかの情報に出くわしました、そして、私はいくつかの説明を得たいです。

ICCCM引用のセクション2

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

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

次に、X11、Xorg、X Server、X Window Manager、またはその両方への参照がしばしばあります。紛らわしい:X11はXorgとX Window Managerを含むバンドルですか?もしそうなら、このX11バンドルには他に何かありますか?

Xは、マウスやキーボード、またはその他の種類の入力も必要です。Xサーバーの機能のこの部分もありますか?X Window Managerはディスプレイのみを厳密に監視していますか?

最後に、上記の引用では、クライアントが互いに通信しているかどうかについても言及しています。これは、学習目的で少し使用したD-Busを思い出しました。D-Busでは、ウィンドウイベントをトリガーすることもできます。それは、プログラムがどのように相互に通信するべきかに関して少し混乱させられます:* X Serverを使用して、またはD-Busを使用して相互作用するプログラムの違いは何ですか?*

この情報がなんとなくあいまいなままであるのは残念ですが、学ぶのが難しくなりますが、これに少し光を当てることができれば幸いです:)ありがとう。

回答:


61

ここで5つの質問をしているので、5つの質問をする方が良いかもしれません☺しかし、私は飛び込みます:

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

  2. X11は、Xプロトコルの「メジャーバージョン」であり、当初から進化しています。X11は最新のプロトコルであり、最も一般的です。(Xorgは、Xサーバー、Xライブラリ、およびクライアントのコレクションの実装であり、すべてX11を使用しています。他の実装もあります。 )

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

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

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


よかった、ありがとう!それは本当に役に立ちます。5つの質問について:その場合のプロトコルはわかりませんが、管理者が私にそれらを分割することを望んでいる場合、私はそれについて聞きます。私は個人的にそれを1つのドキュメントに収めたいと思っており、5つの質問をタイトルのサブ質問として見ています。再度、感謝します。
ベンジャミン

プロトコルをホッピングしないことのポイントは、アプリケーション(「クライアント」)が同じホストで実行する必要がないようにX Window Systemが設計されていることです。つまり、別のマシンにログインして、ローカルアプリケーションのように。別のプログラムが「あなたのプロセスIDとは何か、だから私はあなたと直接話をすることができる」と尋ねた場合、この質問に正しく答える方法はありません。
サイモンリヒター

Xサーバーが共有するリソースが、1つ以上のモニターと2つ以上の入力デバイス(キーボード、マウス)で構成されるディスプレイにならないようにしたい場合があります
hildred

5つの質問をすべて一緒にすれば間違いなく役に立ちます。ありがとうございました。
ハーベイ

@hildredキオスク構成のタッチスクリーンの場合、入力デバイスは1つしかありません。
シャドゥール
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.