桌面菜单,.desktop文件和xdg-desktop-menu

时间:2010-12-10 23:20:47

标签: linux rpm

/ 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。

1 个答案:

答案 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 || :

参考文献: