/ usr / share / applications中的.desktop文件,xdg-desktop-menu命令和update-desktop-database命令之间的关系是什么?
我正在尝试制作一个为我的应用创建桌面图标的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[]
语句时执行它。
Fedora Linux与Gnome。
答案 0 :(得分:2)
在Fedora上,请确保:
BuildRequires: desktop-file-utils Requires(post): desktop-file-utils Requires(postun): desktop-file-utils
然后(%{SOURCE1}是您的桌面文件):
%install [...] desktop-file-install \ --dir=${RPM_BUILD_ROOT}%{_datadir}/applications \ %{SOURCE1} [...] %post update-desktop-database &> /dev/null || : %postun update-desktop-database &> /dev/null || :
如果您安装自己的图标,还需要更新图标缓存,添加相关的specfile部分:
%post touch --no-create %{_datadir}/icons/hicolor &>/dev/null || : %postun if [ $1 -eq 0 ] ; then touch --no-create %{_datadir}/icons/hicolor &>/dev/null gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : fi %posttrans gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
参考文献: