我正在尝试为我的 Linux 应用程序调试一个奇怪的图标问题。当我在应用程序菜单中搜索该应用程序时,它显示正确的图标,但当我运行应用程序本身时,该图标被破坏(它显示默认图标,即方形齿轮图标)。
这是应用程序的桌面文件,安装到/usr/local/share/applications/com.example.Xjump.desktop
[Desktop Entry]
Version=1.0
Type=Application
Name=XJump
Comment=A jumping game
Exec=xjump
Icon=com.example.Xjump
Terminal=false
Categories=Game;ArcadeGame;
该应用程序是使用 SDL 实现的。 PNG 图标以 32x32、64x64 和 128x128 版本安装到/usr/local/share。 (例如/usr/local/share/icons/hicolor/32x32/apps/com.example.Xjump.png
)。
我注意到的另一件事是,如果我将图标名称更改为 xjump
,与可执行文件名称匹配,则任务栏图标可以正常工作! 也就是说,如果我将桌面文件更改为 Icon=xjump
并将 png 重命名为 xjump.png
然后图标在应用菜单和任务栏上都能正常工作。但是,我认为我无法真正做到这一点,因为 Linux 打包指南更喜欢应用程序和图标名称遵循“反向 URL”约定。
最佳答案
一旦应用程序运行,GNOME 就会查看 Windows 的窗口类来确定正确的图标,因为它不再知道哪个桌面文件负责启动它。应用程序有责任在启动期间正确初始化窗口类。
对于 SDL 应用程序,the default behavior似乎是从环境变量中获取窗口类,如果未设置这些变量,则使用可执行文件名称作为默认值。这就是为什么当我给图标指定与可执行文件相同的名称时,我可以显示图标。
最终对我有用的修复是设置环境变量。一种方法是在 SDL_Init
之前调用 setenv
。
setenv("SDL_VIDEO_WAYLAND_WMCLASS", "com.example.Xjump", 0);
setenv("SDL_VIDEO_X11_WMCLASS", "com.example.Xjump", 0);
关于linux - 为什么我的 SDL Linux 应用程序在应用程序菜单中具有正确的图标,但在任务栏中却没有?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75203814/