Linux下KDE桌面创建自定义右键菜单

KDE Plasma桌面是Linux平台上一款现代化的桌面环境,并被集成到了多个发行版中。在使用Linux桌面系统的过程中,右键菜单是提高我们工作使用效率的重要工具,在文件管理器中,通过右键菜单可以快速地使用一些应用程序打开或者处理一些文件。

1,右键菜单配置文件位置

不同于Windows下使用注册表添加自定义右键菜单的方式,在KDE桌面的Dolphin文件管理器中,我们需要在指定位置编写desktop文件实现桌面右键菜单的自定义。

以Debian 12为例,在其最新的5.103.0版本的KDE框架中,右键菜单配置文件位置如下:

  • 用户级别:~/.local/share/kio/servicemenus
  • 全局级别:/usr/share/kio/servicemenus

对于用户级别的配置,只会在其对应的用户生效,全局级别则对所有用户生效。

需要注意的是,在旧版本的KDE框架(5.85版本之前),右键菜单配置存放在~/.local/share/kservices5/usr/share/kservices5中,并且需要额外添加ServiceTypes=KonqPopupMenu/Plugin字段。

2,编写右键菜单文件

这里我们来创建一个能够使用右键调用VSCode打开目录或者文件的全局右键菜单,进入/usr/share/kio/servicemenus目录,创建名为open-in-vscode.desktop文件并赋予可执行权限:

bash 复制代码
cd /usr/share/kio/servicemenus
sudo touch open-in-vscode.desktop
sudo chmod +x open-in-vscode.desktop

然后使用任意文本编辑器编辑该文件,加入下列内容:

ini 复制代码
[Desktop Entry]
Type=Service
MimeType=inode/directory;application/octet-stream;
Actions=openInVSCode

[Desktop Action openInVSCode]
Name=在VSCode打开
Icon=vscode
Exec=code %f

首先我们需要声明一个[Desktop Entry]块,这是右键菜单配置的基本信息,有下列字段:

  • Type 表示配置文件类型,固定为Service即可,表示右键菜单
  • MimeType 表示该右键菜单的作用文件类型,也就是指定在什么类型的文件上点击鼠标右键时,才会显示该右键菜单选项 ,使用MIME类型表示,多个类型之间使用英文分号;隔开,只有一个类型时最好也以英文分号;结尾,常用类型例如:
    • application/octet-stream 表示任何文件
    • inode/directory 表示任何目录,支持选择目录后右键或在进入某个目录后右键空白处使用该右键菜单
    • image/png PNG图像
    • image/* 表示所有图片类型文件(KDE右键菜单类型支持通配符)
  • Actions 指定动作名称,即点击该右键菜单后执行的命令,动作配置在下面

那么[Desktop Action openInVSCode]块就是声明具体的动作了,即点击右键菜单后的行为 。动作名称可以自定义,最好使用小驼峰命名法,这里的动作名称就是openInVSCode,可见与[Desktop Entry]里面的Actions指定的动作名称值是对应的。

有下列字段:

  • Name 菜单显示名称
  • Icon 菜单图标,该字段可省略,对于系统图标库中有的图标可直接指定名称,否则需要指定图片(例如PNG、JPG、SVG等图片)绝对路径
  • Exec 点击该右键菜单后执行的命令,可见其中使用了%f变量表示选中的第一个文件(即仅匹配单个文件),变量列表可参考Free Desktop配置文件规范对应部分,这里讲解一下常见的:
    • %f 表示点击右键时,鼠标选中的单个文件或者文件夹,若选择了多个文件则仅使用第一个文件(夹)
    • %F 表示点击右键时,鼠标选中的所有文件或者文件夹,选择了多个也会被全部传递给命令,通常是以空格隔开
    • %u 表示点击右键时,鼠标选中的单个文件或者文件夹链接或者文件地址,若选择了多个文件则仅使用第一个文件(夹)
    • %U 表示点击右键时,鼠标选中的所有文件或者文件夹链接或者文件地址,若选择了多个文件则仅使用第一个文件(夹)

对于Exec中的变量,事实上%f%u在日常使用区别并不大。

到此,一个自定义菜单就完成了!效果如下:

3,右键菜单分组

假设有一系列类似的功能,我们又不想将其全部平铺在右键菜单中,就可以进行分组。比如说我安装了多个Jetbrains系列的开发工具,且都需要添加它们右键打开目录的菜单项,那么就可以将其归为一组。

同样地,在/usr/share/kio/servicemenus目录下创建一个desktop文件例如run-in-jetbrains.desktop,编辑内容如下:

ini 复制代码
[Desktop Entry]
Type=Service
MimeType=inode/directory;
Actions=openInIdea;openInWebStorm;openInGoLand;
X-KDE-Submenu=使用Jetbrains开发工具打开

[Desktop Action openInIdea]
Name=在IDEA打开
Icon=/opt/jetbrains/idea/bin/idea.svg
Exec=/opt/jetbrains/idea/bin/idea %f

[Desktop Action openInWebStorm]
Name=在WebStorm打开
Icon=/opt/jetbrains/webstorm/bin/webstorm.svg
Exec=/opt/jetbrains/webstorm/bin/webstorm %f

[Desktop Action openInGoLand]
Name=在GoLand打开
Icon=/opt/jetbrains/goland/bin/goland.svg
Exec=/opt/jetbrains/goland/bin/goland %f

可见这里:

  • 我们定义了多个动作[Desktop Action xxx]块,并将所有动作名称全部声明在了[Desktop Entry]Actions字段,每个名称也是使用英文分号;隔开
  • 此外,在[Desktop Entry]块下添加了个X-KDE-Submenu字段,表示分组菜单项名称

最终效果如下:

本文参考文档:

  • KDE Dolphin开发者文档-自定义服务菜单:传送门
相关推荐
czhc11400756638 分钟前
Linux 76 rsync
linux·运维·python
蓝易云1 小时前
Qt框架中connect()方法的ConnectionType参数使用说明 点击改变文章字体大小
linux·前端·后端
花落已飘2 小时前
多线程 vs 异步
linux·网络·系统架构
PanZonghui2 小时前
Centos项目部署之Nginx部署项目
linux·nginx
码出钞能力3 小时前
linux内核模块的查看
linux·运维·服务器
星辰云-3 小时前
# Linux Centos系统硬盘分区扩容
linux·运维·centos·磁盘扩容
聽雨2374 小时前
02每日简报20250704
linux·科技·金融·生活·社交电子·娱乐·媒体
Maki Winster4 小时前
Peek-Ubuntu上Gif录制工具-24.04LTS可装
linux·ubuntu·peek
Maki Winster5 小时前
在 Ubuntu 下配置 oh-my-posh —— 普通用户 + root 各自使用独立主题(共享可执行)
linux·运维·ubuntu