Bash

從終端列出圖形程序

  • January 8, 2017

不要將這裡的問題與如何以圖形方式列出程序混淆,這不是我要問的。

在終端中,我如何查看哪些程序具有 GUI?就像 firefox、vlc、geany、nautilus 等一樣……都有一個 gui。我想了解有關哪些程序正在使用視窗管理器資源的更多資訊,並且我想從終端執行此操作。

如何獲得有關這些類型流程的更多資訊?

我一直在嘗試使用該ps命令,但我會接受任何終端命令來幫助我解決這個問題。

更新:我看到我喜歡的東西pstree 是樹,我感興趣的所有圖形過程都是從中產生的:


$pstree
init─┬─
│
├─lightdm─┬─Xorg
│ ├─lightdm─┬─init─┬─
│ │ │ ├─firefox───55*[{firefox}]
│ │ │ ├─geany─┬─bash
│ │ │ │ 
│ │ │ ├─gnome-terminal─┬─bash───pstree

嘗試xrestopxrestop -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得到我的投票。

引用自:https://unix.stackexchange.com/questions/189545