Tôi đang cố gắng tìm một cửa sổ chưa được ánh xạ trên máy chủ X của mình để ánh xạ lại và gửi cho nó một số gợi ý EWMH . Vì cửa sổ không được ánh xạ nên tôi không thể sử dụng EWMH để hỏi người quản lý cửa sổ trực tiếp. Vì vậy, tôi đang cố gắng để có được nó thông qua Xlib, nhưng tôi đang gặp vấn đề với nó. Toàn bộ API rất khó hiểu đối với tôi.
Tôi đang sử dụng trình bao bọc Xlib của Python . Bây giờ hãy xem đoạn mã Python sau:
import subprocess
from time import sleep
from ewmh import EWMH
subprocess.Popen(['urxvt']) # Run some program, here it is URXVT terminal.
sleep(1) # Wait until the term is ready, 1 second is really enought time.
ewmh = EWMH() # Python has a lib for EWMH, I use it for simplicity here.
# Get all windows?
windows = ewmh.display.screen().root.query_tree().children
# Print WM_CLASS properties of all windows.
for w in windows: print(w.get_wm_class())
Đầu ra của kịch bản là gì? Một thiết bị đầu cuối URXVT đã mở và một cái gì đó như thế này:
None
None
None
None
('xscreensaver', 'XScreenSaver')
('firefox', 'Firefox')
('Toplevel', 'Firefox')
None
('Popup', 'Firefox')
None
('Popup', 'Firefox')
('VIM', 'Vim_xterm')
Nhưng khi tôi chạy lệnh này và bấm vào thiết bị đầu cuối đã mở:
$ xprop | grep WM_CLASS
WM_CLASS(STRING) = "urxvt", "URxvt"
Điều tương tự là với tài sản WM_NAME .
Vì vậy, cuối cùng một câu hỏi: Tại sao không có chuỗi "URxvt" trong đầu ra của tập lệnh?