在我随意安装任何附加软件之前,我想了解 xinput 的工作原理以及为什么它与鼠标滚动速度无关。
您能启发我吗?
Ubuntu 18.04.1 LTS x64,GNOME 3.28.2(不确定是否重要)。最新。
$ xinput list
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ ETPS/2 Elantech Touchpad id=11 [slave pointer (2)]
⎜ ↳ Microsoft Microsoft® Comfort Mouse 4500 id=14 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Power Button id=6 [slave keyboard (3)]
↳ Video Bus id=7 [slave keyboard (3)]
↳ HP TrueVision HD Camera: HP Tru id=8 [slave keyboard (3)]
↳ Intel Virtual Button driver id=9 [slave keyboard (3)]
↳ AT Translated Set 2 keyboard id=10 [slave keyboard (3)]
↳ HP Wireless hotkeys id=12 [slave keyboard (3)]
↳ HP WMI hotkeys id=13 [slave keyboard (3)]
↳ Microsoft Microsoft® Comfort Mouse 4500 id=15 [slave keyboard (3)]
↳ Chicony USB Keyboard id=16 [slave keyboard (3)]
↳ Chicony USB Keyboard id=17 [slave keyboard (3)]
“指针”下的鼠标详细信息:
$ xinput list-props 14
Device 'Microsoft Microsoft® Comfort Mouse 4500':
Device Enabled (142): 1
Coordinate Transformation Matrix (144): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
libinput Natural Scrolling Enabled (289): 0
libinput Natural Scrolling Enabled Default (290): 0
libinput Scroll Methods Available (293): 0, 0, 1
libinput Scroll Method Enabled (294): 0, 0, 0
libinput Scroll Method Enabled Default (295): 0, 0, 0
libinput Button Scrolling Button (727): 2
libinput Button Scrolling Button Default (728): 2
libinput Middle Emulation Enabled (729): 0
libinput Middle Emulation Enabled Default (730): 0
libinput Accel Speed (296): -0.258993
libinput Accel Speed Default (297): 0.000000
libinput Accel Profiles Available (731): 1, 1
libinput Accel Profile Enabled (732): 1, 0
libinput Accel Profile Enabled Default (733): 1, 0
libinput Left Handed Enabled (298): 0
libinput Left Handed Enabled Default (299): 0
libinput Send Events Modes Available (266): 1, 0
libinput Send Events Mode Enabled (267): 0, 0
libinput Send Events Mode Enabled Default (268): 0, 0
Device Node (269): "/dev/input/event16"
Device Product ID (270): 1118, 1900
libinput Drag Lock Buttons (300): <no items>
libinput Horizontal Scroll Enabled (301): 1
仅与滚动相关的部分:
$ xinput 列表属性 14 | grep -i'滚动' libinput 自然滚动已启用 (289): 0 libinput 自然滚动启用默认值 (290):0 库输入滚动可用方法 (293):0, 0, 1 库输入滚动已启用方法 (294): 0, 0, 0 库输入滚动方法启用默认值 (295): 0, 0, 0 libinput按钮滚动按钮 (727): 2 libinput按钮滚动按钮默认值(728):2 libinput 水平滚动已启用(301):1
“键盘”下的鼠标详细信息:
$ xinput list-props 15
Device 'Microsoft Microsoft® Comfort Mouse 4500':
Device Enabled (142): 1
Coordinate Transformation Matrix (144): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
libinput Send Events Modes Available (266): 1, 0
libinput Send Events Mode Enabled (267): 0, 0
libinput Send Events Mode Enabled Default (268): 0, 0
Device Node (269): "/dev/input/event16"
Device Product ID (270): 1118, 1900
答案1
不会修复,至少,这是目前的状态libinput
上游错误报告:freedesktop - libinput - 支持设置滚动速度 #185
- 鼠标制造商使用不同的高分辨率滚动实现方式
- 滚动速度需要根据上下文由应用程序可变和控制
旧解决方案正在使用
evdev
- 设置方法
xinput
:xorg.conf.d
解决方法,使用 Udev HWDB(低级修复)
udev
(1)针对特定鼠标型号的HWDB 设置。我确认,这是来自 udev 上游代码库的当前解决方案
检查您的鼠标标识:供应商 ID、产品 ID、设备名称
鼠标插入时
sudo lsusb
运行以下命令之一,然后重新连接鼠标
sudo udevadm monitor -u sudo journalctl -k -b -f
并检查systemd/hwdb.d/70-mouse.hwdb
/lib/udev/hwdb.d/70-mouse.hwdb
或者在系统中查找本地文件。搜索相同或相似的设备。打开终端,创建
71-mouse-local.hwdb
文件sudo nano /etc/udev/hwdb.d/71-mouse-local.hwdb
从步骤(1)复制这些行并将它们附加到新文件中,添加滚轮点击角度条目并根据需要设置角度(默认值=15 度/点击,为整数值),如下所示:
# Microsoft Comfort Mouse 4500 mouse:usb:v045ep076c:name:Microsoft Microsoft® Comfort Mouse 4500: MOUSE_DPI=1000@125 MOUSE_WHEEL_CLICK_ANGLE=15
如果您在 中找不到您的设备
70-mouse.hwdb
,请使用步骤 (1) 中收集的信息以这种格式创建它mouse:usb:v <VendorID> p <ProductID> :name: <DeviceName> :
保存并关闭
Ctrl+ O, Ctrl+X
更新udev硬件数据库,触发相应事件节点的变化
sudo systemd-hwdb update sudo udevadm trigger /dev/input/event16
event16
如xinput
输出所报告。
笔记
此答案是针对 OP 案例定制的,但可以针对其他模型进行调整。已将其扩展为更通用的。
完整的上游说明如下:systemd/hwdb.d/70-mouse.hwdb或者在您的系统中查找本地文件
70-mouse.hwdb
。您也可以在其中查找其他高级功能。有
MOUSE_WHEEL_CLICK_COUNT
一个覆盖MOUSE_WHEEL_CLICK_ANGLE
,当角度参数不够精确时使用它。MOUSE_WHEEL_CLICK_COUNT
默认值为 24 次点击/旋转或点击/360 度,接受整数值例子:
# Microsoft Comfort Mouse 4500 mouse:usb:v045ep076c:name:Microsoft Microsoft® Comfort Mouse 4500: MOUSE_DPI=1000@125 MOUSE_WHEEL_CLICK_ANGLE=15 MOUSE_WHEEL_CLICK_COUNT=24
MOUSE_WHEEL_CLICK_ANGLE
出于兼容性原因,即使其值与声明的无效,也是必须的MOUSE_WHEEL_CLICK_COUNT
。
未来,GUI 工具包(高级修复)
(2) 可能在 GUI 工具包级别实现。公平地希望,当涉及到大型免费社区项目之间的协作时,就像任意 Unicode 输入的情况一样,它只在 GTK 中实现。
有些应用程序不会等待这一点,例如某些浏览器和游戏(Firefox、Chromium、SDL 游戏等)。
上面链接的错误报告中有一个来自 GUI 工具包的错误报告列表。
答案2
udev
规则适用于我:
# Microsoft Comfort Mouse 4500
mouse:usb:v045ep076c:name:Microsoft Microsoft® Comfort Mouse 4500:
MOUSE_DPI=1000@125
MOUSE_WHEEL_CLICK_ANGLE=35
谢谢