Desativando a aceleração do mouse no X.Org (Linux)

11

Esta é a versão Linux da minha aceleração desativação do mouse no Mac OS X pergunta. Espero obter uma resposta desta vez.

Estou cansado da aceleração do mouse e quero ter uma resposta completamente linear do mouse. Isso é facilmente possível através de qualquer um dos 5 métodos (alguns sutilmente implícitos) na página wiki do X.Org sobre aceleração de ponteiro . No entanto, eles também desabilitam a escala de velocidade .

Não quero um mapeamento 1: 1 entre as coordenadas do dispositivo e da tela. Eu quero um mapeamento 1: N onde N é uma constante . Alguma ideia?

aib
fonte

Respostas:

15

A única maneira de descobrir que funciona (e só tentei no Ubuntu) é com o xinputcomando

Primeiro, você precisa identificar o número do dispositivo do mouse que deseja alterar:

# 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)]

Agora, neste exemplo, vou jogar com o mouse da Microsoft. id = 10

Agora vamos ver com quais propriedades esse dispositivo pode lidar:

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

Este valor é como o driver lida com a aceleração:

-1: nenhum sem aceleração ou desaceleração do ponteiro dependente da velocidade. Se a desaceleração constante também não for utilizada, o processamento de movimento será suprimido, economizando alguns ciclos.

0: clássico (o padrão) semelhante ao comportamento antigo, mas mais previsível. Seleciona entre 'polinomial' e 'simples' com base no limite = /! = 0.

1: depende do dispositivo disponível se o driver de hardware o instalar. Pode estar chegando para os sinápticos.

2: polinômio Escalas polinomiais: a velocidade serve como coeficiente, a aceleração sendo o expoente. Muito utilizável, o perfil recomendado.

3: escalas lineares suaves principalmente lineares, mas com um início suave (não linear).

4: Transições simples entre acelerado / não acelerado, mas com um intervalo de transição suave. Isso tem o problema fundamental de acelerar em dois niveaus, nos quais a aceleração permanece independente da velocidade. Tradicionalmente o padrão, no entanto.

5: o poder acelera por uma função de poder. velocidade é o expoente aqui. Adere ao limite. Ficará difícil de controlar facilmente, por isso é importante que você tenha ajustado corretamente sua estimativa de velocidade.

6: linear apenas linear para velocidade e aceleração. Simples e limpo.

7: limitado sobe suavemente à aceleração, atingindo o limite máximo, onde se torna plano (é limitado).

Portanto, podemos ver que, se definirmos essa propriedade como -1, ela desativará completamente a aceleração.

$ xinput set-prop 10 259 -1

Então agora não temos aceleração, mas é isso que queremos? O mouse está um pouco lento agora. Infelizmente é assim que é. Com a aceleração desativada, você obtém um relacionamento 1: 1 entre o mouse e a tela. Você move o mouse para a esquerda um ponto e o ponteiro do mouse move um pixel para a esquerda. Se houvesse uma maneira de multiplicar o movimento de entrada (digamos 2), todos os outros pixels em cada eixo seriam inacessíveis ao mouse. Isso tornaria o posicionamento preciso do mouse bastante difícil. A configuração de 'sensibilidade' em alguns painéis de controle da GUI realmente faz o oposto do que você esperaria - a mais sensível é a proporção de 1: 1 - é a aceleração que faz com que pareça muito mais rápido.

Então você quer um movimento mais rápido, mas não quer aceleração. A única maneira de fazer isso é no hardware. Basicamente, você precisará comprar um mouse mais sensível. Procure um com um DPI mais alto (pontos por polegada - sim, como uma impressora). Acho que meu antigo Microsoft IntelliEye é sensível o suficiente com a aceleração desativada para ser utilizável.

Ou talvez o mouse seja sensível demais? Mesmo com a aceleração desativada, é muito rápido para você? Bem, é aí que o

Device Accel Constant Deceleration (260):      1.0000

a configuração é recebida. Essa é uma taxa de desaceleração constante (ou dessinsitizante). Por padrão, é 1: 1, mas terá qualquer número (frações pares) acima disso. Para obter uma ligeira desaceleração do mouse:

$ xinput set-prop 10 260 1.2

Ou uma grande desaceleração para um trabalho realmente delicado:

$ xinput set-prop 10 260 10

Ou retorne ao normal:

$ xinput set-prop 10 260 1

