将 Alt+Tab 绑定到 Kubuntu 上的 Logitech 鼠标按钮

IVl*_*lad 6 mouse shortcut-keys kubuntu xbindkeys 15.04

注意:这不是thisthis的重复,我会说清楚。

我有一个罗技 Proteus Core鼠标。在 Windows 10 下,我设置了它的一个按钮(鼠标顶部标有“G9”的小按钮)来显示任务列表,可以使用 Win+Tab 键调出该列表。请注意,即使您同时释放 Win 和 Tab 键,此功能也会保持不变,只有在您单击要转到的窗口后,它才会消失。所以工作流程是:按下并释放G9鼠标按钮,点击我想要的窗口。

我想要在 Kubuntu 15.04 下有类似的行为。AFAIK,没有办法调出类似的任务列表,它会一直存在,直到您单击某些内容,而无需按住任何键。

所以我的想法是用这个按钮模拟 Alt+Tab。我想到的工作流程是:push G9(“push alt、push tab、realease tab”的快捷方式)=> 选择我想要的窗口,释放 G9(“release alt”的快捷方式)。

问题是,据我所知,这个 G9 按钮没有被操作系统读取为普通的鼠标按钮。如果我运行:

xbindkeys -mk
Run Code Online (Sandbox Code Playgroud)

然后点击 G9 按钮,我得到这个输出:

"(Scheme function)"
m:0x40 + c:23
Mod4 + Tab
"(Scheme function)"
m:0x40 + c:133
Mod4 + Super_L
Run Code Online (Sandbox Code Playgroud)

注意:为了测试目的,我在 VM 中运行它。让我知道这是否会影响事情,尽管我也需要它在这种情况下工作。

如果我运行:

xev | grep button
Run Code Online (Sandbox Code Playgroud)

当我点击我感兴趣的 G9 按钮时,我没有得到任何输出。如果我点击其他按钮,我会得到如下预期的输出:

state 0x0, button 2, same_screen YES
Run Code Online (Sandbox Code Playgroud)

这很奇怪,但我想我可以将xbindkeys -mk输出添加到我的~/.xbindkeysrc

"xte 'keydown Alt_L' 'key Tab'"
  m:0x40 + c:23 + Release
Run Code Online (Sandbox Code Playgroud)

显然,即使这行得通,它也不会按照我的意愿行事,但它甚至不起作用。运行后单击 G9 按钮时没有任何反应:

xbindkeys -v -n
Run Code Online (Sandbox Code Playgroud)

这给出了这个警告:

请确认没有其他程序正在运行,它捕获了 xbindkeys 捕获的密钥之一。好像有冲突,xbindkeys 无法抓取其配置文件中定义的所有键。

如果我xte在控制台中键入命令,它会显示任务选择 alt+tab 菜单。然而,绑定的鼠标按钮没有。

如果我将相同的xte调用分配给另一个按钮,xev输出显示的那个按钮(我尝试了鼠标右键),它仍然没有执行(似乎只有选项卡被执行,因为它在文本编辑器中标记内容),但是警告消失了,按钮的常规功能也消失了:

Alt+Tab单击 G9 按钮时如何获得我描述的行为?另一个按钮,一个xev检测到的按钮怎么样b:3

注意:此鼠标会在内部保存通过其 Windows 软件所做的配置。所以我所有的其他按钮都在 VM 中保留它们的功能:在浏览器中后退/前进、切换浏览器选项卡等。罗技软件允许在 Windows 中进行宏录制,但它不允许为推送/释放事件指定不同的操作,AFAIK。

如果有办法在 Windows 下录制正确的宏,或者有办法简化我想在 Kubuntu 下实现的目标——即使用 G9 按钮获得与 alt+tab 类似的功能——,我也会接受那些解决方案。

Vel*_*kan 5

evrouter可以帮助做到这一点。它甚至允许在从列表中选择任务之前释放 G9。

http://www.bedroomlan.org/projects/evrouter

我已经从源代码构建它并安装了checkinstall,但是那里有一些看起来像存储库的东西。

挂钩

它可以配置在~/.evrouterrc

"Logitech Gaming Mouse G300" "/dev/input/event.*" any key/272 "SHELL//home/velkan/click.sh"

"Logitech Gaming Mouse G300" "/dev/input/event.*" any key/275 "SHELL//home/velkan/atab.sh"
Run Code Online (Sandbox Code Playgroud)

运行sudo evrouter -d /dev/input/event*和点击将有助于组成这些行。

"Logitech Gaming Mouse G300" 是我鼠标的名字。

"/dev/input/event.*" 意味着无论鼠标绑定的设备文件的名称如何,输入都将被拦截。

any - 表示事件将被任何 Alt/Ctrl/Shift 修饰符接受。

key/272 - 鼠标左键。

key/275 - 后退鼠标按钮(对我来说在 G4 上)。

"SHELL//home/velkan/click.sh"-/home/velkan/click.sh在该事件发生时运行。

Alt-Tab 脚本

因此,/home/velkan/atab.sh脚本(在这种情况下绑定到 G4):

#!/bin/bash

mktemp /tmp/evr-alt-tab-XXXX

/usr/bin/xte 'usleep 100000' 'keydown Alt_L' 'usleep 50000' 'key Tab'
Run Code Online (Sandbox Code Playgroud)

它创建一个临时文件,通知click.sh(绑定到左按钮)它需要释放 Alt。

click.sh 脚本:

#!/bin/bash

if [ -e /tmp/evr-alt-tab-???? ]; then
    /usr/bin/xte 'usleep 100000' 'keyup Alt_L'
    rm /tmp/evr-alt-tab-????
fi
Run Code Online (Sandbox Code Playgroud)

在启动时激活 evrouter

没在 KDE 上试过。

启动脚本/usr/local/sbin/evrouter_launch.sh

#!/bin/sh
/usr/local/bin/evrouter /dev/input/event* 0<&- > /dev/null
Run Code Online (Sandbox Code Playgroud)

(或者它可能/usr/bin/evrouter代替/usr/local/bin/evrouter

配置/etc/lightdm/lightdm.conf以使用桌面管理器启动 evrouter:

[SeatDefaults]
autologin-user=
session-setup-script=/usr/local/sbin/evrouter_launch.sh
Run Code Online (Sandbox Code Playgroud)