Terminal-Emulator
終端仿真器、視窗管理器和 X 伺服器程序之間的伺服器-客戶端關係是什麼?
- 在APUE(見下圖)中,終端仿真器程序和視窗管理器(例如openbox)程序如何通信?終端仿真器程序是基於 Unix 域套接字的視窗管理器程序的客戶端嗎?
- X 伺服器程序與終端仿真器程序和視窗管理器程序有什麼關係?具體來說:
xlsclients
輸出包含lxterminal
. 這是否意味著終端仿真器程序是 X 伺服器的客戶端?$ xlsclients -a | grep -i lxterminal ocean lxterminal
xlsclients
輸出不包含視窗管理器程序。這是否意味著視窗管理器程序不是 X 伺服器的客戶端?$ xlsclients -a | grep -i openbox $
xlsclients
是一個簡單的應用程序,它列出了在頂部視窗上設置的WM_CLIENT_MACHINE
和WM_COMMAND
屬性(即,作為根視窗的子視窗或具有WM_STATE
屬性的視窗)。這就是它所做的一切。沒有魔法。
例如,我正在使用我自己的視窗管理器,它打開了一個
InputOnly
(不可見)視窗作為根視窗的子視窗,將其用於ewmh的wm 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 上設置屬性來進行通信。該協議在icccm和ewmh中進行了描述。請注意,客戶沒有“擁有”視窗;任何客戶端都可以在任何視窗上進行任何操作,包括但不限於設置和獲取任何屬性。