编辑:TL;DR 版本(有点):在有三个按钮的鼠标上,是否可以禁用实际的中间按钮,同时仍在 xorg 中具有中间按钮模拟?
完整版本:
我买了一个带指点杆的联想键盘,想让它在 Linux/xorg 中正常工作。问题是,我注意到在执行鼠标中键单击滚动(按住中间按钮,然后使用指点杆滚动)时,它首先发送一个鼠标中键按下事件,该事件当然会粘贴文本或打开链接等,具体取决于您所在的位置。滚动工作正常,但像这样毫无用处。
因此,我尝试使用 禁用鼠标中键单击xinput set-button-map <id> 1 0 3
。现在滚动可以正常工作,并且没有滚动前的按钮按下事件,但我也无法在需要时使用鼠标中键单击。
所以,我想我只需启用中键模拟即可。显然,禁用中键单击也会禁用它的模拟,因为如果我重新启用中键单击,模拟就会起作用,否则则不起作用。
所以,我想我可以不用鼠标中键单击粘贴,Firefox 可以用 ctrl+单击在新选项卡中打开链接。但是,这只适用于常规链接。如果你有一个奇怪的链接,那么似乎在新选项卡中打开链接的唯一方法是单击鼠标中键(即使 ctrl+单击不起作用,它也能工作……什么鬼?)。此外,单手 ctrl+单击比左键+右键单击需要更多工作量。
该怎么办?我认为我最好禁用来自真实中键的中键单击事件,同时仍保留中键单击滚动和中键单击模拟。或者也许以某种方式对中键进行编程,使其在按下按钮时不执行任何操作。然后,如果按钮保持按下状态并且轨迹点移动,则会发生滚动。如果在按下按钮和按下按钮之间没有发生任何事情,则在按下按钮时发送中键单击事件。实际上,第二种解决方案可能是理想的。
也欢迎其他建议。注意:我无法切换到 Chrome 浏览器(我不知道这是否可行),因为它不喜欢我奇怪的键盘映射。此外,我更喜欢更“全局”的修复。
答案1
好的,显然这已经实现了。只需说一下xinput set-prop <device-id> "Evdev Wheel Emulation" 1
(我不知道为什么它几乎没有工作)。然后可以控制超时,这样比这更短的点击就只是普通的中键点击。
但它并不完美:如果你在超时之前开始滚动,它无论如何都会发送一个点击事件。我看到两种不涉及驱动程序黑客攻击的解决方案:1) 将超时设置为 0 并使用中键点击模拟(现在有效),或 2) 学会在滚动之前等待一段时间。这两种方法都不理想,但目前还不错。