linux的桌面快捷方式是比较复杂的,它设计成一个具有特定格式的文本文件,也叫启动器。.desktop后缀。
注意事项: 命令必须要root账户的$PATH
定义可以访问的位置,即普通账户目录下的命令是不能直接写命令名字的,而需要给出绝对路径。如你的命令叫conky,在~/.local/bin/conky
路径下,那么你得写:/home/你的账户/.local/bin/conky
。但是如果在/usr/bin
, /bin
等这些常见路径下的命令就可以简写 conky。
如果你不知道命令的位置,可以用 which conky
这种方法找出路径。如果你连命令的名字都不知道,那么可以开启任务管理器(deepin中叫:系统监视器),里面可以查看当前运行的程序,右键菜单可以找到命令路径。
sudo apt install exo-utils dex
exo-desktop-item-edit test.desktop # 打开一个可视化编辑窗口,填写对应的内容即可。
# 在命令行执行.desktop启动器
exo-open test.desktop
# 同上
dex test.desktop
sudo apt install desktop-file-utils #辅助工具包
desktop-file-validate test.desktop #有错误会提示
desktop-file-install test.desktop --dir ~/.local/share/applications # 将启动器加入到用户的菜单文件夹,系统菜单文件夹路径是:/usr/share/applications/,不指定--dir参数会加入到系统菜单文件夹,但需要管理员权限
update-desktop-database ~/.local/share/applications # 更新菜单
# 只需要拷贝到~/.config/autostart/目录
cp -v test.desktop ~/.config/autostart/
有时候必须要手动编辑,毕竟可视化工具只是适合简单的情况。
简而言之,.desktop是ini格式的:
[组名]
键=值
[Desktop Entry]
# [Desktop Entry] 是必须的组
# 井号开始表示这行是注释(即被程序忽略)
# 注意大小写
Type = Application
Version = 1.1
Name = lickingDog
GenericName = Dog Man
Comment = 舔狗
Icon = /xxx.png
Terminal = false
MimeType = png
Categories = Games
Exec = /xxx
以上创建了一个名为lickingDog的启动器(快捷方式),图标是/xxx.png ,执行的程序是/xxx 。
键值对的具体意义:
键 | 值 | 说明 |
---|---|---|
Type | Application、Link、Directory | 类型:程序、链接、目录 |
Version | 1.4 | .desktop规范的版本 |
Name | 文本 | 启动器名称 |
GenericName | 文本 | 通用名(比如叫浏览器) |
NoDisplay | true、false | 布尔值,true表示开启选项,即不显示(在启动菜单中) |
Comment | 文本 | 提示说明的信息 |
Icon | 路径 | 图标的位置 |
Hidden | 布尔 | 是否隐藏 |
OnlyShowIn | 文本 | 根据桌面环境($XDG_CURRENT_DESKTOP)选择显示 |
NotShowIn | 文本 | 和上面相反 |
DBusActivatable | 布尔 | 是否支持D-Bus激活 |
TryExec | 路径 | 根据路径是否可用,确定是否显示 |
Exec | 路径 | 实际执行的程序 |
Path | 路径 | 工作目录 |
Terminal | 布尔 | 是否为命令行程序(cli) |
Actions | 文本 | 定义非默认动作(如执行不同参数,或命令) |
MimeType | MIME | 关联的文件类型(Mime),如jpg等 |
Categories | 类别 | 预定义的分类,如图形或影音程序 |
Implements | 文本 | 实现的接口 |
Keywords | 文本 | 用于搜索的关键字 |
StartupNotify | 布尔 | 是否开启启动通知信息 |
StartupWMClass | 文本 | 关联的通知类别 |
URL | URL | 链接 |
其中,最关键是Exec键值对,因为他定义了实际执行的命令格式。程序只需要路径,但是很多时候需要填写参数,和环境变量,下面是讲解:
参数 | 说明 |
---|---|
%f | 单个选定文件的路径 |
%F | 多个选定文件的路径 |
%u | 单个url表示的路径 |
%U | 多个url表示的路径 |
%i | Icon的值 |
%c | Name的翻译名称 |
%k | desktop文件的url |
当然,这些参数需要桌面环境传递给程序。
# env LC_ALL=en_US.UTF-8 :表示定义一个LANG环境变量=en_US.UTF-8 ,这个环境变量的作用是改变命令显示的语言
Exec = env LC_ALL=en_US.UTF-8 echo %f
高级功能,一般桌面没有实现:
[Desktop Entry]
Version = 1.1
Type = Application
Name = Ping
Exec = deepin-terminal -x ping baidu.com
Icon = /xxx.png
# 关联其他动作
Actions = google;sina;
[Desktop Action google]
Exec = deepin-terminal -x ping google.com
Name = Ping2
Icon = /yyy.png
[Desktop Action sina]
Exec = deepin-terminal -x ping sina.com
Name = Ping3
Icon = /zzz.png
类名 | 描述 |
---|---|
AudioVideo | 多媒体 |
Audio | 音频 |
Video | 视频 |
Development | 开发 |
Education | 教育 |
Game | 游戏 |
Graphics | 图像处理 |
Network | 网络 |
Office | 办公 |
Science | 科学 |
Settings | 设置 |
System | 系统 |
Utility | 附件 |
更细化参考: https://specifications.freedesktop.org/menu-spec/latest/apas02.html
格式:主类/子类
主类名 | 子类 | 描述 |
---|---|---|
x-content | 多媒体载体 | |
. | audio-dvd | 音乐dvd |
. | blank-cd | cd |
x-scheme-handler | url | |
. | http | http协议 |
text | 文本 | |
. | plain | 纯文本 |
. | html | html |
inode | 设备文件 | |
. | symlink | 符号链接 |
. | directory | 目录 |
application | 应用处理 | |
. | octet-stream | 文件流 |
. | zip | zip压缩 |
. | postscript | ps脚本 |
. | msword | doc文件 |
Audio | 音频文件 | |
. | mpeg | mp3 |
. | x-wav | wav |
image | 图像文件 | |
. | jpeg | jpg |
. | x-icon | ico |
. | svg+xml | svg |
video | 视频文件 | |
. | mp4 | mp4 |
. | quicktime | mov |
具体参考:https://www.iana.org/assignments/media-types/media-types.xhtml
图标支持png位图格式和svg矢量图形格式。
常用大小规格:
如果图标文件存放在以下路径,将不需要写绝对路径也可:
其中$XDG_DATA_DIRS是一个环境变量,他是一组路径。
echo $XDG_DATA_DIRS
# 我的显示:/usr/share/gnome:/usr/local/share/:/usr/share/,即图标icons目录在这三组路径下都是有效的
为了支持主题,linux的图标目录进行了精心的设计,icons目录的子目录大致按如下设计:
相关的描述信息在主题目录下的index.theme中。
默认主题是 hicolor,可将自己的图标存放到此处,然后.desktop的 Icon = 名称
即可。