1. 前言
在 Ubuntu 22.04 上,很多自研程序(比如 Qt 上位机)都是通过一个 run.sh 脚本启动的。每次都要打开终端、cd 到目录、再执行脚本,用起来很不方便。
本文介绍如何通过 .desktop 文件,为任意程序在桌面(或应用列表)中创建一个可双击启动的图标,并解决 Ubuntu 22.04 上「双击提示不受信任」的常见问题。
2. 原理说明
.desktop 文件是 freedesktop.org 定义的桌面入口(Desktop Entry)规范文件,本质是一个 INI 格式的文本文件,用来告诉桌面环境:
- 这个程序叫什么名字(
Name) - 用什么命令启动(
Exec) - 显示什么图标(
Icon) - 是否需要终端窗口(
Terminal) - 归到哪个分类(
Categories)
Ubuntu 22.04 使用 GNOME 桌面,出于安全考虑,桌面上的 .desktop 文件默认需要被标记为「可信」才允许双击执行。
3. 操作步骤
3.1 进入桌面目录
bash
cd ~/桌面
注意:中文系统下桌面目录是
~/桌面;英文系统下是~/Desktop。可以用xdg-user-dir DESKTOP命令确认实际路径。
3.2 创建 .desktop 文件
bash
nano myapp.desktop
在编辑器中粘贴以下内容:
ini
[Desktop Entry]
Type=Application
Name=上位机启动程序
Comment=双击启动Qt上位机脚本
Exec=/home/pc/myApp/run.sh
Icon=/home/pc/myApp/icon_run.png
Terminal=false
Categories=Utility;
保存退出(Ctrl+O 保存,Enter 确认,Ctrl+X 退出)。
3.3 标记为可信并赋予执行权限
bash
gio set ~/桌面/myapp.desktop metadata::trusted true
chmod +x ~/桌面/myapp.desktop
执行完成后,桌面上的图标即可正常双击启动。
4. 字段详解
| 字段 | 说明 | 注意事项 |
|---|---|---|
Type |
入口类型 | 固定为 Application |
Name |
显示名称 | 支持中文,会显示在图标下方 |
Comment |
描述信息 | 鼠标悬停时显示 |
Exec |
启动命令 | 必须是绝对路径 ,不能写 ~ |
Icon |
图标路径 | 绝对路径,支持 png/svg;也可写系统图标名 |
Terminal |
是否打开终端 | 脚本需要看输出时设为 true |
Categories |
应用分类 | 以分号结尾,如 Utility;Development; |
5. 常见问题排查
5.1 双击提示「不受信任的应用程序启动器」
说明 metadata::trusted 没有设置成功。可以重新执行:
bash
gio set ~/桌面/myapp.desktop metadata::trusted true
也可以在图标上右键,选择「允许启动」。
5.2 双击后没有任何反应
最常见的原因是 Exec 指向的脚本没有执行权限,或者脚本内部使用了相对路径。检查:
bash
ls -l /home/pc/myApp/run.sh
chmod +x /home/pc/myApp/run.sh
同时建议在 run.sh 开头加上 cd "$(dirname "$0")",保证脚本内部相对路径正确:
bash
#!/bin/bash
cd "$(dirname "$0")"
./myApp
5.3 图标不显示
确认 Icon 路径存在且为绝对路径:
bash
ls -l /home/pc/myApp/icon_run.png
如果图标是 svg 或 png 但显示为空白,可以尝试换成系统内置图标名(如 utilities-terminal)验证是否是路径问题。
5.4 想同时出现在应用列表里
把文件复制到用户级应用目录即可:
bash
cp ~/桌面/myapp.desktop ~/.local/share/applications/
update-desktop-database ~/.local/share/applications
之后在「显示应用程序」中搜索「上位机启动程序」就能找到。
6. 完整脚本一键生成
如果经常需要给不同程序创建图标,可以写一个小脚本自动完成:
bash
#!/bin/bash
# create_desktop_entry.sh
APP_NAME="$1"
APP_EXEC="$2"
APP_ICON="$3"
DESKTOP_FILE="$HOME/桌面/${APP_NAME}.desktop"
cat > "$DESKTOP_FILE" <<EOF
[Desktop Entry]
Type=Application
Name=${APP_NAME}
Comment=双击启动 ${APP_NAME}
Exec=${APP_EXEC}
Icon=${APP_ICON}
Terminal=false
Categories=Utility;
EOF
chmod +x "$DESKTOP_FILE"
gio set "$DESKTOP_FILE" metadata::trusted true
echo "已创建:$DESKTOP_FILE"
使用方式:
bash
chmod +x create_desktop_entry.sh
./create_desktop_entry.sh "上位机启动程序" "/home/pc/myApp/run.sh" "/home/pc/myApp/icon_run.png"
7. 小结
创建桌面启动图标的核心只有三步:写 .desktop 文件 → 设置可信标记 → 赋予执行权限 。Ubuntu 22.04 上最容易踩的坑就是忘记 gio set metadata::trusted true,导致双击时提示不受信任。掌握这些之后,任何脚本或程序都可以像系统应用一样双击启动。