桌面项
XDG 桌面配置项规范定义了一个标准,用于在实现了XDG 桌面菜单规范的桌面环境里将应用程序集成到应用程序菜单中。(译注:下文中“XDG 桌面配置项”简称为“桌面项”)
基础[编辑 | 编辑源代码]
每个桌面项必须具有一个Type
关键字和一个Name
关键字。可以定义桌面项在应用程序菜单中的外观(非必须)。
桌面项可用的有效类型有三种:
- Application
- 定义如何启动应用程序以及它支持的 MIME 类型(由 XDG MIME Applications 使用)。 使用XDG Autostart应用程序项可以通过将它们放在特定目录中以实现自动启动。应用程序项使用
.desktop
扩展名。 请参阅 #应用程序项。
- Link
- 定义
URL
的快捷方式。链接项使用.desktop
扩展名。
- Directory
- 定义应用程序菜单中子菜单的外观。目录项使用
.directory
扩展名。
以下部分将大致解释这些是如何创建和验证的。
应用程序项[编辑 | 编辑源代码]
应用程序的桌面项或.desktop
文件通常是元信息资源和应用程序快捷方式的组合。对于系统范围内安装的应用程序,这些文件通常位于 /usr/share/applications/
或/usr/local/share/applications/
。而~/.local/share/applications/
用于用户特定的应用程序。后者(用户条目)优先于前者(系统条目)。
文件示例[编辑 | 编辑源代码]
下面是一个带有附加注释的结构示例。 这个例子只是为了给人一个快速的印象,并没有展示如何使用所有可能的关键字。完整的关键字清单可在 freedesktop 规范中找到。
[Desktop Entry] # type关键字如上所述 Type=Application # 本文件所遵循的桌面项规范版本 Version=1.0 # 应用程序的名称 Name=jMemorize # 显示为工具提示的注释 Comment=Flash card based learning tool # 可执行文件所在的目录 Path=/opt/jmemorise # 可执行文件,可以带参 Exec=jmemorize # 图标名称 Icon=jmemorize # 应用程序是否需要运行在终端中 Terminal=false # 本桌面项将显示在哪些分类中 Categories=Education;Languages;Java;
Type
和Name
是必须的。关键字赋值[编辑 | 编辑源代码]
所有可用的关键字都可以在freedesktop网站上找到。
例如,Type
关键字定义了三种类型的桌面项:应用程序(type 1)、链接(type 2)和目录(type 3)。
Version
关键字不代表应用程序的版本,而是代表该文件符合的桌面项规范的版本。
Name
、GenericName
和Comment
通常包含它们组合形式的冗余值,例如:
Name=Pidgin Internet Messenger GenericName=Internet Messenger
或者
Name=NoteCase notes manager Comment=Notes Manager
应该避免这种情况,因为它只会让用户感到困惑。Name
关键字应仅包含名称,或者可能是缩写/首字母缩略词(如果可用)。
GenericName
应该说明您通常如何描述该应用程序提供的功能(即 Firefox 是“Web 浏览器”)。Comment
旨在包含任何有用的附加信息。
验证[编辑 | 编辑源代码]
随着时间的推移,某些关键字已被弃用,您可能需要使用 desktop-file-validate(1) 来验证您的桌面项,它是 desktop-file-utils包 软件包的一部分。要验证,请运行:
$ desktop-file-validate <your desktop file>
这将为您提供非常详细且有用的警告和错误消息。
安装[编辑 | 编辑源代码]
使用 desktop-file-install(1) 将桌面文件安装到目标目录。例如:
$ desktop-file-install --dir=$HOME/.local/share/applications ~/app.desktop
刷新桌面项数据库[编辑 | 编辑源代码]
要使~/.local/share/applications
中定义的桌面项生效,请运行以下命令:
$ update-desktop-database ~/.local/share/applications
-v
(详细)参数以显示可能的桌面输入错误。图标[编辑 | 编辑源代码]
参阅图标主题规范。
通用图标格式[编辑 | 编辑源代码]
以下是图标常用图像格式的概述。
扩展名 | 全称和/或说明 | 图像类型 | 是否容器型 | 是否支持 |
---|---|---|---|---|
.png | 便携式网络图形 | 位图 | 否 | 是 |
.svg(z) | 可缩放矢量图形 | 矢量图 | 否 | 是(可选) |
.xpm | X PixMap | 位图 | 否 | 是(不推荐) |
.gif | 图像互换格式 | 位图 | 否 | 否 |
.ico | Windows图标格式 | 位图 | 是 | 否 |
.icns | Apple图标格式 | 位图 | 是 | 否 |
图标格式转换[编辑 | 编辑源代码]
如果您偶然发现 freedesktop.org 标准不支持的图标格式(例如 gif
或 ico
),您可以使用“转换”工具 (这是 imagemagick包 包的一部分)将其转换为支持/推荐的格式,例如:
$ convert <icon name>.gif <icon name>.png
如果您从 ico
之类的容器格式转换,您将获得以 <icon name>-<number>
形式封装在 ico
文件中的所有图像。如果你想知道图像的大小,或者像 ico
这样的容器文件中的图像数量,你可以使用 identify 工具(它也是 imagemagick包 的一部分):
$ identify /usr/share/vlc/vlc48x48.ico
/usr/share/vlc/vlc48x48.ico[0] ICO 32x32 32x32+0+0 8-bit DirectClass 84.3kb /usr/share/vlc/vlc48x48.ico[1] ICO 16x16 16x16+0+0 8-bit DirectClass 84.3kb /usr/share/vlc/vlc48x48.ico[2] ICO 128x128 128x128+0+0 8-bit DirectClass 84.3kb /usr/share/vlc/vlc48x48.ico[3] ICO 48x48 48x48+0+0 8-bit DirectClass 84.3kb /usr/share/vlc/vlc48x48.ico[4] ICO 32x32 32x32+0+0 8-bit DirectClass 84.3kb /usr/share/vlc/vlc48x48.ico[5] ICO 16x16 16x16+0+0 8-bit DirectClass 84.3kb
如您所见,示例 ico 文件,虽然它的名称可能暗示一个大小为 48x48 的图像,但包含不少于 6 个不同的大小,其中一个甚至大于 48x48,即 128x128。
或者,您可以使用 icotool(来自 icoutils包)从 ico 容器中提取 png 图像:
$ icotool -x <icon name>.ico
要从 .icns 容器中提取图像,可以使用 icns2png(由 libicns包 提供):
$ icns2png -x <icon name>.icns
获取图标[编辑 | 编辑源代码]
附带“.desktop”文件的软件包肯定包含一个或一组图标。有时开发人员虽然没有创建“.desktop”文件,但可能会附带图标。所以一个好的开始是在源包中寻找图标。
您可以首先使用 find 过滤扩展名,然后使用 grep 进一步过滤某些常用关联词,如包名、“icon”、“logo”等,源码包中可能有很多图片。
$ find /path/to/source/package -regex ".*\.\(svg\|png\|xpm\|gif\|ico\)$"
如果应用程序的开发人员没有在他们的源包中包含图标,那么下一步就是在他们的网站上进行搜索。
一些项目,例如 tvbrowserAUR 有一个艺术品/徽标页面,可以在其中找到其他图标。如果一个项目是多平台的,可能会出现这样的情况,即使 linux/unix 包没有附带图标,Windows 包也可能提供图标。如果项目使用版本控制系统,如 CVS/SVN/等。并且您对它有一些经验,您也可以考虑浏览它以获取图标。
如果一切都失败了,该项目可能还没有图标/徽标。
图标文件路径[编辑 | 编辑源代码]
freedesktop.org 标准规定了程序应以何种顺序和目录查找图标:
$HOME/.icons
(为了向后兼容)$XDG_DATA_DIRS/icons
/usr/share/pixmaps
工具[编辑 | 编辑源代码]
arronax[编辑 | 编辑源代码]
Arronax 是一个图形程序,用于创建和修改应用程序和位置的桌面项。
alacarte[编辑 | 编辑源代码]
alacarte包 是一个使用 freedesktop.org 菜单规范的 GNOME 图形菜单编辑器。它还支持覆盖桌面项。
gendesk[编辑 | 编辑源代码]
gendesk包 最初是一个 Arch Linux 特定的工具,用于通过直接从 PKGBUILD 文件中获取所需信息来生成 .desktop 文件。 现在它是一个接受命令行参数的通用工具。
可以从这个网站自动下载图标(如果网站可用的话)。(图标的来源是可配置的)。
用法[编辑 | 编辑源代码]
- 把
gendesk
添加到 makedepends
- 启动
prepare()
功能:
gendesk --pkgname "$pkgname" --pkgdesc "$pkgdesc"
- 或者,如果已经提供了一个图标(例如,$pkgname.png),可以指定
-n
参数限定不下载图标或使用默认图标。例如:
gendesk -n --pkgname "$pkgname" --pkgdesc "$pkgdesc"
$srcdir/$pkgname.desktop
将被创建并安装在package()
函数中:
install -Dm644 "$pkgname.desktop" "$pkgdir/usr/share/applications/$pkgname.desktop"
- 图标可以这样安装:
install -Dm644 "$pkgname.png" "$pkgdir/usr/share/pixmaps/$pkgname.png"
- 用
--name='程序名称'
这个参数指定程序在菜单中的名称。
- 用
--exec='/opt/some_app/elf --some-arg --other-arg'
这种形式设置可执行文件字段。
- 更多信息请参阅 gendesk 项目。
lsdesktopf[编辑 | 编辑源代码]
lsdesktopfAUR可列出可用的“.desktop”文件或搜索它们的内容。
$ lsdesktopf $ lsdesktopf --list $ lsdesktopf --list gtk zh_TW,zh_CN,en_GB
它还可以执行 MIME 类型相关的搜索。参阅XDG MIME Applications#lsdesktopf。
fbrokendesktop[编辑 | 编辑源代码]
fbrokendesktopAUR Bash 脚本用于检测指向不存在路径的无效Exec
值。没有任何参数,它使用 DskPath
数组中的预设目录。它仅显示完整路径和文件名丢失的无效“.desktop”。
例如
$ fbrokendesktop $ fbrokendesktop /usr $ fbrokendesktop /usr/share/xsessions/icewm.desktop
提示与技巧[编辑 | 编辑源代码]
从终端运行一个桌面项[编辑 | 编辑源代码]
如果安装了 gtk3包,可以运行 gtk-launch application.desktop
。
或者安装 dex包 包并运行 dex /path/to/application.desktop
。
编辑 .desktop 文件[编辑 | 编辑源代码]
对于系统范围的 .desktop 文件(例如,从软件包安装的文件),首先将相关的 .desktop 文件(例如,从 /usr/share/applications/
复制到 /usr/share/applications/
) {ic|$XDG_DATA_HOME/applications/}}(例如 ~/.local/share/applications/
)。 这可以防止在系统升级期间更新软件包时覆盖您的更改。 本地用户特定的“.desktop”文件应自动优先于系统范围的文件。 现在您可以根据需要修改本地用户特定的“.desktop”文件。
$XDG_CONFIG_HOME/autostart
中可能已经存在系统桌面条目的副本,如 XDG Autostart。 如果您只想在自动启动时修改行为,请继续编辑此文件。 否则,如果您想在所有情况下修改行为,您应该:
- 将桌面文件从
$XDG_CONFIG_HOME/autostart/
移动到$XDG_DATA_HOME/applications
。
- 使用
ls -l
,确保此桌面条目是您可以编辑的常规文件,而不是指向系统位置的链接。如果是链接,请按照上述说明将其替换为原件的副本。
- 建立一个指向用户应用程序目录的符号链接(为方便起见,默认 XDG 目录被替换):
ln -s ~/.local/share/applications/desktop_entry ~/.config/autostart/
现在,您的应用程序启动器中的文件将与自动启动的文件保持一致。编辑环境变量[编辑 | 编辑源代码]
要设置环境变量,在 .desktop 文件中,编辑 Exec=
行以首先使用 env(1) 命令设置变量。例如,将原始行注释掉:
~/.local/share/applications/abiword.desktop
... # Exec=abiword %U Exec=env LANG=he_IL.UTF-8 abiword %U ...
编辑命令行参数[编辑 | 编辑源代码]
要更改或添加命令行参数,请编辑 Exec=
行以附加所需的选项。 例如,将原始行注释掉:
~/.local/share/applications/steam.desktop
... # Exec=/usr/bin/steam-runtime %U Exec=/usr/bin/steam-runtime -no-browser %U ...
隐藏桌面项[编辑 | 编辑源代码]
可以通过多种方式控制桌面条目的可见性。有关详细信息,请参阅桌面条目规范。 将以下行之一添加到您的 .desktop 文件中:
- All 桌面环境,选择以下一项(或两项):
- 为您不希望在菜单中显示的应用程序添加行
NoDisplay=true
。
- 为您不希望在菜单中显示的应用程序添加行
- 为您认为已删除且不希望在菜单中显示的应用程序添加行
Hidden=true
。
- 为您认为已删除且不希望在菜单中显示的应用程序添加行
- Specified 桌面环境,选择以下之一,其中
desktop_names
是以分号分隔的桌面环境列表(例如GNOME
、GNOME ;Xfce;KDE;
):
- 添加行
NotShowIn=desktop_names
以“隐藏”仅在指定桌面环境中的条目。
- 添加行
- 将行
OnlyShowIn=desktop_names
添加到仅在指定桌面环境中的“显示”条目中。
- 将行