为什么我的 application.desktop 文件没有显示在 Linux 应用程序菜单中?

为什么我的 application.desktop 文件没有显示在 Linux 应用程序菜单中?

这些年来我写了很多开源程序,但最近没有,而且我以前从未遇到过这个问题。我的新项目的菜单项根本拒绝显示在 gnome 或 kde 的菜单中。

我最初只是将 .desktop 文件安装到 /usr/share/applications,但后来将其修改为使用 Desktop-file-utils - 一切都无济于事。我已将 update-desktop-database 添加到我的 postinst 脚本中...什么也没有

我已经验证了这些条目,并且在文件管理器中它们是正确的,我尝试授予它们执行权限...我找不到任何错误,但它们只是不会显示。最近是否需要做一些新的事情才能显示您的应用程序的菜单项?

.desktop 文件是:

silentcoder@ravenriley ~/SOURCE/ezdm $ cat ezdm.desktop 
[Desktop Entry]
Type=Application
Name=EZDM
GenericName=Easy Dungeon Master
Comment=A tookit for AD&D Dungeon Master
TryExec=/usr/games/ezdm
Exec=/usr/games/ezdm
Categories=Game;RolePlaying;
Icon=/usr/share/icons/hicolor/128x128/ezdm.png
Terminal=false

猫 ezdmconsole.desktop

[Desktop Entry]
Type=Application
Name=EZDM-Console
GenericName=Easy Dungeon Master (Console version)
Comment=A tookit for AD&D Dungeon Master
TryExec=/usr/games/ezdm --console
Exec=/usr/games/ezdm --console
Categories=Game;RolePlaying;
Icon=/usr/share/icons/hicolor/128x128/ezdm-console.png
Terminal=1
X-Desktop-File-Install-Version=0.20

如果任何其他代码可能有用,都可以在 github 上浏览:https://github.com/ajventer/ezdm

更新:如果我将文件复制到 /usr/share/applications/kde4 (我显然不想在我的包中执行此操作 - 毕竟它也应该在 gnome 中工作),那么谜团就加深了,然后 ezdm.desktop 突然出现了显示在菜单中,但 ezdm-console.desktop 仍然拒绝。

更新:因为它可能相关:来自 Makefile:

install:
                $(PYTHON) setup.py install --prefix=/${PREFIX} --root $(DESTDIR) --install-scripts=/${PREFIX}/games/ --no-compile --force --record .install.record --install-layout=deb
                mkdir -p ${DESTDIR}/${PREFIX}/share/applications
                mkdir -p ${DESTDIR}/${PREFIX}/share/icons/hicolor/128x128/
                desktop-file-install --dir=${DESTDIR}/${PREFIX}/share/applications/ ezdm.desktop 
                desktop-file-install --dir=${DESTDIR}/${PREFIX}/share/applications/ ezdm-console.desktop 
                install -g root -o root -m 0666 ezdm.png ${DESTDIR}/${PREFIX}/share/icons/hicolor/128x128/ezdm.png
                install -g root -o root -m 0666 ezdm-console.png ${DESTDIR}/${PREFIX}/share/icons/hicolor/128x128/ezdm-console.png 
                update-desktop-database ${DESTDIR}/${PREFIX}/share/applications

和 debian/postinst:

cat debian/postinst 
#!/bin/bash -x
ln -sf /usr/games/ezdm* /usr/bin
for I in /usr/lib/python2.7/dist-packages/ezdm_libs/*.py; do
        python -m compileall $I
done
update-desktop-database
#DEBHELPER#

答案1

尝试这个:

xdg-desktop-menu forceupdate [--mode mode]

在......之外

man xdg-desktop-menu 

答案2

有一个非常阴险的桌面文件密钥- TryExec.根据文档:

尝试执行

磁盘上可执行文件的路径,用于确定程序是否实际安装。如果路径不是绝对路径,则在 $PATH 环境变量中查找该文件。如果该文件不存在或者不可执行,则该条目可能会被忽略(例如,不会在菜单中使用)。

因此,如果填写不正确,可能会导致菜单项丢失。我所说的“适当”是指总是必须指向实际可执行文件

令人惊讶的是,如果您尝试在修改后的环境中使用 启动程序env,它会停止工作。以下是我的发行版包中无效桌面文件的示例:

TryExec=env FONTCONFIG_FILE=/usr/share/fonts/fonts.conf telegram -noupdate
Exec=env FONTCONFIG_FILE=/usr/share/fonts/fonts.conf telegram -noupdate -- %u

它不起作用,因为 DE 寻找env FONTCONFIG_FILE=/usr/share/fonts/fonts.conf telegram -noupdate可执行文件,将整个字符串(包括空格)视为文件路径,当然,这是丢失的。

解决方案也很简单:只需指定实际可执行文件的路径(甚至是相对路径):

TryExec=telegram

答案3

文件中存在格式错误。根据评论者的说法,我只能假设某些版本的 gnome 更加宽容。不管怎样,我找到了一个让它们工作的好方法:在 dolphin 中打开目录,然后编辑它们,直到它们可以从 dolphin 启动 - 只有一旦有效,添加类别字段,然后它们就会显示在菜单中。在 KDE 中,如果您不重新登录,您可能必须先运行:kbuildsycoca4 --noincremental。

文件的最终版本是:

cat ezdm.desktop 
[Desktop Entry]
Categories=Game;RolePlaying;
Comment[en_US]=A tookit for ADnD Dungeon Master
Comment=A tookit for ADnD Dungeon Master
Exec=/usr/games/ezdm
GenericName[en_US]=Easy Dungeon Master
GenericName=Easy Dungeon Master
Icon=/usr/share/icons/hicolor/128x128/ezdm.png
MimeType=
Name[en_US]=EZDM
Name=EZDM
Path=
StartupNotify=true
Terminal=false
TerminalOptions=
TryExec=/usr/games/ezdm
Type=Application
X-DBUS-ServiceName=
X-DBUS-StartupType=
X-KDE-SubstituteUID=false
X-KDE-Username=

silentcoder@ravenriley ~/SOURCE/ezdm0/ezdm $ cat ezdm-console.desktop 
[Desktop Entry]
Categories=Game;RolePlaying;
Comment[en_US]=EZDM Console Version
Comment=EZDM Console Version
Exec=/usr/games/ezdm --console
GenericName[en_US]=EZDM Console Version
GenericName=EZDM Console Version
Icon=/usr/share/icons/hicolor/128x128/ezdm-console.png
MimeType=
Name[en_US]=EZDM-Console
Name=EZDM-Console
Path=
StartupNotify=true
Terminal=true
TerminalOptions=
Type=Application
X-DBUS-ServiceName=
X-DBUS-StartupType=none
X-KDE-SubstituteUID=false
X-KDE-Username=

万一对其他人有帮助。我刚刚推出了新的 PPA 构建请求,因此更新的 ubuntu 软件包很快就会推出。

答案4

很可能是因为您的错误TryExec行表明它不再有效。

TryExec=/usr/games/games/ezdm

我猜这个文件不存在,特别是不可执行?

相关内容