/usr/share/applications中的.desktop文件,xdg-desktop-menu命令和update-desktop-database命令之间有什么关系?

我正在尝试创建一个RPM,该RPM为我的应用创建桌面图标。在RPM中,我将vendor-appname.desktop文件安装到/usr/share/applications中。然后,我有以下安装后脚本:

if [ -x "`which xdg-desktop-menu 2>/dev/null`" ]; then
    xdg-desktop-menu install $RPM_BUILD_ROOT/usr/share/applications/vendor-myapp.desktop
fi

if [ -x "`which update-desktop-database 2>/dev/null`" ]; then
    update-desktop-database &> /dev/null || :
fi

并且未创建图标。如果我运行
xdg-desktop-menu install $RPM_BUILD_ROOT/usr/share/applications/vendor-myapp.desktop

稍后以非root用户身份手动执行命令。如果我是以root身份这样做的(应该是RPM的工作方式),则不会创建该图标。另外,我非常怀疑if []位下的update-desktop-database没有执行。当我手动运行整个if[]语句时,将执行它。

具有Gnome的Fedora Linux。

最佳答案

在Fedora上,请确保:

BuildRequires:桌面文件实用程序
需求(发布):desktop-file-utils
需要(postun):桌面文件实用程序

然后(%{SOURCE1}是您的桌面文件):

%安装
[...]
桌面文件安装\
--dir = $ {RPM_BUILD_ROOT}%{_ datadir}/应用程序\
%{SOURCE1}
[...]

%post
更新桌面数据库&>/dev/null || :

%postun
更新桌面数据库&>/dev/null || :

如果安装自己的图标,则还需要更新图标缓存,并在相对的specfile部分中添加:

%post
触摸--no-create%{_ datadir}/icons/hicolor&>/dev/null || :

%postun
如果[$ 1 -eq 0];然后
触摸--no-create%{_ datadir}/icons/hicolor&>/dev/null
gtk-update-icon-cache%{_ datadir}/icons/hicolor&>/dev/null || :
科幻

%posttrans
gtk-update-icon-cache%{_ datadir}/icons/hicolor&>/dev/null || :

引用:

  • http://fedoraproject.org/wiki/PackagingGuidelines#Desktop_files
  • http://freedesktop.org/wiki/Software/desktop-file-utils
  • http://fedoraproject.org/wiki/Packaging/ScriptletSnippets#Icon_Cache
  • 关于linux - 桌面菜单,.desktop文件和xdg-desktop-menu,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4414160/

    10-11 08:09