最近工作遇到了desktop相关的内容,发现自己的知识盲区,写篇博客记录一下。
1. 问题场景
在Linux系统上安装desktop到/usr/share/applications
之后,开始菜单找不到应用程序。
直接原因: 系统中存在两个同名的 .desktop
文件:
~/.local/share/applications/foo.desktop # 用户目录 /usr/share/applications/foo.desktop # 系统目录
系统优先加载了用户目录的文件,导致新安装的系统级文件失效。
2. .desktop
文件基础
2.1 文件作用
.desktop
是Linux桌面应用的“快捷方式”,定义以下关键信息:
[Desktop Entry] Name=Firefox浏览器 # 显示名称 Icon=firefox # 图标(核心字段) Exec=/usr/bin/firefox # 启动命令 Categories=Network; # 分类
2.2 优先级规则
Linux遵循 “用户配置优先” 原则:
目录 | 路径 | 优先级 | 适用场景 |
---|---|---|---|
用户目录 | ~/.local/share/applications/ | 高 | 个性化定制(如修改图标、启动参数) |
系统目录 | /usr/share/applications/ | 低 | 全局默认配置 |
关键细节:
-
同名判定依据是文件名(如
foo.desktop
),而非文件内的Name
字段。 -
用户目录文件存在时,系统目录文件会被完全忽略。
3. 图标(Icon字段)配置详解
3.1 图标指定方式
方法 | 示例 | 说明 |
---|---|---|
图标名称 | Icon=firefox | 系统在标准图标目录中搜索匹配文件(如 firefox.png 、firefox.svg ) |
绝对路径 | Icon=/home/user/.icons/my-icon.png | 直接指定文件路径(需确保路径有效) |
3.2 图标存放位置
类型 | 路径 | 适用场景 |
---|---|---|
系统级图标 | /usr/share/icons/ | 所有用户共用,系统预装应用图标存放位置 |
用户级图标 | ~/.local/share/icons/ | 当前用户自定义图标,不影响其他用户 |
3.2.1 系统图标目录解析
/usr/share/icons/
包含完整主题和后备资源:
Adwaita/ # GNOME默认主题 ├── 16x16/apps/ # 小尺寸应用图标 ├── scalable/ # 矢量图标(适配任意分辨率) └── index.theme # 主题元数据 breeze/ # KDE默认主题 hicolor/ # 后备基准主题(关键目录❗)
3.2.2 用户图标推荐路径
~/.local/share/icons/hicolor/48x48/apps/myapp.png # 位图 ~/.local/share/icons/hicolor/scalable/apps/myapp.svg # 矢量
优势:
-
hicolor
是所有图标主题的 基准后备目录,即使切换系统主题,应用也会优先从此目录查找图标。 -
若将图标放在特定主题目录(如
Adwaita
),切换主题后图标可能失效。而hicolor
作为后备层,始终有效。 -
所有 Linux 应用默认会向
hicolor
注册图标,遵循此路径能确保最大兼容性。