说句实话,高版本 Ubuntu(尤其是 22.04 LTS 之后的 GNOME 桌面环境)里想创建一个桌面快捷方式,不少老用户第一次都会懵。以前在 GNOME 2 或者 Unity 时代,桌面右键菜单里直接就有"创建启动器"的选项,填个路径、起个名字,完事。现在你再点桌面右键,菜单里只剩"新建文件夹""新建文档""更改背景"之类,完全没有"快捷方式"或者"启动器"的入口。于是很多人第一反应是去网上搜"ubuntu 桌面快捷方式怎么创建",结果搜出来一堆过时的教程,照着改了半天还不行,最后连桌面图标都显示成"未信任的启动器"。
这篇文章就是想把这件看似琐碎、实则坑很多的小事讲透。我会从 Ubuntu 高版本桌面快捷方式的本质讲起,给你三套可落地的创建方法,再完整跑一个实际案例,最后把双击没反应、图标白板、无法信任这类高频问题集中排查一遍。无论你是刚装完 Ubuntu 想放个应用图标到桌面,还是想给共享目录、脚本、AppImage 做一个入口,看完这篇基本都能自己搞定。
1. 为什么高版本 Ubuntu 把"快捷方式入口"藏起来了
1.1 不是功能没了,是桌面换了一套逻辑
很多人以为高版本 Ubuntu 把桌面快捷方式功能"砍了",其实不是。从 17.10 开始 Ubuntu 就默认用 GNOME Shell 替代了 Unity,而 GNOME 桌面从一开始就坚持"极简主义":桌面不是给你堆图标的,而是让你放临时文件、挂载磁盘的地方。GNOME 官方对桌面图标本来就不太积极,早期版本甚至默认不显示桌面图标,后来社区做了扩展才加回来。
Ubuntu 在 GNOME 之上做了一些定制,保留了桌面图标功能,但右键菜单里没有提供"创建快捷方式"的图形入口。这不代表快捷方式机制没了,Linux 桌面的快捷方式其实一直是一种叫 .desktop 的文本文件,只是没有哪个文件管理器默认给你"新建 .desktop 文件"的菜单项。理解了这一点,你就明白:所谓"创建桌面快捷方式",本质上是在桌面目录下创建一个符合规范的 .desktop 文本文件,并给它正确的执行权限和信任标记。
1.2 快捷方式的本质是 .desktop 文件
.desktop 文件不是 Ubuntu 特有的,它是 freedesktop.org 标准里定义的一种"桌面入口文件",几乎所有 Linux 桌面环境(GNOME、KDE、XFCE、Cinnamon 等)都认这套规范。一个典型的 .desktop 文件长这样:
ini复制[Desktop Entry]
Type=Application
Name=Firefox
Comment=Web Browser
Exec=/usr/bin/firefox %u
Icon=firefox
Terminal=false
Categories=Network;WebBrowser;
StartupNotify=true
字段的意思很直白:
[Desktop Entry]标识这是一个桌面入口文件。Type表示入口类型,常见的是Application(启动应用)和Link(打开目录或网址)。Name是显示名称,可以写中文,会在图标下方显示。Comment是鼠标悬停时的提示文字,可省略。Exec是实际要执行的命令,这里能写绝对路径,也能带参数。Icon指定图标,可以写系统图标名,也可以写图标文件的绝对路径。Terminal控制是否在终端中运行,图形程序填false,命令行程序填true。Categories用于应用菜单分类,桌面快捷方式一般用不上,但如果你想让快捷方式出现在应用列表里,这个字段最好填上。StartupNotify是启动反馈,快速启动的小工具填false可以减少闪烁感,正常应用填true更自然。
桌面环境靠文件名后缀 .desktop 识别它,靠 Exec 字段决定双击后运行什么,靠 Icon 字段决定显示什么图标。整个系统简单、透明,出问题也容易排查。
1.3 系统和用户级位置:放错目录会导致奇怪问题
.desktop 文件可以放在不同位置,系统根据位置决定它的"作用范围":
/usr/share/applications/:系统级快捷方式,对所有用户生效,一般由软件包安装时自动生成。~/.local/share/applications/:当前用户的应用菜单入口,只对你自己生效。~/桌面/(或~/Desktop/,取决于系统语言):放在这里的.desktop文件就是"桌面快捷方式"。
有两点要特别注意。第一,桌面目录的路径和语言环境有关,Ubuntu 中文系统是 ~/桌面,英文系统是 ~/Desktop,写脚本时别写死。第二,如果你想放进应用菜单又不想污染系统目录,就放 ~/.local/share/applications/;如果只是想放到桌面,就直接放桌面目录,不需要重复放一份到应用目录。两种位置的功能不冲突,但用途不同,很多人短路径改错了,导致菜单里能看到图标、桌面上却始终不显示,排查起来还挺折腾。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 创建桌面快捷方式的三种主流方法
2.1 方法一:手动写 .desktop 文件(最通用,推荐掌握)
手动创建 .desktop 文件是绕不开的基础方法,掌握以后不管遇到什么软件都能自己搞定。步骤很简单:
- 在桌面新建一个文本文件,把扩展名改成
.desktop。比如在文件管理器中右键选择"新建文档 -> 空文档",然后重命名为myapp.desktop。 - 用文本编辑器打开,写入规范内容。
- 保存后,在终端中给文件添加执行权限:
chmod +x ~/桌面/myapp.desktop。 - 在文件管理器中右键这个文件,选择"允许启动";如果没这个选项,执行
gio set命令手动打上信任标记。
你可能在教程里看到过"需要先执行 chmod +x,否则双击无效",确实是这个顺序。先给执行权限,再右键"允许启动",桌面图标才会正常响应双击。
2.2 方法二:复制系统已有快捷方式到桌面
很多应用装完后,在应用菜单里是有图标的,对应的 .desktop 文件就躺在 /usr/share/applications/ 里。与其手动写,不如直接复制一份到桌面,改改显示名就行。比如我想把系统自带的 Firefox 放到桌面,可以执行:
bash复制cp /usr/share/applications/firefox.desktop ~/桌面/
chmod +x ~/桌面/firefox.desktop
gio set ~/桌面/firefox.desktop metadata::trusted true
这种方法最大的好处是不用自己猜 Exec 路径和 Icon 名称,系统已经帮你写好了。缺点是系统级 .desktop 文件里可能带一些额外字段,比如 Actions=NewWindow、X-GNOME-Ubuntu-...,复制到桌面后这些字段大多数不影响使用,但如果遇到奇怪问题,可以手动删掉多余字段。
如果你用的不是 Ubuntu 默认桌面,而是 GNOME 桌面但桌面上没有图标,可能需要先确认一下系统是否开启了桌面图标扩展。Ubuntu 默认通过 desktop-icons-ng 或 ubuntu-dock 配合显示桌面图标,一般不用额外操心。
2.3 方法三:用图形化工具 MenuLibre 创建
如果你实在不想碰命令行,Ubuntu 软件仓库里有一个图形化工具叫 menulibre,可以帮你编辑应用菜单条目,也能直接生成 .desktop 文件:
bash复制sudo apt install menulibre
安装后在应用菜单里搜 MenuLibre 打开,左侧选择你要编辑的类别,点击"新建"就能填名称、命令、图标、注释。填完保存后,它会自动生成 .desktop 文件并放到 ~/.local/share/applications/。之后你可以从应用菜单里把这个新条目复制到桌面,也可以用 cp 命令复制,或者直接在文件管理器里把 /usr/share/applications/ 下对应文件拖到桌面。
用图形工具的好处是能避免手写时不小心打错单词,比如 Terminal 少写一个字母导致双击没反应。缺点是 MenuLibre 的界面布局有点过时,第一次打开可能找不到"新建"按钮,通常在左上角有一个加号图标或者在"文件"菜单里。说实话,如果你已经会写 .desktop 文件,MenuLibre 的意义就没那么大了,它更适合完全不碰终端的用户。
3. 实战:给任意软件创建桌面快捷方式
3.1 定位程序路径与图标资源
不管用什么方法,创建快捷方式前第一个要搞清楚的事情就是:程序的可执行文件到底在哪个路径。
如果是通过 apt 安装的普通软件,基本都在 /usr/bin/ 下,用 which 命令一看便知:
bash复制which firefox
which idea.sh
which code
如果是手动解压的绿色版软件,比如下载了 IntelliJ IDEA 的 tar.gz 解压到 /opt 或 ~/apps,那路径就是你自己解压的位置。举个例子,IDEA 解压后目录结构一般是这样的:
code复制/opt/idea-IU-231.8109.175/
├── bin/
│ ├── idea.sh
│ └── idea64.vmoptions
└── ...
你需要在 .desktop 文件里写的 Exec 就是 /opt/idea-IU-231.8109.175/bin/idea.sh,实际以你解压的路径为准。
图标资源这块,如果程序目录里自带 .png 或 .svg 图标,优先用绝对路径指定,图标不会丢失。如果程序没有自带图标,可以去 /usr/share/icons/ 或者 /usr/share/pixmaps/ 下找一个接近的图标,或者搜一款自己喜欢的小图标放到 ~/.local/share/icons/ 目录。图标文件不强制,但只写文字没有图形的桌面图标看起来总觉得缺了点东西。
3.2 编写一个能用的 .desktop 文件
以 IntelliJ IDEA 为例,假设我把程序解压到了 /opt/idea/,那么完整流程如下。
先在桌面创建一个文件:
bash复制cd ~/桌面
touch intellij-idea.desktop
然后用文本编辑器打开,写入:
ini复制[Desktop Entry]
Type=Application
Name=IntelliJ IDEA
Comment=Java IDE
Exec=/opt/idea/bin/idea.sh
Icon=/opt/idea/bin/idea.png
Terminal=false
Categories=Development;IDE;
StartupWMClass=jetbrains-idea
这里有几个字段值得解释一下。
Exec 不能带 ~ 符号,要写绝对路径。很多人把 Exec=~/opt/idea/bin/idea.sh 写进去,双击后就是没反应。原因是 .desktop 规范的 Exec 字段不会帮你展开 ~,必须用路径本身,或者写成 Exec=/home/你的用户名/opt/idea/bin/idea.sh。
Icon 我特意用了绝对路径。如果你写 Icon=idea,系统会去所有主题目录里找名为 idea 的图标,找不到就显示白板;写绝对路径最保险。IDEA 解压目录的 bin 下面通常有 idea.png,找到对应的图片路径填进去就行。
StartupWMClass 的用途稍后再细说,这里你先照着填一个与程序相关的字符串,它能帮你避免 Dock 上出现两个图标的问题。要注意这个值不是随便写的,它要和程序实际对应的窗口类名匹配,不匹配就没效果,后续我会讲怎么查。
写完后执行:
bash复制chmod +x ~/桌面/intellij-idea.desktop
gio set ~/桌面/intellij-idea.desktop metadata::trusted true
这时再看桌面,图标应该已经出现,双击能正常启动。
3.3 设置可执行权限并让系统信任
如果你在桌面上创建 .desktop 文件后,双击弹出提示"未信任的应用程序启动器"或者"应用程序启动器",说明文件缺少可执行权限或信任标记。GNOME 文件管理器(Nautilus)出于安全考虑,不会运行它认为"不可信"的 .desktop 文件。
处理方式有两种:
一种是通过文件管理器右键,选择"属性 -> 权限 -> 勾选允许作为程序执行文件",然后再右键选择"允许启动"。菜单文本在不同版本略有差异,有的版本直接在右键菜单里就有"允许启动"选项,有的版本需要先勾选执行权限才会出现。
另一种是命令行方式,完全取代鼠标操作:
bash复制chmod +x ~/桌面/intellij-idea.desktop
gio set ~/桌面/intellij-idea.desktop metadata::trusted true
执行完这两条,文件的信任问题就解决了。即使以后移动到别的目录,只要文件本身没重新覆盖过,信任标记一般还会保留。
3.4 让快捷方式固定到 Dock 与工作区
桌面快捷方式创建好之后,很多人会顺手问:怎么把这个图标固定到 Dock 栏?在 Ubuntu 默认的 Dock(Ubuntu Dock)里,你只需要先启动这个应用一次,然后右键 Dock 上的运行中图标,选择"添加到收藏夹",之后就能在 Dock 上直接点击启动了。
但我遇到过一种情况:应用启动了,Dock 上却出现了一个"未命名"的灰色图标,跟桌面快捷方式图标不是同一个。这个问题的根源是 .desktop 文件里的 StartupWMClass 字段和程序实际窗口类不匹配,导致 Dock 不知道这个窗口对应哪个快捷方式,于是生成了一个临时图标。
解决办法是查询程序窗口的类名。先在终端里运行程序,然后执行:
bash复制xprop WM_CLASS
鼠标会变成一个十字符号,点击程序窗口,终端会输出类似 WM_CLASS(STRING) = "jetbrains-idea", "jetbrains-idea" 的内容。取第一个字符串填到 StartupWMClass 里,改完重启应用就能生效。
如果懒得查,也可以给 .desktop 文件加上一行 StartupWMClass=... 后重启应用试试,不匹配就再查,反复两三次基本能找到规律。不同软件输出的类名不同,有的需要大写开头,有的全小写,以 xprop 结果为准。
4. 常见问题排查与避坑技巧
4.1 双击没反应,或提示"未信任的应用程序启动器"
这个问题的原因我在 3.3 节提过,这里系统地归类一下。双击 .desktop 没反应,排查顺序应该是:
- 确认文件是否在桌面目录下。别笑,真的有人把文件放到了
~/Desktop_old之类的目录。 - 确认文件是否有执行权限:
ls -l ~/桌面/xxx.desktop,输出中应该有-rwxr-xr-x这样的权限位。 - 确认是否打了信任标记:执行
gio info ~/桌面/xxx.desktop | grep metadata,看有没有metadata::trusted: true。 - 确认
Exec路径是否正确:直接在终端里把Exec后面的命令复制出来运行一遍,排除程序本身的问题。 - 确认文件内容编码或多余字符:用
cat -A检查文件末尾有没有^M符号,如果是在 Windows 下编辑过的文件,可能会有 CRLF 换行符,导致解析异常。
如果第 4 步终端里能正常启动,说明程序没问题,问题基本出在权限或路径上。
4.2 图标显示成白板或问号
图标不显示,基本都是 Icon 字段的问题。我遇到过的情况主要有这几种:
Icon=xxx写的图标名在系统里不存在。解决方法是改成绝对路径,比如Icon=/opt/myapp/icon.png。- 图标路径写对了但文件本身损坏或权限不对。给图标文件也加上读权限:
chmod +r /opt/myapp/icon.png。 - PNG 图标显示正常,SVG 图标在某些图标主题下加载失败。尝试换 PNG 格式。
.desktop文件编码问题导致Icon字段值尾部有隐藏空格。仔细检查每个字段末尾有没有拖空格。
强烈建议在正式使用前把 Icon 统一改成绝对路径,尤其是手动创建的快捷方式,这能从根本上避免很多图标问题。系统菜单里的应用图标往往引用图标主题名称,桌面这类特殊环境下却经常找不到对应图标,这是我踩过很多次坑后的经验。
4.3 终端运行正常,桌面双击闪退
这类问题比较隐蔽,原因可能是程序启动时需要某个环境变量,而终端环境里你通过 .bashrc 或 .profile 已经设置过了,桌面会话没有加载那些变量。比如你装了某个软件到 /opt/tool/bin,然后在 .bashrc 里加了 export PATH=/opt/tool/bin:$PATH,终端启动没问题,但双击桌面快捷方式时,GNOME 会话并不会读取 .bashrc。
解决办法是在 Exec 里显式带上环境变量:
ini复制Exec=env PATH=/opt/tool/bin:/usr/bin:/bin /opt/tool/bin/mytool
或者写一个启动脚本 start.sh,在脚本里先定义环境变量,再启动程序,让 .desktop 的 Exec 指向这个脚本。
另一个常见原因是工作目录不对。某些程序要找它自己的安装目录作为当前目录,如果你从桌面双击,当前目录是桌面,程序就找不到它需要的资源文件。同样可以用启动脚本解决:
bash复制#!/bin/bash
cd /opt/myapp
./bin/startup
.desktop 的 Exec 指向 /opt/myapp/start.sh。
4.4 Dock 或任务栏出现两个图标
我已经在上文提到这是 StartupWMClass 不匹配导致的问题。除了用 xprop WM_CLASS 查询,还有一个小技巧:把 .desktop 文件里的 StartupWMClass 先去掉,重新启动应用,Dock 通常会显示一个默认图标,然后你把桌面快捷方式从这时开始再固定到收藏,有时也能避开双图标问题,但治标不治本,最稳妥的还是查类名。
还有个小知识点:.desktop 文件名不要用中文和空格,尽量用英文加连字符。文件名虽然不影响显示名称,但在某些依赖文件名的场景下,特殊字符会导致奇怪的故障。
4.5 关于"桌面快捷方式箭头"和共享盘快捷方式
搜索热词里经常有人问"去掉桌面快捷方式箭头",这是从 Windows 带来的习惯。Linux 桌面没有那种小箭头遮罩,不用担心这个问题;真正的问题是"未信任"提示。在 Ubuntu 上你看到的是"未信任的应用程序启动器"而不是箭头,右键选择"允许启动"即可解决。
共享盘创建桌面快捷方式是高频需求,特别是公司内部有 SMB/NFS 共享目录时。这一类不适用 Type=Application,应该用 Type=Link:
ini复制[Desktop Entry]
Type=Link
Name=公司资料盘
URL=/mnt/share
Icon=folder-remote
注意 Type=Link 时 URL 字段要用共享目录挂载后的本地路径,双击会在文件管理器中打开该目录。如果是 samba 地址,可以使用 URL=smb://server/share,但如果没装相关客户端,响应可能很慢。更推荐先把共享盘挂载到本地目录,再建快捷方式。
5. 进阶玩法与效率技巧
5.1 用命令批量创建多个快捷方式
当你需要为多个程序创建桌面快捷方式时,一个个写文件太慢了。我一般准备一个简单的函数,放到 ~/.bashrc 里,需要时直接调用:
bash复制create_desktop_entry() {
local name="$1"
local exec="$2"
local icon="$3"
local file="$HOME/桌面/$name.desktop"
cat > "$file" <<EOF
[Desktop Entry]
Type=Application
Name=$name
Exec=$exec
Icon=$icon
Terminal=false
EOF
chmod +x "$file"
gio set "$file" metadata::trusted true
echo "已创建: $file"
}
然后这样用:
bash复制create_desktop_entry "IDEA" "/opt/idea/bin/idea.sh" "/opt/idea/bin/idea.png"
create_desktop_entry "VS Code" "/usr/bin/code" "code"
这个函数只覆盖了最常用字段,如果你需要 Terminal=true 或 StartupWMClass,可以再扩展参数。注意函数里用了 ~/桌面,在英文系统里要改成 ~/Desktop,或者两者都判断一下。
5.2 环境变量参数与启动器优化
有些时候你想让快捷方式运行时带固定参数,比如 Chrome 以无头模式启动,或者启动某个 Java 程序时指定内存大小。直接在 Exec 后面加参数就行:
ini复制Exec=/usr/bin/google-chrome-stable --headless=new --disable-gpu
但如果参数很长,建议还是包一层脚本。一个原因是 .desktop 规范对 Exec 的字段解析有特定规则,复杂引号容易出错;另一个原因是脚本更好维护,以后要改内存参数或 JVM 参数,直接改脚本,不用动桌面文件。
对于 AppImage 类型的软件,很多新手会直接双击运行,但有时双击没反应。AppImage 通常先要给它执行权限:
bash复制chmod +x ~/Downloads/xxx.AppImage
然后创建 .desktop 文件时,Exec 指向这个 AppImage 的绝对路径。如果 AppImage 需要挂载 fuse,但双击启动失败,可以先在终端运行一次,看报错信息。常见错误是 fusermount 未安装,执行 sudo apt install fuse3 一般能解决。
5.3 处理系统级应用菜单里没有的快捷方式
如果你创建的快捷方式想出现在所有用户的桌面或者应用菜单里,可考虑放到 /usr/share/applications/,但这样做需要 sudo 权限,而且系统升级时可能被覆盖。所以个人使用我始终推荐放在用户目录。
如果希望应用菜单里也能搜到自己创建的快捷方式,可以做一个软链接,从桌面目录链到应用目录:
bash复制ln -s ~/桌面/myapp.desktop ~/.local/share/applications/myapp.desktop
注意这里链接的路径要写绝对路径或完整相对路径,否则菜单里可能显示不出来。软链接方式的好处是只维护一份真实文件,改桌面上的文件,菜单里的条目自动同步变化。
但有个需要注意的地方:如果桌面路径是 ~/桌面,而应用菜单读取的是 ~/.local/share/applications,两边编码和路径都没问题,但某些第三方程序菜单搜索可能不会读取软链接文件。我遇到过一次,Menulibre 编辑时能显示,GNOME 搜索却找不到,最后直接把真实文件放到了应用目录,不做软链接,就正常了。所以这个场景下,如果追求百分之百可靠,就直接复制一份而不是软链接。
5.4 给快捷方式绑定键盘快捷键
除了双击运行,其实还可以给任意 .desktop 入口绑定键盘快捷键,这在 GNOME 下是原生支持的。打开"设置 -> 键盘 -> 查看及自定义快捷键 -> 自定义快捷键",点"+"号,名称随便填,命令那栏填:
bash复制gtk-launch myapp.desktop
关键是 gtk-launch 这个工具,它会按照 freedesktop 标准去应用目录里查找 .desktop 文件并启动对应程序。如果你刚才把快捷方式放在了 ~/.local/share/applications/ 下,那 gtk-launch myapp 就能直接启动;如果只在桌面目录,可以先复制一份到应用目录。绑定好快捷键后,不管你在哪个窗口,按下组合键都能拉起这个应用。
这招在每天要频繁切换 IDE、调试工具、内部管理系统时特别好用。我个人会为 IDEA、终端、浏览器各绑一组快捷键,效率提升立竿见影。需要注意的是,gtk-launch 的 .desktop 文件名不要带 .desktop 后缀,命令里直接写入口名即可。
6. 总结以外:给桌面快捷方式“减负”的几点经验
写了这么多,其实核心就一句话:高版本 Ubuntu 的桌面快捷方式不是"没有功能",而是把功能藏在了 .desktop 文件背后。理解了这个文件结构,不管官方怎么改界面,你都能快速适应。下面再分享几条我自己实测下来的心得。
第一,尽量让 .desktop 文件保持干净。系统软件包生成的 .desktop 文件字段很多,手动创建时别照搬一堆没用的字段,能少则少。字段越少,排查问题越容易。
第二,图标资源尽量自包含。如果软件是绿色版、AppImage、或者自己编译的,很多情况下没有系统级图标,把图标文件放到 ~/.local/share/icons/ 下并指定绝对路径,比单独塞到某个软件目录里更稳妥。以后卸载软件时,也不会把图标一起删掉。
第三,善用"Exec=env 加变量"这个技巧。不少第三方软件在 GNOME 桌面环境下双击无响应,十有八九是缺环境变量或工作目录问题。与其到处找原因,不如先写个启动脚本包一下,把 cd 和 export 都放进去,省得以后反复折腾。
第四,没事别往 /usr/share/applications/ 里写东西。我自己以前贪方便,往系统目录放快捷方式,结果系统升级后全部被覆盖,还得重新配置。用户级目录完全够用,也不影响别人。
最后再分享一个小技巧:如果你在文件管理器里拖动某个 .desktop 文件到桌面,发现图标没出现,先别怀疑系统坏了,看下是不是在拖动的过程中不小心把文件拖进了某个子文件夹。这种事我干过不止一次,桌面目录下莫名其妙多了个快捷方式副本,桌面上却什么都没有。文件管理器的"显示桌面"和真实桌面目录之间偶尔会有不同步的情况,按 F5 刷新或重新登录一次桌面就恢复了。
高版本 Ubuntu 的桌面快捷方式,说难不难,说简单也有一堆分支场景。但只要你掌握了 .desktop 文件的写法、权限设置和信任标记这三个关键点,剩下的都是举一反三的体力活。希望这篇内容能帮你少走点弯路。
