Plank Dock - 错误 icons/wmclass
Plank Dock - wrong icons/wmclass
我的平板支撑有问题。不幸的是,我在 Whosebug 或其他任何地方都找不到任何条目来解决我的问题。
因此,我决定在这里开一个新问题。
我的问题:
一些应用程序(.desktop 文件)在 Plank Dock 上显示错误的图标。不仅如此,它还发生了 link 到错误的应用程序。
例如 visual studio 代码。如果我 运行 代码(终端或阿尔伯特)然后电子图标 apears 在 plank 码头上,但如果我缩小 (gnome 40) 正确的图标显示在 vs 代码 window 上。
这里是截图:
Screenshot of plank and vs code
如果我使用鼠标中键启动一个新的 window,然后出现一个电子 window,而不是第二个 vs 代码。
问题:
如何解决这个问题?有解决方法吗?
我在 arch linux 中遇到了同样的问题。不幸的是,我找到的解决方案只是暂时的(除非他们修复 the bug),但只要你每次更新 vs 代码时重新实现它,它就可以工作
- 从木板上删除电子发射器。
- 将桌面文件中的StartupWMClass值更改为code-oss。这是每次升级到 vs 代码时必须重复的步骤。
- 运行 vs code,然后使用“Keep in Dock”将启动器固定在木板上。
/usr/share/applications/code-oss.desktop
[Desktop Entry]
Name=Code - OSS
Comment=Code Editing. Redefined.
GenericName=Text Editor
Exec=/usr/bin/code-oss --no-sandbox --unity-launch %F
Icon=com.visualstudio.code.oss
Type=Application
StartupNotify=false
StartupWMClass=code-oss
Categories=Utility;TextEditor;Development;IDE;
MimeType=text/plain;application/x-code-oss-workspace;
Actions=new-empty-window;
Keywords=vscode;
[Desktop Action new-empty-window]
Name=New Empty Window
Exec=/usr/bin/code-oss --no-sandbox --new-window %F
Icon=com.visualstudio.code.oss
处理升级
每次升级 vs code 时,桌面文件都可能会重置 StartupWMClass。您有几个选择。
- 每次 vs 代码升级时更改桌面文件。您可以编写脚本,并在每次系统升级后自动 运行 它。这是一个基本示例:
~/.bashrc
my_upgrade() {
sudo pacman -Syu
sudo sed -i 's/^StartupWMClass.*/StartupWMClass=code-oss/g' /usr/share/applications/code-oss.desktop
}
或者,您可以添加一个 pacman 挂钩以在 pacman 本身内自动执行此操作,这样您就不需要 pacman 的自定义包装器(信用 ):
/etc/pacman.d/hooks/code-oss-desktop.hook
[Trigger]
Operation = Install
Operation = Upgrade
Type = Package
Target = code
[Action]
Depends = sed
Depends = sudo
When = PostTransaction
Exec = /bin/bash -c '/usr/bin/sudo /usr/bin/sed -i "s/^StartupWMClass.*/StartupWMClass=code-oss/g" /usr/share/applications/code-oss.desktop'
- 卸载
code
并为修补此问题的 vs 代码创建您自己的 PKGBUILD,并确保它跟踪升级。有几种方法可以解决这个问题,但它可能会变得复杂并且可能不在这个答案的范围内。
- 阻止升级到
code
,这样它就不会意外重置,并在您准备好解决问题时定期显式升级包。
/etc/pacman.conf
...
IgnorePkg = code
...
扩展 Drew 的回答,code-oss.desktop
的 post 升级修改可以通过 pacman 作为 PostTransaction hook 在本地自动执行。这样你就不需要 my_upgrade
bash 包装器——pacman 会在你 -Syu
.
时自动修复文件
例如这个钩子将自动修复 code-oss.desktop
每当 pacman installs/upgrades code
包:
#
# /etc/pacman.d/hooks/code-oss-desktop.hook
#
[Trigger]
Operation = Install
Operation = Upgrade
Type = Package
Target = code
[Action]
Depends = sed
Depends = sudo
When = PostTransaction
Exec = /bin/bash -c '/usr/bin/sudo /usr/bin/sed -i "s/^StartupWMClass.*/StartupWMClass=code-oss/g" /usr/share/applications/code-oss.desktop'
我的平板支撑有问题。不幸的是,我在 Whosebug 或其他任何地方都找不到任何条目来解决我的问题。 因此,我决定在这里开一个新问题。
我的问题:
一些应用程序(.desktop 文件)在 Plank Dock 上显示错误的图标。不仅如此,它还发生了 link 到错误的应用程序。 例如 visual studio 代码。如果我 运行 代码(终端或阿尔伯特)然后电子图标 apears 在 plank 码头上,但如果我缩小 (gnome 40) 正确的图标显示在 vs 代码 window 上。 这里是截图: Screenshot of plank and vs code
如果我使用鼠标中键启动一个新的 window,然后出现一个电子 window,而不是第二个 vs 代码。
问题:
如何解决这个问题?有解决方法吗?
我在 arch linux 中遇到了同样的问题。不幸的是,我找到的解决方案只是暂时的(除非他们修复 the bug),但只要你每次更新 vs 代码时重新实现它,它就可以工作
- 从木板上删除电子发射器。
- 将桌面文件中的StartupWMClass值更改为code-oss。这是每次升级到 vs 代码时必须重复的步骤。
- 运行 vs code,然后使用“Keep in Dock”将启动器固定在木板上。
/usr/share/applications/code-oss.desktop
[Desktop Entry] Name=Code - OSS Comment=Code Editing. Redefined. GenericName=Text Editor Exec=/usr/bin/code-oss --no-sandbox --unity-launch %F Icon=com.visualstudio.code.oss Type=Application StartupNotify=false StartupWMClass=code-oss Categories=Utility;TextEditor;Development;IDE; MimeType=text/plain;application/x-code-oss-workspace; Actions=new-empty-window; Keywords=vscode; [Desktop Action new-empty-window] Name=New Empty Window Exec=/usr/bin/code-oss --no-sandbox --new-window %F Icon=com.visualstudio.code.oss
处理升级
每次升级 vs code 时,桌面文件都可能会重置 StartupWMClass。您有几个选择。
- 每次 vs 代码升级时更改桌面文件。您可以编写脚本,并在每次系统升级后自动 运行 它。这是一个基本示例:
~/.bashrc
my_upgrade() { sudo pacman -Syu sudo sed -i 's/^StartupWMClass.*/StartupWMClass=code-oss/g' /usr/share/applications/code-oss.desktop }
或者,您可以添加一个 pacman 挂钩以在 pacman 本身内自动执行此操作,这样您就不需要 pacman 的自定义包装器(信用
/etc/pacman.d/hooks/code-oss-desktop.hook
[Trigger] Operation = Install Operation = Upgrade Type = Package Target = code [Action] Depends = sed Depends = sudo When = PostTransaction Exec = /bin/bash -c '/usr/bin/sudo /usr/bin/sed -i "s/^StartupWMClass.*/StartupWMClass=code-oss/g" /usr/share/applications/code-oss.desktop'
- 卸载
code
并为修补此问题的 vs 代码创建您自己的 PKGBUILD,并确保它跟踪升级。有几种方法可以解决这个问题,但它可能会变得复杂并且可能不在这个答案的范围内。 - 阻止升级到
code
,这样它就不会意外重置,并在您准备好解决问题时定期显式升级包。
/etc/pacman.conf
... IgnorePkg = code ...
扩展 Drew 的回答,code-oss.desktop
的 post 升级修改可以通过 pacman 作为 PostTransaction hook 在本地自动执行。这样你就不需要 my_upgrade
bash 包装器——pacman 会在你 -Syu
.
例如这个钩子将自动修复 code-oss.desktop
每当 pacman installs/upgrades code
包:
#
# /etc/pacman.d/hooks/code-oss-desktop.hook
#
[Trigger]
Operation = Install
Operation = Upgrade
Type = Package
Target = code
[Action]
Depends = sed
Depends = sudo
When = PostTransaction
Exec = /bin/bash -c '/usr/bin/sudo /usr/bin/sed -i "s/^StartupWMClass.*/StartupWMClass=code-oss/g" /usr/share/applications/code-oss.desktop'