一个.desktop文件中的StartupWMClass字段代表什么?

我正在处理这个已存在的.desktop文件,并且有一个疑问:

文件内容是:

[Desktop Entry]
#Icon=connect-data-space
Icon=XCloud
Categories=Utility;
Type=Application
#Exec=/usr/share/ConnectDataSpace/appl/launcher.sh
Exec=/usr/share/XCloud/appl/launcher.sh
Name[en_US]=Connect Data Space
#Name=Connect Data Space
Name=XCloud
Comment[en_US]=
Comment=
StartupNotify=true
Terminal=false
OnlyShowIn=GNOME;Unity;
StartupWMClass=ConnectDataSpace
Actions=CheckUpgrade

[Desktop Action CheckUpgrade]
Name=Verifica Aggiornamenti
#Exec=java -jar /usr/share/ConnectDataSpace/appl/lib/shellExtBridge.jar -checkupgrade
Exec=java -jar /usr/share/XCloud/appl/lib/shellExtBridge.jar -checkupgrade
OnlyShowIn=GNOME;Unity;

这个文件的StartupWMClass字段到底代表什么?
3个回答

现代Linux桌面环境(Gnome 3,Ubuntu Unity,Docky)使用WMClass属性将窗口与所属应用程序关联起来。许多基于Java的应用程序存在一个问题,即应用程序创建的窗口与启动应用程序的快捷方式不关联(因此,坞站包含多个相同图标的副本)。
因此,名为StartupWMClass的字段是一个字符串,用于定义在Unity Launcher中启动时应用程序所属的类别。
您可以在终端中键入以下命令,查看您的窗口获得了哪个WM_CLASS
xprop WM_CLASS

然后点击窗口。在gnome终端的情况下,输出如下:
WM_CLASS(STRING) = "gnome-terminal", "Gnome-terminal"

所以所有带有 "gnome-terminal" 和 "Gnome-terminal" 的 WM_CLASS 的窗口都被分组在一起。

7我发现将链接指向官方的FreeDesktop规范页面很有用,尽管它并没有提供太多信息:http://standards.freedesktop.org/desktop-entry-spec/latest/ar01s05.html - Stefano
3更多的答案:在桌面文件的值中不要使用引号。 - joker
为了清晰起见:这个设置不会对WM_CLASS产生任何影响,它只是告诉启动器应该期望被启动的应用程序具有什么类别。如果应用程序确实具有该类别,它将被分组在由此.desktop文件创建的启动器图标下。 - Tgr
2请注意,这是一个X11的概念。Ubuntu 22+默认使用Wayland,它实际上不使用WM_CLASS,所以不确定这个设置会有任何效果。 - Tgr
@Tgr 至少对Xampp安装有影响。 - Zatigem

在使用Wayland的新系统上,xprop工具将不再起作用。
如果您正在使用GNOME Shell,您可以使用内置工具Looking Glass
按下Alt + F2,输入lg并按下Enter。在右上角面板中,选择“Windows”。
WM_CLASS将显示在wmclass键下。
例如: enter image description here

顺便提一下,在Kde/Kwin和wayland下,xprop无法工作。
你需要使用qdbus org.kde.KWin /KWin queryWindowInfo命令,并点击你想要观察的窗口。
WMClass将会在resourceClass属性中。