Linuxでは、プロセスはカーネルを介して互いに通信します。私が知っている限り、X11はサーバー、つまりプロセスであることを意味します。ローカルプロセスはUnixドメインソケットを使用してX11と通信し、非基本プロセスはTCPソケットを使用するという内容をどこかで読みました(ソースを覚えておらず、後で提供します)。 X11サーバーとの通信プロトコルはX11プロトコルです。
今私は次から読んだ。スタックオーバーフロー私たちが使用するエンドユーザープロセスは、実際にはX11と直接通信するのではなく、デスクトップ環境とWindows管理者を介して通信します。
だから今は、クライアントプロセス、デスクトップ環境、ウィンドウマネージャがどのように互いに通信しているのかわかりません。 (デスクトップ環境とウィンドウマネージャがプロセスかどうかはわかりません。)
答え1
X11は、入力装置を聞いて画面に書き込む作業を行う処理である。 (これを処理する方法は別の質問であり、非常に複雑です。)プロセスは、構成に応じてUnixまたはTCPソケットを介してX11と通信します(Unixソケットの場合は通常ソケットファイルがあります/tmp/.X11-unix
)。処理するすべてのプロセス
ウィンドウマネージャは、ソケットを介してXプロトコルを使用してX11とも通信する別のプログラムです。ボタンとタイトルバーが提供する別々のAPIセットを使用するか、グローバルショートカットに応答します(最新のシステムでは通常Ctrl-Alt-Delが処理されます)。ウィンドウマネージャは、実際に直接コマンドを発行するのではなく、他のXプログラムにコマンドを発行します。プログラムが特別な処置を取った場合は、コマンドを無視できます。 (合成ウィンドウマネージャの場合、アプリケーションの仲介者として機能するXサーバーの実際のグラフィックレンダリングも処理するため、状況はより複雑です。)ここで発生するすべての通信は、Xプロトコルを使用するソケットを介して行われます。
デスクトップ環境は、さまざまなタスクを実行するプログラムのセットです。通常、ウィンドウマネージャには、一部のグラフィカルコンフィギュレータとユーティリティ、デスクトップと統合されたファイルマネージャ、さまざまなステータスアップデートを表示するシステムトレイなどが含まれます。これらのほとんどは特に神秘的なものではなく、Xサーバーにはより多くのXプログラムが提供されるだけです。互いに通信する必要がある場合は、通常、ソケットをバックエンドとして使用する独自のプロトコルを使用します。最近は、独自のプロトコルを書くアプリケーションから抜け出しましたdbus
。