我有一个罗技 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 的回答中的想法完成了它。我将列出必要的步骤。
首先,
Win+Tab
我在 Windows 中为 G9 按钮设置的宏干扰了 Linux 检测鼠标的方式。它没有检测鼠标按钮,而是只检测 和Win
中Tab
的键xev
。我相信,如果您在 Windows 软件中将按钮配置为“多键宏”,鼠标内部就会设置为发送这些键。要解决此问题,请不要将按钮设置为在 Windows 中使用多键宏。将其设置为其他任何值。我将其设置为中键单击。
现在,
xev | grep button
将 G9 检测为按钮2
。我在 中编写了这个脚本
~/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
我在我的 中添加了这行代码
~/.xbindkeysrc
。我们需要两行代码来使点击在两种状态下都能工作:当alt
处于关闭状态时和当未处于关闭状态时。"~/alttab.sh" b:2 + Release "~/alttab.sh" Alt + b:2
这对我来说很有效。流程是:单击 G9(按下并释放),选择所需的窗口(左键单击或鼠标滚轮),然后再次单击 G9 转到该窗口。如果您想直接转到使用 Windows 显示屏中的 G9 按钮单击的窗口,您可以修改文件if
中的第一个.sh
,以便在按下键盘前也发送 alt 键。mouseclick 1
我也尝试过删除这些usleep
电话。对我来说,没有它们也可以正常工作。
其行为与 Windows 的行为并不完全相同,但我发现它足够接近。也许甚至更方便,因为您可以使用相同的按钮进行选择,因此您不必将手指移到另一个按钮上!