Debian

二進制名稱與 GUI 中的名稱

  • February 15, 2019

在 icedove>preferences>attachments 中,對於“JEPG image”,可以選擇“Image Viewer”或“Use other …”。事實證明,“Image Viewer”實際上是我係統上的“/usr/bin/eog”。我只知道,因為在命令行上打開 eog 後,點擊“幫助>關於”,我看到“圖像查看器”…“GNOME 圖像查看器”。它不會讓你知道實際的二進製文件是什麼,所以,當程序“通過”打開時,它是 icedove 中的“圖像查看器”名稱,你怎麼會弄清楚實際的二進製文件是什麼?某處是否有一些表格,或者一些關聯列表或其他東西?以上只是一個例子——這個問題一直存在於所有的GUI中。這是 Linux 努力變得像 Windows 一樣愚蠢和無益的一個可悲的例子 :-(

在具有X Window System (X11)¹ 的 Unix 世界中,沒有“應用程序”的概念。有幾個概念重疊但不完全匹配:

  • - 您在包管理器中選擇的用於安裝應用程序的名稱。如果您不通過包管理器安裝它,則可能沒有正式的包名。一個包可能包含多個應用程序。

  • 執行檔— 為執行應用程序而執行的文件。執行檔有一個文件名,它可能提供資訊,也可能不提供資訊(當應用程序的路徑為 時/usr/bin/foo,而不是/opt/myapp/bin/run或時/home/alice/work/dev/a.out)。

  • 程序——記憶體中的應用程序實例。執行執行檔會創建一個程序。確切地說,什麼可以被視為程序名稱是複雜的,並且在某種程度上依賴於系統,我不會在這裡全面討論它。在大多數情況下,您可以將程序名稱視為執行檔的文件名。

  • 頂層視窗——一個 GUI 程序,根據“GUI”的定義,至少創建其中一個。一個視窗有幾個關心某種名稱的東西,所有這些都可以作為屬性檢索,並且具有輕微的誤導性名稱:

    • WM_NAME實際上是視窗的標題。這是視窗管理器在標題欄和任務列表中顯示的內容。它意味著人類可讀並且在視窗的生命週期內經常更改(例如,當打開不同的文件、切換到另一個選項卡等時)。
    • WM_ICON_NAME類似於WM_NAME,但在顯示代表視窗的圖示時使用。
    • WM_CLASS是一對名稱,實例名稱和類名稱。這些名稱被X 資源等配置機制使用;有關簡短介紹,請參見配置文件中的“Xterm”或“xterm” 。預設情況下,這些名稱通常相同,只是類大寫而實例不大寫。我認為類名是“應用程序名”的最佳競爭者——但一個程序可能會顯示多個具有不同類的頂級視窗。
  • 應用程序可能有一個菜單,其中包含一個名為“About”的項目,該菜單顯示一個包含名稱的視窗。它放在那裡的內容純粹是應用程序開發人員的選擇。

程序查看器,不僅是基於文本的,例如pstophtop而且大多數 GUI 的,例如 gnome-system-properties 和 lxtask,只顯示有關程序的資訊,而不顯示有關頂層視窗的資訊。

這有一個技術原因:沒有可靠的方法來辨識哪個程序顯示哪個視窗。在同一個視窗中繪製多個程序是可能的,但非常不尋常。更常見的是,可能沒有程序顯示視窗,因為 X11 是網路透明的——應用程序可以通過網路向顯示介面(X 伺服器)發送指令。也沒有萬無一失的機制來跟踪由遠端連接創建的視窗。

如果應用程序是協作的(並且大多數是協作的),那麼兩個視窗屬性允許您將視窗跟踪到程序:

  • _NET_WM_PID:創建視窗的程序的程序 ID。
  • WM_CLIENT_MACHINE: 程序執行所在機器的主機名。

請參閱哪個程序創建了此 X11 視窗?更多細節。您可以使用、、等_NEW_WM_PID命令行工具查詢屬性。使用,您可以顯示所有屬性。使用和,點擊視窗以顯示有關它的資訊。可以列出所有視窗的資訊。xpropxdotoolwmctrlxprop``xdotool``xprop``wmctrl

xprop _NET_WM_PID WM_CLIENT_MACHINE  # and click on a window
xdotool selectwindow getwindowpid    # and click on a window
wmctrl -lp

給定程序 ID,您可以獲得有關程序的資訊,例如其執行檔的路徑。例如,執行以下命令,然後點擊一個視窗以顯示有關顯示該視窗的應用程序的資訊。

ps -o args= -p $(xdotool selectwindow getwindowpid)

要查看執行檔的路徑,請在 Linux 下:

readlink /proc/$(xdotool selectwindow getwindowpid)/exe

¹像 Wayland 和 Mir 這樣的項目正在努力取代 X11,但考慮到 X11 的應用程序有多少,它們進展緩慢,只有保持足夠的兼容性才可行。

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