在 X.Org (Linux) 中禁用鼠标加速

aib*_*aib 12 linux mouse xorg ubuntu

这是我在 Mac OS X 中禁用鼠标加速问题的 Linux 版本。希望这次我能得到答案。

我厌倦了鼠标加速,想要一个完全线性的鼠标响应。这可以通过X.Org wiki 页面上关于指针加速的 5 种左右方法中的任何一种(有些隐含的暗示)轻松实现。但是,它们也会禁用速度缩放

我不想要设备和屏幕坐标之间的 1:1 映射。我想要一个 1:N 映射,其中 N 是一个常量。有任何想法吗?

Maj*_*nko 16

我发现有效的唯一方法(我只在 Ubuntu 上尝试过)是使用xinput命令。

首先,您必须确定要更改的鼠标的设备编号:

# xinput list
â¡ Virtual core pointer                         id=2    [master pointer  (3)]
â   â³ Virtual core XTEST pointer               id=4    [slave  pointer  (2)]
â   â³ Microsoft Microsoft 5-Button Mouse with IntelliEye(TM)   id=10   [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)]
    â³ Power Button                             id=7    [slave  keyboard (3)]
    â³ CHICONY USB Keyboard                     id=8    [slave  keyboard (3)]
    â³ CHICONY USB Keyboard                     id=9    [slave  keyboard (3)]
    â³ IR-receiver inside an USB DVB receiver   id=11   [slave  keyboard (3)]
Run Code Online (Sandbox Code Playgroud)

现在,在此示例中,我将使用 Microsoft 鼠标进行游戏。 id=10

现在让我们看看这个设备可以处理哪些属性:

# xinput list-props 10
Device 'Microsoft Microsoft 5-Button Mouse with IntelliEye(TM)':
    ... cruft cut ...
    Device Accel Profile (259):     3
    ... cruft cut ...
Run Code Online (Sandbox Code Playgroud)

该值是驱动程序处理加速度的方式:

-1: none无与速度相关的指针加速或减速。如果也未使用恒定减速,则会抑制运动处理,从而节省一些周期。

0:经典(默认)类似于旧行为,但更可预测。根据阈值 =/!= 0 在“多项式”和“简单”之间进行选择。

1:如果硬件驱动程序安装它,则依赖于设备。可能是为了突触。

2:多项式标度多项式:速度为系数,加速度为指数。非常好用,推荐配置文件。

3:平滑的线性比例主要是线性的,但具有平滑(非线性)的开始。

4:加速/非加速之间的简单过渡,但具有平滑的过渡范围。这具有在两个 niveau 上加速的基本问题,在这两个 niveau 上,加速度与速度无关。然而,传统上是默认的。

5:power通过幂函数加速。速度是这里的指数。坚持门槛。很容易难以控制,因此正确调整速度估计非常重要。

6:linear与速度和加速度成线性关系。简单干净。

7:limited平稳上升到加速,在阈值处达到最大值,在那里它变得平坦(受限)。

所以从中我们可以看到,如果我们将此属性设置为 -1,它将完全禁用加速。

$ xinput set-prop 10 259 -1
Run Code Online (Sandbox Code Playgroud)

所以现在我们没有加速度,但这就是我们想要的吗?鼠标现在有点慢。可惜事情就是这样。禁用加速后,鼠标和显示器之间的关系为 1:1。您将鼠标向左移动一个,鼠标指针向左移动一个像素。如果有一种方法可以将输入移动(例如乘以 2)相乘,那么鼠标将无法访问每个轴上的每个其他像素。这将使鼠标的准确定位变得非常困难。某些 GUI 鼠标控制面板中的“灵敏度”设置实际上与您期望的相反 - 最敏感的是 1:1 的比例 - 正是加速度使它看起来更快。

所以你想要更快的运动,但你不想要加速。唯一可以做到这一点的方法是硬件。基本上,您需要购买更灵敏的鼠标。寻找具有更高 DPI(每英寸点数 - 是的,就像打印机一样)的产品。我发现我的旧 Microsoft IntelliEye 足够灵敏,禁用加速功能可以使用。

或者你的鼠标太灵敏了?即使禁用加速,它也太快了?嗯,这就是

Device Accel Constant Deceleration (260):      1.0000
Run Code Online (Sandbox Code Playgroud)

设置进来了。这是一个恒定的减速(或脱敏)比率。默认情况下,它是 1:1,但会采用高于此的任何数字(偶数分数)。要稍微减慢鼠标速度:

$ xinput set-prop 10 260 1.2
Run Code Online (Sandbox Code Playgroud)

或者对真正精细的工作大幅放缓:

$ xinput set-prop 10 260 10
Run Code Online (Sandbox Code Playgroud)

或者恢复正常:

$ xinput set-prop 10 260 1
Run Code Online (Sandbox Code Playgroud)

即使将加速度配置文件设置为 -1(禁用),这也有效。


aib*_*aib 2

浏览 X.org 的源代码,使用自定义服务器并用鼠标进行一些强迫性测试,我可以有把握地说,当该值设置为 0时,当前的有限配置文件 (7) 实现了这一点。然后该值就变成了速度缩放器(标量?)。thresholdacceleration

所以:

xinput set-prop <device> "Device Accel Profile" 7
xset m <velocity> 0
Run Code Online (Sandbox Code Playgroud)

第二部分也可以使用桌面环境的鼠标设置面板进行设置。不要忘记它需要采用x/y非整数值的形式,例如16/101.6。

还有一些其他设置(减速度等)需要调整,但这解决了问题最糟糕的部分。一些配置文件应该被编辑以实现永久性,但同样重要的是它是可能的。

编辑:为了永久性,您可以将其添加到您的xorg.xconf

Section "InputClass"
        Identifier "Mouse with No Acceleration"
        MatchIsPointer "yes"
        MatchProduct "Mouse"
        Option "AccelerationProfile" "7"
EndSection
Run Code Online (Sandbox Code Playgroud)

从那里开始,您可以使用桌面环境的鼠标设置,正如我所提到的。但是,如果您想要完整的xorg.conf解决方案:

Section "InputClass"
        Identifier "Mouse With No Acceleration"
        MatchIsPointer "yes"
        MatchProduct "Mouse"
        Option "AccelerationProfile"     "7" # "limited" profile
        Option "AccelerationNumerator"   "2" # these adjust the sensitivity
        Option "AccelerationDenominator" "1" # these adjust the sensitivity
        Option "AccelerationThreshold"   "0" # this disables acceleration
                                             # in the "limited" profile
EndSection
Run Code Online (Sandbox Code Playgroud)