Ubuntu 22.04 为程序添加桌面启动图标(.desktop 完整实践)

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,导致双击时提示不受信任。掌握这些之后,任何脚本或程序都可以像系统应用一样双击启动。

相关推荐
鱼听禅7 分钟前
Ubuntu安装YOLOv8进行菌落识别训练
linux·python·yolo·ubuntu
测试界的小码农14 分钟前
【Linux 命令实战(04):文件内容查看,掌握 cat、less、head、tail】
linux·服务器·less
CodeYp20191 小时前
第13讲:HTTPS 协议原理
linux·https
一条破秋裤2 小时前
【1112】Linux中断【整理】
linux·运维·服务器
CodeYp20193 小时前
第14讲:传输层协议 UDP
linux·udp
北京迅为3 小时前
案例分享 | RK182X算力卡:多路视频VLM监控,四路画面AI同时看懂,一句人话说清现场
linux·人工智能·嵌入式·rk3588·算力卡·rk182x
lzx_00215 小时前
Linux 进程(三) 从进程状态到僵尸进程、孤儿进程
linux·服务器
FlightYe17 小时前
音视频修炼之容器与协议(四):RTSP详解
android·linux·ffmpeg·音视频·dash
刘马想放假18 小时前
CANviz 使用指南|Linux 安装、DBC 解码、实时曲线与 J1939 实战
linux·python·websocket
kloc19 小时前
聊天室项目入口网关子服务的实现
linux·c++