2010-12-10 40 views
3

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

我试图做一个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身份(据推测,RPM是如何操作的),则不会创建该图标。另外,我非常怀疑if []位下的update-desktop-database未被执行。当我手动运行整个if[]语句时,它会被执行。

Fedora Linux与Gnome。

+0

XDG-图标资源? – OliJG 2010-12-11 09:39:32

回答

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

如果你安装了自己的图标,你还需要更新图标缓存,加入在相对spec文件部分:

 
%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 || : 

参考文献:

相关问题