关于应用菜单从.desktop文件识别子分类及分类底层存储机制的技术问询
嘿,这个问题问到点子上了!作为天天跟桌面环境配置打交道的人,我来给你把这背后的逻辑掰碎了说:
1. 核心依据:.desktop文件里的Categories字段
咱桌面上的每个应用快捷方式,本质上都是存放在/usr/share/applications/(系统级)或~/.local/share/applications/(用户级)的.desktop后缀文件。而应用分类的关键,就藏在文件里的Categories字段里。
举个例子,你打开Firefox的桌面文件看看:
cat /usr/share/applications/firefox.desktop
就能看到类似这样的配置行:
Categories=Network;WebBrowser;
这些分类标签可不是随便瞎写的,它们遵循freedesktop.org的XDG桌面菜单规范,有一套预定义的标准分类,比如:
AudioVideo(音视频类)、Development(开发工具)Education(教育软件)、Game(游戏)Graphics(图形图像)、Network(网络工具)Office(办公软件)、Settings(系统设置)System(系统工具)、Utility(实用小工具)
你也可以加自定义分类,但只有标准分类能被GNOME Flashback、KDE Plasma这些主流桌面环境自动识别并归类到对应的菜单文件夹里。
2. 桌面环境怎么把分类变成菜单层级?
除了单个应用的.desktop文件,桌面环境还依赖一套菜单配置文件(.menu格式),这些文件一般存在/usr/share/desktop-directories/或~/.local/share/desktop-directories/下。
这些.menu文件定义了菜单的层级结构:比如哪个分类属于哪个父文件夹,WordProcessor(文字处理)要归到Office(办公)下面,Spreadsheet(电子表格)也属于Office的子分类。桌面环境启动时,会同时扫描.desktop和.menu文件,把带有对应Categories标签的应用,自动塞进预设的菜单层级里——这就是你看到的类似Windows开始菜单的文件夹结构。
3. MenuLibre是怎么工作的?
MenuLibre说白了就是个可视化的「.desktop + .menu文件编辑器」,它帮你省去了手动改配置文件的麻烦:
- 当你在MenuLibre里把应用拖到某个分类时,它其实是直接修改该应用
.desktop文件里的Categories字段,自动加上对应的标准标签; - 如果你要自定义菜单层级,它也能帮你编辑
.menu文件,创建新的文件夹/子菜单,并关联对应的分类标签,确保桌面环境能正确识别这个自定义结构。
小彩蛋:手动验证分类规范
如果你想自己检查某个.desktop文件的分类是否符合XDG标准,可以用这个命令:
desktop-file-validate /path/to/your/app.desktop
它会告诉你哪里不符合规范哦!
备注:内容来源于stack exchange,提问作者Blacklight MG

