/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 || :
引用:
关于linux - 桌面菜单,.desktop文件和xdg-desktop-menu,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4414160/