问题描述
在 Linux 中同时打开 DataGrip
和 Idea
两个软件时,状态栏只显示一个图标,有时显示 DataGrip
图标,有时显示 Idea
图片,并且点击这个任务图标时,会列出 DataGrip
和 Idea
所有的活动窗口。
解决方法
在 Linux 的桌面环境中,StartupWMClass
字段用于指定应用程序的窗口管理器类名。窗口管理器使用这个类名来识别应用程序的窗口,并将其与应用程序的启动器图标关联起来。由于这两个软件是同一家公司生产的,所以类名的话应该也是一样的,所以我们只要在 desktop
文件中添加 StartupWMClass
字段,来把它们区分开来就可以解决这个问题。
/usr/share/applications/IdeaIU.desktop
[Desktop Entry]
Version=2022.3.2
Name=IntelliJ IDEA
Comment=IntelliJ IDEA
Exec=/usr/local/share/idea-IU/bin/idea.sh
StartupNotify=true
Terminal=false
Icon=/usr/local/share/idea-IU/bin/idea.png
Type=Application
Categories=Development
StartupWMClass=jetbrains-idea
/usr/share/applications/DataGrip.desktop
[Desktop Entry]
Version=2022.3.3
Name=DataGrip
Exec=/usr/local/share/DataGrip-2022.3.3/bin/datagrip.sh
StartupNotify=true
Terminal=false
Icon=/usr/local/share/DataGrip-2022.3.3/bin/datagrip.png
Type=Application
Categories=Development
StartupWMClass=jetbrains-datagrip
原理
通常,当您在桌面环境中启动一个应用程序时,桌面环境会在任务栏或者应用程序启动器中显示一个图标。当您单击这个图标时,桌面环境会启动应用程序并显示它的窗口。如果应用程序的窗口管理器类名与应用程序的启动器图标关联起来,那么当您单击启动器图标时,窗口管理器就可以找到应用程序的窗口并将其显示出来。
通常情况下,StartupWMClass 字段的值应该是应用程序的名称或者主窗口的类名。您可以使用 xprop 命令来查看窗口的 WM_CLASS 属性,以确定应该使用哪个类名。