![鼠标指针移动速度过快,xinput 暂时解决问题](https://linux22.com/image/1060540/%E9%BC%A0%E6%A0%87%E6%8C%87%E9%92%88%E7%A7%BB%E5%8A%A8%E9%80%9F%E5%BA%A6%E8%BF%87%E5%BF%AB%EF%BC%8Cxinput%20%E6%9A%82%E6%97%B6%E8%A7%A3%E5%86%B3%E9%97%AE%E9%A2%98.png)
在所有 Ubuntu 系统上,我都将鼠标指针速度设置为最慢,但它仍然移动得太快。(现在我使用 Ubuntu 16.04。)我做了一些研究,发现这个命令解决了我的问题:
xinput --set-prop "Logitech USB Laser Mouse" "Device Accel Constant Deceleration" 1.75
但是当我拔下鼠标并重新插入时,其速度会恢复到系统设置。所以我不得不一直运行这个命令。我该怎么办?
答案1
我们可以通过编写udev
规则来解决这个问题。
识别你的鼠标
首先,我们应该识别我们的鼠标设备,有不同的方法可以做到这一点,我运行lsusb
后输出:
...
Bus 002 Device 011: ID 104f:0003 WB Electronics
...
然后我使用 vendor id 104f
, find 来查找我的鼠标设备节点:
$ find /dev/input -iname *104f* -ls
540 0 lrwxrwxrwx 1 root ... /dev/input/by-id/usb-104f-mouse -> ../mouse2
所以我的鼠标设备是/dev/input/mouse2
。
收集有关设备的相同数据
用于udevadm info /dev/input/mouse2 --attribute-walk
获取有关设备的详细信息列表,以便我们可以使用它们来编写udev
规则。
选择包含以下内容的单个部分:ATTRS{idProduct}
& ATTRS{idVendor}
。
编写 udev 规则
然后在此处创建一个文件:
sudo nano /etc/udev/rules.d/95-mymouse.rules
选择的内容类似于:
SUBSYSTEMS=="usb", ATTRS{idProduct}=="xxxx", ATTRS{idVendor}=="xxxx", RUN+="/bin/touch /tmp/my.udev"
不要忘记更改xxxx
您自己的设备和产品代码。
现在运行:
sudo udevadm control --reload
到目前为止我们做了什么?
每次将鼠标连接到系统时,udev
都会运行一个命令,该命令将touch
位于的文件/tmp/my.udev
。
为什么我们不运行 xinput? 规则运行后udev
,“X”会重置一些细节,因此我们不能简单地将xinput
命令作为udev
命令来运行。
因此安装inotify-tools
:
sudo apt install inotify-tools
然后编写一个脚本并将其放在您想要的任何地方:
#!/bin/bash
touch /tmp/my.udev
inotifywait -m -e attrib --format '%w%f' /tmp/my.udev 2>/dev/null | while read event
do
sleep 2
xinput --set-prop "Logitech USB Laser Mouse" "Device Accel Constant Deceleration" 1.75
done
如何让它工作?
登录后运行最后一个脚本,您可以将其放在启动脚本中,甚至是文件中.profile
,每次连接鼠标时,udev
都会touch
触发。/tmp/my.udev
inotifywait
xinput
inotifywait
想法来自于这里
答案2
1/ 简短版本:(在 Ubuntu 16.04 上检查)
更新.xinputrc在您的 $HOME 目录中创建一个文件,并将您的 xinput 命令放入其中(一行一行)。每次您打开会话时都会读取它。如果它不存在,请创建它:(应该由 im-config 生成)
矿 :
# im-config(8) generated on Wed, 15 Feb 2017 19:29:43 +0100
run_im ibus
# im-config signature: 90bece1e5f840b27085989abd900276a -
#BYME# Put your xinput commands here
#BYME#With DRI2 : Device Accel Constant Deceleration (267)
xinput --set-prop 11 267 2
#BYME#With DRI3 : Device Accel Constant Deceleration (264)
xinput --set-prop 11 264 2
此 .xinputrc 适用于两种情况(无论是否启用 DRI3)
顺便说一句,我正在使用多个屏幕(混合 4K 和老式 16:9 屏幕),并且我感觉只设置Device Accel Constant Deceleration
为就很舒服2
。请随意更改此(或其他)值。
2/ 错误的做法:
(不要)将其添加到您的 .bashrc 或其他特定于配置文件的文件中(该文件可能会被读取多次,并可能导致对实际应用的鼠标行为的误解)
3/ 长版本:(在支持 xinput 命令的发行版上工作)
要确定您应该使用哪些选项:
$ xinput --list --short
在我的 Ubuntu 主机上(我使用 KVM 在我的计算机之间切换),它返回:
Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ No brand Combo Free KVM id=11 [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)]
↳ Power Button id=8 [slave keyboard (3)]
↳ Sleep Button id=9 [slave keyboard (3)]
↳ No brand Combo Free KVM id=10 [slave keyboard (3)]
因此,我更喜欢使用(短)数字标识符(现在知道如何找到它们及其含义),而不是弄乱字符串(并在输入时出错)。
就我而言,我的鼠标位于下方Virtual core pointer
,标识为No brand Combo Free KVM
带有数字标识符11
。如前所述,我现在将使用这个数字标识符而不是相应的字符串,但您可以根据需要进行操作(两种方法都可以)。
要知道我的鼠标可以使用哪些属性/功能,我必须输入:(根据上一个命令的结果调整此命令,您自己的标识符应该有所不同)
$ xinput --list-props 11
Device 'No brand Combo Free KVM':
Device Enabled (136): 1
Coordinate Transformation Matrix (138): 1.000000, 0.000000, 0.000000, 0.000000,
1.000000, 0.000000, 0.000000, 0.000000, 1.000000
Device Accel Profile (266): 0
Device Accel Constant Deceleration (267): 1.000000
Device Accel Adaptive Deceleration (268): 1.000000
Device Accel Velocity Scaling (269): 10.000000
Device Product ID (257): 4309, 20480
Device Node (258): "/dev/input/event16"
Evdev Axis Inversion (270): 0, 0
Evdev Axes Swap (272): 0
Axis Labels (273): "Rel X" (146), "Rel Y" (147), "Rel Horiz Wheel" (264), "
Rel Vert Wheel" (265)
Button Labels (274): "Button Left" (139), "Button Middle" (140), "Button Righ
t" (141), "Button Wheel Up" (142), "Button Wheel Down" (143), "Button Horiz Wheel Left"
(144), "Button Horiz Wheel Right" (145), "Button Side" (262), "Button Extra" (263), "But
ton Unknown" (260), "Button Unknown" (260), "Button Unknown" (260), "Button Unknown" (26
0)
Evdev Scrolling Distance (275): 1, 1, 1
Evdev Middle Button Emulation (276): 0
Evdev Middle Button Timeout (277): 50
Evdev Third Button Emulation (278): 0
Evdev Third Button Emulation Timeout (279): 1000
Evdev Third Button Emulation Button (280): 3
Evdev Third Button Emulation Threshold (281): 20
Evdev Wheel Emulation (282): 0
Evdev Wheel Emulation Axes (283): 0, 0, 4, 5
Evdev Wheel Emulation Inertia (284): 10
Evdev Wheel Emulation Timeout (285): 200
Evdev Wheel Emulation Button (286): 4
Evdev Drag Lock Buttons (287): 0
这样我们就可以识别哪些属性应该改变!
Accel Constant Deceleration
(数字标识符:267
) 对我来说效果很好。您可以随意“尝试”其他属性,找到适合您自己鼠标的行为。
所以,这就是为什么我在我的.xinputrc,将值从 更改1.000000
为2
(不需要指定浮点数),因为增加减速会导致鼠标速度减慢:
xinput --set-prop 11 267 2
4/ 警告:如果您激活了 DRI3,此标识符可能会发生变化
默认情况下,Ubuntu 16.04 下仅限 DRI2(虽然这可能会导致问题,例如 Chrome 的最新版本,需要 DRI3 才能支持流畅的多窗口)
如果您已启用 DRI3,标识符现在应该是:
Device 'No brand Combo Free KVM':
Device Enabled (133): 1
Coordinate Transformation Matrix (135): 1.000000, 0.000000, 0.000000, 0.000000,
1.000000, 0.000000, 0.000000, 0.000000, 1.000000
Device Accel Profile (263): 0
Device Accel Constant Deceleration (264): 1.000000
Device Accel Adaptive Deceleration (265): 1.000000
Device Accel Velocity Scaling (266): 10.000000
Device Product ID (254): 4309, 20480
Device Node (255): "/dev/input/event9"
Evdev Axis Inversion (267): 0, 0
Evdev Axes Swap (269): 0
Axis Labels (270): "Rel X" (143), "Rel Y" (144), "Rel Horiz Wheel" (261), "
Rel Vert Wheel" (262)
Button Labels (271): "Button Left" (136), "Button Middle" (137), "Button Righ
t" (138), "Button Wheel Up" (139), "Button Wheel Down" (140), "Button Horiz Wheel Left"
(141), "Button Horiz Wheel Right" (142), "Button Side" (259), "Button Extra" (260), "But
ton Unknown" (257), "Button Unknown" (257), "Button Unknown" (257), "Button Unknown" (25
7)
Evdev Scrolling Distance (272): 1, 1, 1
Evdev Middle Button Emulation (273): 0
Evdev Middle Button Timeout (274): 50
Evdev Third Button Emulation (275): 0
Evdev Third Button Emulation Timeout (276): 1000
Evdev Third Button Emulation Button (277): 3
Evdev Third Button Emulation Threshold (278): 20
Evdev Wheel Emulation (279): 0
Evdev Wheel Emulation Axes (280): 0, 0, 4, 5
Evdev Wheel Emulation Inertia (281): 10
Evdev Wheel Emulation Timeout (282): 200
Evdev Wheel Emulation Button (283): 4
Evdev Drag Lock Buttons (284): 0
Accel Constant Deceleration
现已被264
这就是为什么我还在我的.xinputrc:
xinput --set-prop 11 264 2
希望它能对你有所帮助。