Isso funciona mesmo quando o perfil de aceleração está definido como -1 (Desativado).

Majenko
fonte
O que acontece se eu quiser menos sensibilidade com um mouse de alto DPI? Não, desculpe, o mapeamento 1: 1 simplesmente não funciona. E o próximo valor não é 1: 2, você poderia fazer, digamos, 1: 1.2. Na verdade, tenho certeza de que o código de aceleração atual tem um milhão de maneiras diferentes de ajustar as velocidades e obter uma resolução sub-pixel. Se ao menos houvesse um perfil "sem aceleração" - em vez de "desativar completamente as sub-rotinas de aceleração".
Aib
@aib Verifique minha edição
Majenko 21/03
Sinto muito, não é a desaceleração do ponteiro que eu preciso. (Bem, talvez seja, mas depois de eu ter escalado o meu movimento do mouse para cima e, sem comprar um novo mouse, obrigado.)
aib
Isso deve ser aceito. Eu não sabia que a desaceleração pode ser flutuante, e não apenas um número inteiro. Obrigado! O perfil none realmente desativa a aceleração (ao contrário do Windows).
Inf3rno
No Debian Stretch, elas parecem não funcionar mais: após a atualização, a propriedade Device Accel Constant Deceleration desapareceu, e o que tenho para esse mouse (xinput --list-props) parece não afetá-lo mais (deixando-me com um rato noturno inútil).
Jubatian
2

Olhando as fontes do X.org, brincando com um servidor personalizado e fazendo alguns testes obsessivos com o mouse, posso dizer com segurança que o perfil limitado atual (7) alcança isso quando o thresholdvalor é definido como 0. O accelerationvalor se torna a velocidade scaler (escalar?).

Então:

xinput set-prop <device> "Device Accel Profile" 7
xset m <velocity> 0

A segunda parte também pode ser definida usando o painel de configurações do mouse do ambiente da área de trabalho. Não esqueça que ele precisa estar em x/yforma para valores não inteiros, por exemplo, 16/10para 1.6.

Existem também outras configurações (desaceleração etc.) para ajustar, mas isso resolve a pior parte do problema. Alguns arquivos de configuração devem ser editados para permanência, mas, novamente, o importante é que isso é possível.

Edit: Para permanência, você pode adicionar isso ao seu xorg.xconf:

Section "InputClass"
        Identifier "Mouse with No Acceleration"
        MatchIsPointer "yes"
        MatchProduct "Mouse"
        Option "AccelerationProfile" "7"
EndSection

A partir daí, você pode usar as configurações de mouse do seu ambiente de área de trabalho, como mencionei. No entanto, se você deseja uma xorg.confsolução completa :

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
aib
fonte
<3 Obrigado. Funciona até no modo de suspensão.
Simon A. Eugster
0

Sei que isso é antigo, mas acho que merece adicionar uma resposta a uma pergunta já feita. O XSET fará o trabalho para você provavelmente. O comando que eu executei foi xset m 1 1...

O conteúdo da página de manual do xset que eu selecionei aqui do xset (1) para você para as opções do mouse:

rato

A opção m controla os parâmetros do mouse; pode ser abreviado para 'm'. Os parâmetros para o mouse são acceleration' andlimiar '. A aceleração pode ser especificada como um número inteiro ou como uma fração simples. O mouse ou qualquer ponteiro ao qual a máquina esteja conectada atingirá o acceleration' times as fast when it travels more thanlimite de pixels em um curto espaço de tempo. Dessa forma, o mouse pode ser usado para um alinhamento preciso quando movido lentamente, mas pode ser configurado para percorrer a tela em um movimento do pulso quando desejado. Um ou ambos os parâmetros para a opção m podem ser omitidos, mas se apenas um for fornecido, ele será interpretado como a aceleração. Se nenhum parâmetro ou o sinalizador 'padrão' for usado, os padrões do sistema serão definidos.

Se o threshold' parameter is provided and 0, theparâmetro aceleração '> for usado no expoente de uma fórmula> mais natural e contínua, fornecendo controle preciso para câmera lenta, mas grande alcance para velocidade rápida, e uma transição progressiva para movimentos intermediários. O valor recomendado de 'aceleração' neste caso é de 3/2 a 2, mas não limitado a esse intervalo.

Isenção de responsabilidade: isso não sobrevive a um novo login / reinicialização sem alguns truques extras ...

N_mag
fonte