我已经构建了一个自定义键盘,拇指下有一个轨迹球,我想以这样的方式映射滚动行为,当我按下快捷键(如左 Alt)并旋转球时,它的行为应该像滚动。我在这里使用 Xorg,但我对寻找 X 和 Wayland 的解决方案非常感兴趣(如果解决方案涉及显示服务器)。
答案1
使用模拟垂直和水平滚动libinput
司机evdev
来自德克特的答案仅支持垂直滚动模拟。如果您(像我一样)也想水平滚动,libinput
可以使用驱动程序来做到这一点:
详细信息位于以下内容的联机帮助页中
libinput(4)
:选项“滚动按钮”“int”
将按钮指定为滚动按钮。如果滚动方式是按钮并且逻辑上按住按钮,x/y 轴移动转换为滚动事件。
选项“ScrollMethod”“字符串”
启用滚动方法。允许的值为无、双指、边缘、按钮。并非所有设备都支持所有选项,如果不支持某个选项,则使用该设备的默认滚动选项
例如:
Section "InputClass" Identifier "Some Trackball" # ... Stuff to match your trackball, see xorg.conf(5) Driver "libinput" Option "ScrollMethod" "button" Option "ScrollButton" "4" # Or whatever button suits your needs EndSection
答案2
用轨迹球模拟鼠标滚轮
您可以使用现有的驱动程序配置选项来完成与您想要的类似的操作,也可以编写自己的驱动程序。
这罗技 M570是带有 USB 接收器的无线轨迹球。这意味着它将显示为 高压气体放电管设备和鼠标事件将通过输入位于内核层,可以从相应的/dev/event
设备中读取。
X驱动程序反过来使用evdev
驱动程序从该层读取事件,并将它们转换为X事件。我不熟悉 Wayland,但我认为它在那里也会有类似的工作方式。
1)evdev
驱动程序已包含在轨迹球上模拟鼠标滚轮的选项,请参阅man evdev
。最重要的是
选项“EmulateWheel”“布尔值”
启用/禁用“轮子”模拟。滚轮仿真意味着在按下特定真实按钮的同时移动鼠标时模拟按钮按下/释放事件。滚轮按钮事件(通常为按钮 4 和 5)通常用于滚动。车轮仿真对于通过轨迹球获得类似车轮的行为非常有用。
选项“EmulateWheelButton”“整数”
指定必须按住哪个按钮才能启用车轮模拟模式。当此按钮按下时,X 和/或 Y 指针移动将生成为 XAxisMapping 和 YAxisMapping 设置指定的按钮按下/释放事件。如果按钮为 0 并且 EmulateWheel 打开,则设备的任何运动都会转换为滚轮事件。默认值:4。
因此,这可以使用轨迹球按钮而不是键盘快捷键来工作(因为驱动程序只能看到来自鼠标的事件,而不是来自键盘的事件),并且会转换移动进入车轮事件,而不是回转。
2)通过修改几个现有的驱动程序来编写自己的驱动程序。您需要组合键盘和鼠标的驱动程序,以便可以通过按键触发滚轮模拟。
的源代码内核输入层位于drivers/input
内核树中。
的源代码埃夫德夫X 驱动程序处于xorg/driver/xf86-input-evdev/tree/src/evdev.c。
键盘驱动程序取决于您使用的键盘类型。