Window-Manager
讀取非客戶區的 X 視窗屬性
如何讀取 X 視窗非客戶區(視窗管理器視窗)的屬性?
XChangeProperty
我在我的 C 程序中設置了 X 屬性。通過滑鼠使用xprop
和選擇非客戶區(我的意思是:視窗的標題欄)時,我的應用程序創建的視窗的屬性不會顯示。我測試了這兩種情況。使用時xprop 8s name_of_non_registered_property
和xprop 8s name_of_registered_property
消息不同,所以我更正創建XAtom。我只在 Plasma5.15 上測試 xprop(KWin 在 X.org 下工作)
我正在混合 GTK+2 和 XCB(或 XLib)程式碼。當使用
XListProperty
,XGetAtomName
來自先前呼叫先前函式的元素和XGetAtomName
put 到puts
(C stdlib) 的結果時,我的原子的名稱是可見的。第一次呼叫主循環時,可能是 GTK 混亂?在將我的屬性添加到它之前,我意識到了視窗。我認為,這與其說是系統問題,不如說是程式問題。
> xwininfo -all -root .... 0xba00001 "program": ("program" "Program") 10x10+10+10 +10+10 1 child: 0xba00002 (has no name): () 1x1+-1+-1 +9+9 ... >xprop -id 0xba00001 WM_CLASS(STRING) = "program", "Program" WM_COMMAND(STRING) = { "program" } _NET_WM_USER_TIME_WINDOW(WINDOW): window id # 0xba00002 _KDE_NET_WM_USER_CREATION_TIME(CARDINAL) = 29562975 WM_CLIENT_LEADER(WINDOW): window id # 0xba00001 _NET_WM_PID(CARDINAL) = 25223 WM_LOCALE_NAME(STRING) = "pl_PL.UTF-8" WM_CLIENT_MACHINE(STRING) = "linux-rvnb" WM_NORMAL_HINTS(WM_SIZE_HINTS): program specified size: 10 by 10 >xprop -id 0xba00002 >
此命令列印所有子項:
xwininfo -all -root
並非所有視窗管理器都使用根視窗來顯示背景。點擊非客戶區將顯示有關顯示背景的視窗的資訊。要顯示有關根視窗的資訊,請使用:
xprop -root
如果您正確設置了一個原子,
xprop
則可以讀取它。命令中的格式部分xprop
不是必需的:xprop name_of_registered_property
您可能必須遍歷所有孩子才能找到帶有您的原子的視窗。
如果您沒有編寫 wm 程式碼,則應忽略標題欄。它們是 wm 內部人員,而不是客戶端,並且可能未註冊事件。