桌面项
XDG 桌面条目规范 定义了一个标准,供应用程序集成到实现 桌面环境 的应用程序菜单中,这些桌面环境实现了 XDG 桌面菜单 规范。
基础知识
每个桌面条目都必须具有 Type
和 Name
键,并且可以选择定义其在应用程序菜单中的外观。
三个可用类型是
- 应用程序
- 定义如何启动应用程序以及它支持的 MIME 类型(由 XDG MIME 应用程序 使用)。通过 XDG 自动启动,应用程序条目可以放置在特定目录中自动启动。应用程序条目使用 .desktop 文件扩展名。请参阅 #应用程序条目。
- 链接
- 定义指向
URL
的快捷方式。链接条目使用 .desktop 文件扩展名。
- 目录
- 定义应用程序菜单中子菜单的外观。目录条目使用 .directory 文件扩展名。
以下部分将大致解释如何创建和验证这些条目。
用法
使用桌面启动器,例如 dex
$ dex /usr/share/applications/firefox.desktop
桌面环境 | 启动器 (软件包) |
自动启动 | 应用程序 | 链接 |
---|---|---|---|---|
Cinnamon | gio (glib2) |
否 | 是 | 否 |
GNOME | ||||
GNOME Flashback | ||||
MATE | ||||
Deepin | dde-open1 (deepin-api) |
是 | 部分支持 | |
Enlightenment | enlightenment_open (enlightenment) |
|||
KDE Plasma | kde-open2 (kde-cli-tools) |
是 | 是 | 是 |
LXDE | pcmanfm (pcmanfm) |
|||
LXQt | – | |||
Xfce | exo-open3 (exo) |
|||
环境无关 | gtk-launch4 (gtk3) |
否 | 部分支持 | 否 |
dex (dex) |
是 | 是 | 否 | |
xdg-open (xdg-utils) |
否 | 有缺陷 | 否 |
- 类型为 Application 的 .desktop 文件必须设置可执行位才能由 dde-open 启动
- 如果
KDE_SESSION_VERSION
未设置,则将使用 konqueror 中的 kfmclient。(KDE Plasma 应该在任何情况下都设置此变量。) - gio(来自 glib2)也将被尝试
- 仅当应用程序位于
/usr/share/applications
中时
应用程序条目
应用程序的桌面条目,或 .desktop 文件,通常是元信息资源和应用程序快捷方式的组合。这些文件通常位于 /usr/share/applications/
或 /usr/local/share/applications/
中,用于系统范围安装的应用程序,或 ~/.local/share/applications/
中,用于用户特定的应用程序。用户条目优先于系统条目。
文件示例
以下是其结构示例,带有附加注释。该示例仅旨在提供快速印象,并未展示如何利用所有可能的条目键。完整的键列表可以在 freedesktop 规范中找到。
[Desktop Entry] # The type as listed above Type=Application # The version of the desktop entry specification to which this file complies Version=1.0 # The name of the application Name=jMemorize # A comment which can/will be used as a tooltip Comment=Flash card based learning tool # The path to the folder in which the executable is run Path=/opt/jmemorise # The executable of the application, possibly with arguments. Exec=jmemorize # The name of the icon that will be used to display this entry Icon=jmemorize # Describes whether this application needs to be run in a terminal or not Terminal=false # Describes the categories in which this entry should be shown Categories=Education;Languages;Java;
Type
和 Name
是必需的。键定义
所有已识别的条目都可以在 freedesktop 站点上找到。例如,Type
键定义了三种类型的桌面条目:应用程序(类型 1)、链接(类型 2)和目录(类型 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
这也适用于通过编辑选项自定义现有桌面条目(例如来自 /usr/share/applications
的条目)。
更新桌面条目数据库
通常,桌面环境会自动拾取桌面条目更改。
如果不是这种情况,并且您想强制更新 ~/.local/share/applications
中定义的桌面条目,请运行以下命令
$ update-desktop-database ~/.local/share/applications
-v
(verbose)参数以显示可能的桌面条目错误。图标
另请参阅 图标主题规范。
常用图像格式
以下是常用图标图像格式的简要概述。
扩展名 | 全名和/或描述 | 图形类型 | 容器格式 | 是否支持 |
---|---|---|---|---|
.png | 便携式网络图形 | 栅格 | 否 | 是 |
.svg(z) | 可缩放矢量图形 | 矢量 | 否 | 是(可选) |
.xpm | X 像素图 | 栅格 | 否 | 是(已弃用) |
.gif | 图形交换格式 | 栅格 | 否 | 否 |
.ico | MS Windows 图标格式 | 栅格 | 是 | 否 |
.icns | Apple 图标图像 | 栅格 | 是 | 否 |
转换图标
如果您偶然发现 freedesktop.org 标准不支持的格式(如 gif
或 ico
)的图标,您可以使用 convert 工具(它是 imagemagick 软件包的一部分)将其转换为受支持/推荐的格式,例如
$ convert <icon name>.gif <icon name>.png
如果您从容器格式(如 ico
)转换,您将获得 ico
文件中封装的所有图像,形式为 <icon name>-<number>.png
。如果您想知道图像的大小,或者容器文件(如 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 有一个 artwork/logo 页面,可以在其中找到其他图标。如果一个项目是多平台的,则即使 linux/unix 软件包没有附带图标,Windows 软件包也可能提供一个。如果项目使用 版本控制系统(如 CVS/SVN/等),并且您有一些使用经验,您也可以考虑浏览它以查找图标。如果一切都失败了,则该项目可能根本没有图标/徽标。
图标路径
freedesktop.org 标准 指定了程序应查找图标的顺序和目录
$HOME/.icons
(为了向后兼容)$XDG_DATA_DIRS/icons
/usr/share/pixmaps
工具
Arronax
Arronax 是一个图形程序,用于创建和修改应用程序和位置的桌面条目。安装 arronaxAUR 软件包以使用它。
Alacarte
alacarte 是 GNOME 的图形菜单编辑器,使用 freedesktop.org 菜单规范。它还支持覆盖桌面条目。
jdDesktopEntryEdit
jddesktopentryeditAUR 是一个使用 Qt 编辑桌面条目的图形程序。
MenuLibre
menulibreAUR 是一个使用 GTK 的图形菜单编辑器,它在简洁易用的界面中提供了现代功能。
LibreMenuEditor
libre-menu-editorAUR 是一个用于编辑桌面条目的图形程序,旨在功能丰富且对初学者友好。
它使用 GTK 与 libadwaita,并遵循 GNOME 的界面指南,但旨在在任何符合 freedesktop.org 标准的桌面环境上工作。
gendesk
gendesk 最初是一个 Arch Linux 特定的工具,用于通过直接从 PKGBUILD 文件中获取所需信息来生成 .desktop 文件。现在它是一个通用工具,可以接受命令行参数。
图标可以从 openiconlibrary 自动下载(如果可用)。(图标的来源是可配置的)。
如何使用
- 将
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='Program Name'
选择菜单条目的名称。
- 使用
--exec='/opt/some_app/elf --some-arg --other-arg'
设置 exec 字段。
- 有关更多信息,请参阅 gendesk 项目。
lsdesktopf
lsdesktopfAUR 可以列出可用的 .desktop 文件或搜索其内容。
$ lsdesktopf $ lsdesktopf --list $ lsdesktopf --list gtk zh_TW,zh_CN,en_GB
它还可以执行与 MIME 类型相关的搜索。请参阅 XDG MIME 应用程序#lsdesktopf。
fbrokendesktop
fbrokendesktopAUR Bash 脚本检测指向不存在路径的损坏的 Exec
值。不带任何参数,它使用 DskPath
数组中的预设目录。它仅显示损坏的 .desktop 文件,其中包含完整路径和缺少的文件名。
示例
$ fbrokendesktop $ fbrokendesktop /usr $ fbrokendesktop /usr/share/xsessions/icewm.desktop
技巧与窍门
修改桌面文件
对于系统范围的 .desktop 文件(例如,从软件包安装的文件),首先将相关的 .desktop 文件(例如,从 /usr/share/applications/
)复制到 $XDG_DATA_HOME/applications/
(例如,~/.local/share/applications/
)。这可以防止您的更改在软件包在 系统升级 期间更新时被覆盖。本地用户特定的 .desktop 文件应自动优先于系统范围的文件。现在您可以根据需要修改本地用户特定的 .desktop 文件。
$XDG_CONFIG_HOME/autostart
中已经存在系统桌面条目的副本,如 XDG 自动启动 中所述。如果您只想在自动启动时修改行为,请继续编辑此文件。否则,如果您想在所有情况下修改行为,则应- 将桌面文件从
$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 ...
如果存在 DBusActivatable=true
,也请删除它(或将其设置为 false
),因为它会导致 Exec
行被忽略。[1]
修改命令行参数
要更改或添加命令行参数,请编辑 Exec=
行以附加所需的选项。例如,注释掉原始行
~/.local/share/applications/steam.desktop
... # Exec=/usr/bin/steam-runtime %U Exec=/usr/bin/steam-runtime -no-browser %U ...
如果存在 DBusActivatable=true
,也请删除它(或将其设置为 false
),因为它会导致 Exec
行被忽略。[2]
隐藏桌面条目
桌面条目的可见性可以通过多种方式控制。有关更多信息,请参阅 桌面条目规范。添加以下行之一到您的 .desktop 文件中
- 所有 桌面环境,选择以下其中一项(或两者兼有)
- 添加行
NoDisplay=true
用于您不希望在菜单中显示的应用程序。 - 添加行
Hidden=true
用于您认为已删除且不希望在菜单中显示的应用程序。
- 添加行
- 指定的 桌面环境,选择以下其中一项,其中
desktop_names
是以分号分隔的桌面环境列表(例如GNOME
、GNOME;Xfce;KDE;
)- 添加行
NotShowIn=desktop_names
以仅在指定的桌面环境中隐藏条目。 - 添加行
OnlyShowIn=desktop_names
以仅在指定的桌面环境中显示条目。
- 添加行