xlsclients
là gần (và một phần tiêu chuẩn của X), nó liệt kê các máy khách của máy chủ X. Nhưng , có thể không có ánh xạ 1: 1 giữa những gì bạn coi là "ứng dụng" và thứ X coi là "máy khách". Ví dụ chạy LyX duy nhất của tôi tiêu thụ 13 ứng dụng khách, ví dụ, nếu tôi sử dụng xlsclients -l
(đầu ra dạng dài) tôi chỉ có thể thấy một trong số họ có "Tên biểu tượng" được xác định, nhưng đây chỉ là một gợi ý. Ngoài ra, vì nó sử dụng XQueryTree()
nên nó có thể bỏ lỡ một số cửa sổ (nó không tìm thấy bất kỳ xpdf
cửa sổ nào tôi mở).
Nó cũng không cung cấp nhiều thông tin, những gì bạn có thể làm là sử dụng xlsclients -l
để lấy id cửa sổ và truy vấn từng cửa sổ xprop -id $ID
. Để biết thêm chi tiết về một cửa sổ, hãy sử dụng xwinifo
, mặc dù nó quan tâm đến "các cửa sổ" không giống với ứng dụng khách hoặc ứng dụng:
xwininfo -root -children
xwininfo -root -tree # indented view
Tùy thuộc vào trình quản lý cửa sổ của bạn, bạn có thể kiểm tra các thuộc tính cửa sổ nhất định (ví dụ: _NET_xxx
hoặc _NET_WM_xxxx
thuộc tính ) để xác định xem có thứ gì đó là "ứng dụng" không. Nếu máy khách trình quản lý cửa sổ hoặc thư viện GUI đặt nó (bất kỳ cái nào hiện đại nên) thì thuộc _NET_WM_PID
tính là cách đơn giản nhất ( mặc dù không hoàn hảo ) để liên kết một PID với một cửa sổ cụ thể. Tôi không biết về một công cụ liên kết tất cả các phần này lại với nhau.
Tôi sử dụng trình quản lý cửa sổ FVWM, tôi có thể nói chuyện trực tiếp với nó bằng cách sử dụng FvwmCommand
, ví dụ: FvwmCommand -i1 send_windowlist
hiển thị cho tôi danh sách các cửa sổ. Đề xuất sử dụng của @Arkadiusz wmctrl
có vẻ như là một cách bất khả tri và quản lý cửa sổ để làm điều tương tự.
Một mẹo nữa là truy vấn cửa sổ gốc _WIN_CLIENT_LIST
, thông qua bash
:
$ xwininfo -root
xwininfo: Window id: 0x69 (the root window) (has no name)
[..]
$ IFS=",= " read -a win < <(xprop -notype -id 0x69 32x _WIN_CLIENT_LIST )
$ for ((ww=1; ww<${#win[*]}; ww++)); do
printf "%i %s\n" $ww ${win[$ww]};
xprop -id ${win[ww]} -notype _NET_WM_PID WM_NAME WM_CLASS \
WM_ICON_NAME WM_CLIENT_LEADER;
done
Điều này hoàn toàn khớp với những gì WM của tôi liệt kê dưới dạng cửa sổ (không có những cái tôi đã cấu hình để loại trừ khỏi danh sách cửa sổ WM). Các cửa sổ con được đặt thành WM_CLIENT_LEADER
cha mẹ của chúng (để quản lý phiên ), mặc dù cửa sổ cha mẹ có thể không hiển thị (firefox thực hiện điều này) và có thể trỏ đến chính nó.
xrestop
được bình chọn của tôi mặc dù.