X11
WM_CLASS 與 WM_INSTANCE?
當我執行時,
xprop
我得到一個具有兩個值的類字元串,其中一個 i3 呼叫 aninstance
,另一個 aclass
,例如在chromium-browser
實用xprop
程序上將返回類似這樣的內容,WM_CLASS(STRING) = "chromium-browser", "Chromium-browser"
視窗和這兩個欄位的官方指導是什麼?為此,它們非常相似。他們有什麼不同嗎?如果是這樣,我應該選擇什麼,為什麼?GUI作者應該如何對他們的名字進行分類和實例化?
實際行為由名為Inter-Client Communication Conventions Manual (ICCM)的規範定義。基本上,類名由製作應用程序的人指定。實例名稱可由使用者指定,其指定的資源應覆蓋類名稱指定的資源。
這是 X11r6 的 ICCMv2 上所說的
WM_CLASS
,4.1.2.5。
WM_CLASS
財產該
WM_CLASS
屬性(不帶控製字元的 STRING 類型)包含兩個連續的以空字元結尾的字元串。這些指定了客戶端和視窗管理器使用的實例和類名稱,用於為應用程序查找資源或作為標識資訊。此屬性必須在視窗離開 Withdrawn 狀態時存在,並且只能在視窗處於 Withdrawn 狀態時更改。視窗管理器可能僅在它們啟動和視窗離開 Withdrawn 狀態時檢查屬性,但客戶端不需要動態更改其狀態。這兩個字元串分別是:
- 一個字元串,用於命名擁有此視窗的客戶端所屬的應用程序的特定實例。實例名稱指定的資源會覆蓋類名稱指定的任何資源。實例名稱可以由使用者以作業系統特定的方式指定。在符合 POSIX 的系統上,使用以下約定:
+ 如果
-name NAME
在命令行上給出,NAME
則用作實例名稱。 + 否則,如果RESOURCE_NAME
設置了環境變數,則其值將用作實例名稱。 + 否則,用於呼叫程序的名稱的結尾部分(argv[0]
除去任何目錄名稱)將用作實例名稱。
- 一個字元串,用於命名擁有此視窗的客戶端所屬的一般應用程序類。由類指定的資源適用於具有相同類名的所有應用程序。**類名由應用程序編寫者指定。**常用的類名範例包括:“Emacs”、“XTerm”、“XClock”、“XLoad”等。
請注意,
WM_CLASS
字元串以空值結尾,因此與STRING
屬性以空值分隔的一般約定不同。這種不一致是向後兼容所必需的。(我添加的粗體強調)