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开发者文档-自定义服务菜单:传送门
相关推荐
三味神风16 分钟前
Linux云计算系统安全:PAM
linux·运维·系统安全
ZYMFZ3 小时前
Linux 防火墙 Firewalld
linux·运维·服务器
奔跑吧 android8 小时前
【linux kernel 常用数据结构和设计模式】【数据结构 2】【通过一个案例属性list、hlist、rbtree、xarray数据结构使用】
linux·数据结构·list·kernel·rbtree·hlist·xarray
NiKo_W9 小时前
Linux 文件系统与基础指令
linux·开发语言·指令
Darkwanderor11 小时前
Linux 的权限详解
linux
SabreWulf202011 小时前
Ubuntu 20.04手动安装.NET 8 SDK
linux·ubuntu·avalonia·.net8
不是吧这都有重名11 小时前
为什么ubuntu大文件拷贝会先快后慢?
linux·运维·ubuntu
sunshine-sm12 小时前
CentOS Steam 9安装 Redis
linux·运维·服务器·redis·centos
小熊h12 小时前
MySQL集群高可用架构——组复制 (MGR)
linux·数据库·mysql
棒棒的唐13 小时前
armbian平台ubuntu环境下telnet安装及启动,给pantherX2增加一个应急通道
linux·运维·armbian·telnetd