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

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

笔记:这不是重复的或者,我会解释清楚。

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

我希望 Kubuntu 15.04 下有类似的行为。据我所知,没有办法调出类似的任务列表,该列表会一直显示,直到您单击某个内容,而无需按住任何键。

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

问题是,据我所知,操作系统无法将此 G9 按钮视为普通鼠标按钮。如果我运行:

xbindkeys -mk

单击 G9 按钮,我得到以下输出:

"(Scheme function)"
m:0x40 + c:23
Mod4 + Tab
"(Scheme function)"
m:0x40 + c:133
Mod4 + Super_L

笔记:我正在虚拟机中运行它以进行测试。如果这会影响到某些事情,请告诉我,尽管在这种情况下我也需要它正常工作。

如果我运行:

xev | grep button

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

state 0x0, button 2, same_screen YES

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

"xte 'keydown Alt_L' 'key Tab'"
  m:0x40 + c:23 + Release

显然,即使这个方法有效,它也不会达到我想要的效果,但它根本不起作用。运行后单击 G9 按钮时什么也没有发生:

xbindkeys -v -n

这给出了以下警告:

请确认没有其他程序正在运行并捕获 xbindkeys 捕获的某个键。似乎存在冲突,xbindkeys 无法获取其配置文件中定义的所有键。

xte如果我在控制台中输入命令,它会调出任务选择 alt+tab 菜单。但是绑定的鼠标按钮没有任何内容。

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

Alt+Tab单击 G9 按钮时如何获得我所描述的行为?另一个按钮(xev例如)如何检测b:3

笔记:这款鼠标内部保存了 Windows 软件的配置。因此,我的所有其他按钮都保留了 VM 中的功能:在浏览器中后退/前进、切换浏览器选项卡等。Logitech 软件允许在 Windows 中进行宏录制,但据我所知,它不允许为按下/释放事件指定不同的操作。

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

答案1

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"

奔跑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'

它会创建一个临时文件,通知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

启动时激活 evrouter

还没有在 KDE 上尝试过。

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

#!/bin/sh
/usr/local/bin/evrouter /dev/input/event* 0<&- > /dev/null

(或者可以/usr/bin/evrouter代替/usr/local/bin/evrouter

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

[SeatDefaults]
autologin-user=
session-setup-script=/usr/local/sbin/evrouter_launch.sh

答案2

我使用 Velkan 的回答中的想法完成了它。我将列出必要的步骤。

  1. 首先,Win+Tab我在 Windows 中为 G9 按钮设置的宏干扰了 Linux 检测鼠标的方式。它没有检测鼠标按钮,而是只检测 和WinTab的键xev。我相信,如果您在 Windows 软件中将按钮配置为“多键宏”,鼠标内部就会设置为发送这些键。

    要解决此问题,请不要将按钮设置为在 Windows 中使用多键宏。将其设置为其他任何值。我将其设置为中键单击。

  2. 现在,xev | grep button将 G9 检测为按钮2

  3. 我在 中编写了这个脚本~/alttab.sh,它是 Velkan 脚本的组合:

    #!/bin/bash
    
    if [ -e /tmp/alt-tab-mouse-script-???? ]; then
       xte 'usleep 100000' 'keyup Alt_L'
       rm /tmp/alt-tab-mouse-script-????
    else
       mktemp /tmp/alt-tab-mouse-script-XXXX
       xte 'usleep 100000' 'keydown Alt_L' 'usleep 50000' 'key Tab'
    fi
    
  4. 我在我的 中添加了这行代码~/.xbindkeysrc。我们需要两行代码来使点击在两种状态下都能工作:当alt处于关闭状态时和当未处于关闭状态时。

    "~/alttab.sh"
      b:2 + Release 
    
    "~/alttab.sh"
      Alt + b:2
    

这对我来说很有效。流程是:单击 G9(按下并释放),选择所需的窗口(左键单击或鼠标滚轮),然后再次单击 G9 转到该窗口。如果您想直接转到使用 Windows 显示屏中的 G9 按钮单击的窗口,您可以修改文件if中的第一个.sh,以便在按下键盘前也发送 alt 键。mouseclick 1

我也尝试过删除这些usleep电话。对我来说,没有它们也可以正常工作。

其行为与 Windows 的行为并不完全相同,但我发现它足够接近。也许甚至更方便,因为您可以使用相同的按钮进行选择,因此您不必将手指移到另一个按钮上!

相关内容