Terminal-Emulator

終端仿真器、視窗管理器和 X 伺服器程序之間的伺服器-客戶端關係是什麼?

  • December 5, 2018
  1. 在APUE(見下圖)中,終端仿真器程序和視窗管理器(例如openbox)程序如何通信?終端仿真器程序是基於 Unix 域套接字的視窗管理器程序的客戶端嗎?
  2. X 伺服器程序與終端仿真器程序和視窗管理器程序有什麼關係?具體來說:

xlsclients輸出包含lxterminal. 這是否意味著終端仿真器程序是 X 伺服器的客戶端?

$ xlsclients -a |  grep -i lxterminal
ocean  lxterminal

xlsclients輸出不包含視窗管理器程序。這是否意味著視窗管理器程序不是 X 伺服器的客戶端?

$ xlsclients -a |  grep -i openbox
$

在此處輸入圖像描述

xlsclients是一個簡單的應用程序,它列出了在頂部視窗上設置的WM_CLIENT_MACHINEWM_COMMAND屬性(即,作為根視窗的子視窗或具有WM_STATE屬性的視窗)。

這就是它所做的一切。沒有魔法。

例如,我正在使用我自己的視窗管理器,它打開了一個InputOnly(不可見)視窗作為根視窗的子視窗,將其用於ewmhwm check。如果我在上面設置這兩個屬性,預期的事情就會發生;-)

$ 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) 發送客戶端消息並在 Windows 上設置屬性來進行通信。該協議在icccmewmh中進行了描述。請注意,客戶沒有“擁有”視窗;任何客戶端都可以在任何視窗上進行任何操作,包括但不限於設置和獲取任何屬性。

引用自:https://unix.stackexchange.com/questions/486063