我如何使用 Ansible 为我的 Linux KDE 桌面添加功能

按照本教程了解我如何在我的 Linux KDE 桌面上使用 KService 和 Ansible。
2 位读者喜欢这篇文章。
Coding on a computer

我在我的电脑上运行 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 是任意的,指的是下一个配置块,这是一个名为 HelloDesktop Action 配置。

以下是下一个配置块的含义

  • 名为 HelloDesktop Action 定义。

  • NameIcon 的值显示在右键单击菜单中。

  • Exec 行是您选择服务时要运行的命令。作为一个简单的演示,此 .desktop 文件只是在您右键单击的位置(由特殊变量 %f 表示)创建一个名为 hello.txt 的空文件。

保存 .desktop 文件,然后使其可执行

$ chmod +x ~/.local/share/kio/servicemenus/hello.desktop

启动 Dolphin 文件管理器 的新实例并创建一个空文件夹。然后右键单击该文件夹并导航到 操作。在 操作 菜单中,有一个新的服务可用,它名为 Say hello,因为这是您的 .desktop 文件在 Name 字段中设置的名称。

​Image showing that KServices appears in the right-click menu of Dolphin.

(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,并添加您想要的功能。

标签
Seth Kenlon
Seth Kenlon 是一位 UNIX 极客、自由文化倡导者、独立多媒体艺术家和 D&D 爱好者。他曾在电影和计算机行业工作,通常同时进行。

2 条评论

很棒的文章,谢谢。
我一直想向我的 KDE 上下文菜单添加菜单项,当我查看文档时,它看起来太令人困惑了。您已经将其简化到足以推动我尝试的程度。
通常,有时我想在制作不同版本的文件名时向文件名添加日期,以及我必须手动执行的其他一些任务。这很有帮助。我很快会尝试。

知识共享许可协议本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.