Plank Dock - 错误的图标/wmclass
Posted
技术标签:
【中文标题】Plank Dock - 错误的图标/wmclass【英文标题】:Plank Dock - wrong icons/wmclass 【发布时间】:2021-04-29 22:32:32 【问题描述】:我的木板有问题。不幸的是,我在 *** 上找不到任何条目,也找不到其他任何解决我问题的条目。 因此,我决定在这里提出一个新问题。
我的问题:
某些应用程序(.desktop 文件)在 plank dock 上显示错误的图标。不仅如此,它也发生了,它链接到错误的应用程序。 例如视觉工作室代码。如果我运行代码(终端或 albert),那么在木板码头上会出现一个电子图标,但如果我缩小(gnome 40),右侧的图标会显示在 vs 代码窗口上。 这是一个屏幕截图: Screenshot of plank and vs code
如果我使用鼠标中键启动一个新窗口,则会出现一个电子窗口,而不是第二个 vs 代码。
问题:
如何解决这个问题?有解决办法吗?
【问题讨论】:
【参考方案1】:我在 Arch linux 中遇到了同样的问题。不幸的是,我找到的解决方案只是暂时的(除非他们修复了the bug),但只要您每次更新代码时都重新实现它,它就可以工作
-
从木板上删除电子发射器。
将桌面文件中的 StartupWMClass 值更改为 code-oss。这是每次升级到 vs 代码时都必须重复的步骤。
运行 vs 代码,然后使用“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 代码,桌面文件都可能会重置 StartupWMClass。你有几个选择。
-
每次与代码升级时都更改桌面文件。您可以编写脚本并在每次系统升级后自动运行它。这是一个基本示例:
~/.bashrc
my_upgrade() sudo pacman -Syu sudo sed -i 's/^StartupWMClass.*/StartupWMClass=code-oss/g' /usr/share/applications/code-oss.desktop
或者,您可以添加一个 pacman 钩子以在 pacman 本身内自动执行此操作,这样您就不需要 pacman 的自定义包装器(信用 tdy):
/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 ...
【讨论】:
不错的答案+1。回复:自动处理升级,还有使用PostTransaction
pacman hook的第四个选项。我发布了一个示例钩子供参考。【参考方案2】:
扩展 Drew 的回答,code-oss.desktop
的升级后修改可以使用 pacman 作为PostTransaction hook 本地自动化。这样你就不需要my_upgrade
bash 包装器——当你-Syu
时,pacman 会自动修复文件。
例如,每当 pacman 安装/升级 code
软件包时,此挂钩将自动修复 code-oss.desktop
:
#
# /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'
【讨论】:
以上是关于Plank Dock - 错误的图标/wmclass的主要内容,如果未能解决你的问题,请参考以下文章