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

相关推荐
Linux运维技术栈1 小时前
CVE-2026-91403 高危漏洞预警:Java JSSE 信任链被攻破 全场景修复方案与Linux系统级彻底清理实操
java·linux·安全·jdk·信任链
H.莓飛1 小时前
【数据结构】快速排序专题
linux·服务器·c语言·数据结构·visual studio
箓维1 小时前
网络基础(2)IP和MAC的区别与报文封装
linux·网络
小HANN1 小时前
(索引 + SQL 优化):《MySQL 底层探秘②:B + 树索引与 Explain 实战,根治线上慢 SQL》
linux·运维·服务器·经验分享
lisanmengmeng1 小时前
pushgateway
linux·运维·服务器·网络
Rabitebla1 小时前
【Linux底层原理】 工具篇(二):Vim 编辑器基础操作与简单配置
linux·c++·编辑器·vim
wuminyu2 小时前
JVM规范学习总结-JVM规范基本概念
java·linux·c语言·jvm·c++
进击的荆棘2 小时前
Linux系统——进程间通信之system V
linux·共享内存·system v
水饺编程13 小时前
第2章:Linux 基础,切换到超级用户
linux·c语言·汇编