侧边栏壁纸
  • 累计撰写 11 篇文章
  • 累计创建 5 个标签
  • 累计收到 2 条评论
标签搜索

目 录CONTENT

文章目录

在 kubuntu 中添加鼠标快捷键功能

场景

kubuntu 是集成了 kde plasma 桌面环境的 ubuntu,而且 kde plasma 很适合我,但是有一个问题是

kde 自定义快捷键中不能自定义 鼠标键触发某个操作

默认只支持自定义键盘快捷键触发某个操作,例如可以定义 ctrl + shift + prt 键盘快捷键触发 flameshot gui 命令进行截图

90592ae769708eccd497b12912c992fb

我需要 鼠标点击中键 - 显示活动窗口,目前在 kubuntu 上只能通过键盘按键 super + w 使用。在我的 mac 上可以直接在设置中设置鼠标快捷键,很方便。而我需要做到一致的体验,在搜索引擎中辗转多个网页,最终找到了好的方案

xbindkeys 和 xdotool

两个开源工具

xbindkeys:监听事件,例如 鼠标中键按下,然后根据配置文件(~/.xbindkeysrc)执行相应的命令
xdotool:使用命令的方式模拟某个操作,例如键盘按下(super+w)

注:其只适用于 x11 图形平台
确认图形服务使用的 x11
d1d50aec467098c52e6b5ec6e84125f3

使用 apt 安装

sudo apt install xbindkeys xdotool

编辑配置文件

vim .xbindkeysrc 

内容为

"xdotool key --clearmodifiers super+w"
    b:2 

b:2 前需要有缩进,空格数不限制

--clearmodifiers 参数的作用是在执行键盘操作前清除所有可能已经按下的修饰键,可以防止意外组合
无论你当前按着什么其他键,触发的始终是干净的 Super+W 组合

逻辑很简单

xbindkeys 监听 鼠标中键,当被按下时,执行 xdotool key --clearmodifiers super+w 命令,模拟键盘按键 super + w 从而显示 kubuntu 上的所有活动窗口

安装完成、配置文件编写正确后就不再需要手动管理服务了
xbindkeys 文档中提到,xbindkeys 将会在后台以守护进程的方式运行,并且当配置文件发生变化将会自动加载
实际上在系统启动时也会自动运行

83844ba3401c02e4087015b1a97fc84c

bug

看上去达到预期了,但是实际上并没有 QAQ。
多数情况下,需要按下两次鼠标中键,才能触发 Super + w 的组合

按下中键时,系统需要先处理中键按下时的行为
然后再将事件传输给 xbindkeys,xbindkeys 再调用 xdotool,xdotool 触发新的按键事件
在这个过程中可能会产生竞争导致失效

另外在搜寻资料的过程中发现还有一个可能的因素:
图形显示服务器 x11 事件队列可能存在延迟和缓存
第一次点击的事件被延迟,第二次点击才真正生效5

鉴于以上原因,我找到了第二种方法:不经过 x11 图形系统,直接使用 kde 内部的快捷键系统调用 kwin 的窗口管理器,实现需求

此时将配置文件改为

"qdbus org.kde.kglobalaccel /component/kwin invokeShortcut 'Overview'"
    b:2

qdbus:D-Bus 是 Linux 桌面环境中进程间通信的标准协议,qdbus 是 Qt 提供的命令行工具,用于与 D-Bus 服务交互
org.kde.kglobalaccel:这是 KDE 的全局快捷键服务,负责管理系统级别的快捷键绑定和处理,所有 KDE 应用的快捷键都通过这个服务统一管理
/component/kwin:指向 KWin 窗口管理器组件
invokeShortcut:方法名称,用于触发快捷键
‘Overview’:方法参数,对应的就是 kde 的窗口概览功能

新的配置文件去除了 xdotool 组件,鼠标中键被 xbindkeys 捕捉到后直接调用 kwin 窗口管理区触发函数

此种方式就没有任何问题

0

评论区