我在我的电脑上运行 KDE Plasma 桌面,因为它是一个灵活的环境,具有许多自定义选项。在您的桌面上有选择不仅仅是拥有大量的菜单和按钮来激活或停用。我最喜欢 KDE Plasma 桌面的一点是能够向其添加我自己的功能。实现这一目标的原因之一是 KServices,这是一个简单但功能强大的插件框架,用于处理桌面服务。
向右键单击菜单添加功能
在 KDE Plasma 桌面中,当您右键单击某些内容(例如目录或文件)时,通常会有一个上下文菜单可用。您可以通过创建自己的 KService 将项目添加到右键单击菜单,您只需要对 Bash 有基本的了解即可使其工作。
首先,为您的服务菜单创建一个新目录
$ mkdir -p ~/.local/share/kio/servicemenus
添加一个 .desktop
文件
$ touch ~/.local/share/kio/servicemenus/hello.desktop
在文本编辑器中打开 hello.desktop
文件。.desktop
文件是 Linux 桌面菜单系统使用的小型配置文件。这是一个简单的 KServices 文件,它在您选择的目录中生成一个 hello.txt
文件
[Desktop Entry]
Type=Service
MimeType=inode/directory;
Actions=Hello
[Desktop Action Hello]
Name=Say hello
Icon=/usr/share/icons/breeze-dark/actions/symbolic/file-library-symbolic.svg
Exec=touch %f/hello.txt
-
第一个配置块告诉您的系统,此
.desktop
文件是一个服务,而不是例如应用程序。 -
MimeType
告诉 Plasma 桌面仅在您右键单击文件夹而不是文件时才显示此操作作为选项。 -
Actions
行标识激活此服务时执行的操作。名称Hello
是任意的,指的是下一个配置块,这是一个名为Hello
的Desktop Action
配置。
以下是下一个配置块的含义
-
名为
Hello
的Desktop Action
定义。 -
Name
和Icon
的值显示在右键单击菜单中。 -
Exec
行是您选择服务时要运行的命令。作为一个简单的演示,此.desktop
文件只是在您右键单击的位置(由特殊变量%f
表示)创建一个名为hello.txt
的空文件。
保存 .desktop
文件,然后使其可执行
$ chmod +x ~/.local/share/kio/servicemenus/hello.desktop
启动 Dolphin 文件管理器 的新实例并创建一个空文件夹。然后右键单击该文件夹并导航到 操作。在 操作 菜单中,有一个新的服务可用,它名为 Say hello,因为这是您的 .desktop
文件在 Name
字段中设置的名称。

(Seth Kenlon,CC BY-SA 4.0)
在运行服务后查看文件夹,查看已创建的空 hello.txt
文件。
Mimetypes
此示例 KService 仅适用于目录,因为定义服务的 .desktop
文件指定了 Mimetype: inode/directory
。这就是告诉 Dolphin 在您右键单击文件时不要显示该服务的原因。
使用 mimetypes,您可以根据您右键单击时选择的文件系统对象类型创建高度特定的服务。perl-file-mimeinfo
软件包提供了一个 mimetype
命令,您可以使用它来获取任何文件的 mimetype。使用您的发行版的软件包管理器安装它,然后试用一下
$ mimetype example.txt
example.txt: text/plain
$ mimetype Photos/example.webp
Photos/example.webp: image/webp
可执行文件
我在本文中演示了一个简单的“hello world”示例,但是 KServices 可以根据您的需要变得复杂。您的 KService .desktop
文件的 Exec
行可以启动任何应用程序或脚本,并且 %f
变量确保启动的目标或目的地是您右键单击的内容。
对于我自己的工作流程,我过去常常使用 Planter 来快速构建项目环境。但是,最近我切换到了 Ansible 和这个 KService
[Desktop Entry]
Type=Service
MimeType=inode/directory;
Actions=planter
[Desktop Action planter]
Name=Create project directory
Icon=/usr/share/icons/breeze-dark/actions/symbolic/folder-new-symbolic.svg
Exec=ansible-playbook /home/seth/Ansible/playbooks/standard_dirs.yaml -e dir=%f
这是我的 Ansible playbook
---
- hosts: localhost
tasks:
- name: Create directories
ansible.builtin.file:
path: "{{ item }}"
state: directory
with_items:
- '{{ dir }}/video'
- '{{ dir }}/edit'
- '{{ dir }}/audio'
- '{{ dir }}/title'
- '{{ dir }}/render'
- '{{ dir }}/graphic'
- '{{ dir }}/photo'
当我右键单击目录并选择 创建项目目录 时,我需要的媒体项目子目录将添加到该目录中。对于桌面来说,这是一个简单的功能,并且有点特定于特定的工作流程,但这是我想要的功能。感谢 KServices,这是我拥有的功能。在 KDE Plasma 桌面中亲自试用 KServices,并添加您想要的功能。
2 条评论