從終端列出圖形程序
不要將這裡的問題與如何以圖形方式列出程序混淆,這不是我要問的。
在終端中,我如何查看哪些程序具有 GUI?就像 firefox、vlc、geany、nautilus 等一樣……都有一個 gui。我想了解有關哪些程序正在使用視窗管理器資源的更多資訊,並且我想從終端執行此操作。
如何獲得有關這些類型流程的更多資訊?
我一直在嘗試使用該
ps
命令,但我會接受任何終端命令來幫助我解決這個問題。更新:我看到我喜歡的東西
pstree
是樹,我感興趣的所有圖形過程都是從中產生的:$pstree init─┬─ │ ├─lightdm─┬─Xorg │ ├─lightdm─┬─init─┬─ │ │ │ ├─firefox───55*[{firefox}] │ │ │ ├─geany─┬─bash │ │ │ │ │ │ │ ├─gnome-terminal─┬─bash───pstree
嘗試
xrestop
或xrestop -b
。它旨在測量每個 X 視窗消耗了多少 X 資源,但作為一個小獎勵,它標識了視窗的名稱和相應的 PID。
xlsclients
是關閉的(並且是 X 的標準部分),它列出了 X 伺服器的客戶端。但是,您認為的“應用程序”和 X 認為的“客戶端”之間可能沒有 1:1 的映射。例如,我的 LyX 單個執行實例消耗 13 個客戶端,如果我使用xlsclients -l
(長格式輸出),我可以看到其中只有一個具有定義的“圖示名稱”,但這只是一個提示。此外,由於它使用XQueryTree()
它可能會錯過一些視窗(它沒有找到xpdf
我打開的任何視窗)。它也沒有提供太多資訊,但您可以做的是使用
xlsclients -l
獲取視窗 id,並使用xprop -id $ID
. 有關視窗的更多詳細資訊,請使用xwinifo
,儘管它關心與客戶端或應用程序不同的“視窗”:xwininfo -root -children xwininfo -root -tree # indented view
根據您的視窗管理器,您可能能夠檢查某些視窗屬性(例如
_NET_xxx
或_NET_WM_xxxx
properties)以確定某物是否是“應用程序”。如果視窗管理器客戶端或 GUI 庫設置它(任何當代都應該),則該_NET_WM_PID
屬性是將PID 與特定視窗關聯的最簡單(儘管不完美)的方法。我不知道有什麼工具可以將所有這些部分聯繫在一起。我使用視窗管理器 FVWM,我可以使用 直接與它對話
FvwmCommand
,例如FvwmCommand -i1 send_windowlist
顯示視窗列表。@Arkadiusz 的使用建議wmctrl
似乎是一種很好的和視窗管理器無關的方法來做同樣的事情。另一個技巧是通過以下方式查詢根
_WIN_CLIENT_LIST
視窗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
這與我的 WM 列出的視窗完全匹配(沒有那些我配置為從 WM 視窗列表中排除的視窗)。子視窗設置
WM_CLIENT_LEADER
為它們的父視窗(用於會話管理),儘管父視窗可能不可見(firefox 這樣做),並且可能指向自身。
xrestop
得到我的投票。