ターミナルエミュレータ、ウィンドウマネージャ、およびXサーバープロセス間のサーバーとクライアントの関係は何ですか?

ターミナルエミュレータ、ウィンドウマネージャ、およびXサーバープロセス間のサーバーとクライアントの関係は何ですか?
  1. APUE(下図参照)では、ターミナルエミュレータプロセスとウィンドウマネージャ(openboxなど)プロセスはどのように通信しますか?ターミナルエミュレータプロセスは、Unixドメインソケットベースのウィンドウマネージャプロセスのクライアントですか?
  2. Xサーバープロセスは、ターミナルエミュレータプロセスとウィンドウマネージャプロセスとどのように関連していますか?具体的には:

    xlsclients出力にが含まれていますlxterminal。これは、ターミナルエミュレータプロセスがXサーバー上のクライアントであることを意味しますか?

    $ xlsclients -a |  grep -i lxterminal
    ocean  lxterminal
    

    xlsclients出力にはウィンドウマネージャプロセスは含まれません。これは、ウィンドウマネージャプロセスがXサーバーのクライアントではないという意味ですか?

    $ xlsclients -a |  grep -i openbox
    $
    

ここに画像の説明を入力してください。

ベストアンサー1

xlsclientsWM_CLIENT_MACHINEトップウィンドウ(ルートウィンドウのサブウィンドウまたはプロパティを含むウィンドウ)に設定とプロパティを一覧表示する簡単なアプリケーションです。WM_COMMANDWM_STATE

それがすべてです。魔法はありません。

InputOnlyたとえば、私は(目に見えない)ウィンドウをルートウィンドウの子として開く私のウィンドウマネージャを使用しています。ヤンク~の気象検査。これらの2つのプロパティを設定すると、期待したことが起こります;-)

$ xprop -id 0x400001 -f WM_CLIENT_MACHINE 8s -set WM_CLIENT_MACHINE kgbvax
$ xprop -id 0x400001 -set WM_COMMAND /sbin/reboot
$ $ xlsclients
kgbvax  /sbin/reboot
...

しかし、あなたの質問に答えるには、次のようにします。

ターミナルエミュレータプロセスとウィンドウマネージャ(openboxなど)プロセスはどのように通信しますか?ターミナルエミュレータプロセスは、Unixドメインソケットベースのウィンドウマネージャプロセスのクライアントですか?

どちらもX11サーバーのクライアントであり、通常はXSendEvent(3)を使用してクライアントメッセージを送信し、ウィンドウ内のプロパティを設定して通信します。契約内容は以下の通りです。OOそしてヤンク。クライアントはウィンドウを「所有」しません。すべてのクライアントは、ウィンドウのプロパティの設定とインポートを含みますが、これらに限定されず、すべてのウィンドウですべての操作を実行できます。

おすすめ記事