如何让自行编译的mupdf在Unity启动器侧边栏显示图标和名称
Hey there! I get it—你已经从源码编译好了MuPDF,手动创建的.desktop文件也让它在Unity Dash里正常显示带图标的条目了,但启动器侧边栏就是不给力。别着急,咱们一步步来搞定它:
1. 先检查.desktop文件的有效性
Unity对.desktop文件的格式要求挺严格的,先跑个命令排查错误吧(把mupdf.desktop换成你自己命名的文件名):
desktop-file-validate /usr/share/applications/mupdf.desktop
如果输出了错误提示(比如缺少必要字段、路径不对),先把这些问题修复,哪怕是个小拼写错误都可能导致启动器识别失败。
2. 确认Exec路径的正确性
从源码编译的MuPDF,二进制文件通常会安装在/usr/local/bin/mupdf(除非你指定了自定义安装目录)。确保你的.desktop文件里的Exec行用的是绝对路径,而不是只写mupdf:
Exec=/usr/local/bin/mupdf %U
末尾的%U是让图标支持拖拽打开文件的小技巧,建议加上。
3. 保证图标能被Unity找到
Unity要正常显示图标,得让它能定位到图标文件,有两种方式可选:
- 方式一:把MuPDF的图标(推荐PNG格式,48x48或64x64尺寸)放到
/usr/share/icons/hicolor/48x48/apps/目录下(目录不存在就新建),然后在.desktop文件里写:Icon=mupdf - 方式二:直接用图标文件的绝对路径:
Icon=/你存放图标的路径/mupdf-icon.png
4. 添加StartupWMClass字段(Unity识别的关键!)
这是最容易忽略但最关键的一步。Unity靠窗口的WM_CLASS值来匹配对应的.desktop文件,操作方法如下:
- 打开MuPDF,让它的窗口处于可见状态
- 在终端里运行命令:
xprop WM_CLASS - 用鼠标点击MuPDF的窗口,终端会输出类似这样的内容:
WM_CLASS(STRING) = "mupdf", "MuPDF" - 把第一个值(比如这里的
mupdf)加到你的.desktop文件里:StartupWMClass=mupdf
5. 更新桌面数据库
修改完.desktop文件后,跑个命令让Unity刷新识别:
update-desktop-database /usr/share/applications/
6. 测试效果
关闭所有MuPDF窗口,从Dash重新打开它,现在应该能在启动器侧边栏看到它的图标了。右键点击图标选择「锁定到启动器」,以后就不用每次找Dash啦!
另外,如果你在~/.local/share/applications/目录下也放了一份.desktop文件,记得它和/usr/share/applications/里的内容保持一致——本地文件优先级更高,要是本地的文件有问题也会影响显示。
备注:内容来源于stack exchange,提问作者DealTime444

