Qt Aplicativo Desobedecendo o Xmodmap

7

Há muito tempo, criei um ~/.Xmodmap revertendo o 4 e 5 para criar "rolagem natural":

pointer = 1 2 3 5 4 7 6 8 9 10 11 12

Eu origem .Xmodmap em .xinitrc na moda padrão ( xmodmap $HOME/.Xmodmap & ). Isso funcionou durante anos sem problemas.

Instalei recentemente um aplicativo chamado cockatrice . Eu não tenho outros problemas com o programa, exceto que, por algum motivo, quando eu rolar dentro do programa, minha direção de rolagem não é "natural" (ou seja, é como se meu .Xmodmap não está sendo obedecido por apenas este aplicativo ).

Primeiro, achei que era um problema com meu módulo de entrada do Qt, mas percebi que declarava corretamente QT_IM_MODULE to xim no meu .xinitrc , e nunca tive esse problema com nenhum outro aplicação.

Este é um problema específico do aplicativo ou este é específico do Qt? O que devo tentar resolver ainda mais (ou resolvê-lo)?

A tentativa de definir isso universalmente por xinput falha:

$ xinput list 
⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ SynPS/2 Synaptics TouchPad                id=12   [slave  pointer  (2)]
⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
# unneeded information regarding my keyboard
$ xinput set-prop 2 "Evdev Scrolling Distance" -1 -1 -1
property 'Evdev Scrolling Distance' doesn't exist, you need to specify its type and format
    
por HalosGhost 08.08.2014 / 19:43

2 respostas

6

Parece ser específico do Qt (da tentativa no Qt Assistant). Eu acho que é porque o Qt usa apenas a distância de rolagem para seus eventos de roda.

Em vez de usar xmodmap aqui, você pode definir sua distância de rolagem para valores negativos.

Você pode configurá-lo através de um arquivo em /etc/X11/xorg.conf.d/ , para um mouse gerenciado pelo evdev:

Section "InputClass"
        Identifier "Reverse Scrolling"
        MatchIsPointer "on"
        Option "VertScrollDelta" "-1"
        Option "HorizScrollDelta" "-1"
        Option "DialDelta" "-1"
EndSection

Ou você pode tentar com xinput primeiro:

xinput set-prop <your device id> "Evdev Scrolling Distance" -1 -1 -1

(Para obter o ID do dispositivo: xinput list )

As propriedades são listadas com o dispositivo real. Aqui xinput list-props 12 deve listar as propriedades do touchpad. Como é um touchpad sináptico, de esta página man propriedade deve ser:

xinput set-prop <touchpad id> "Synaptics Scrolling Distance" -1 -1 (Apenas dois valores, bordas verticais e horizontais.)

Para a regra no arquivo de configuração, ele deve funcionar com MatchIsTouchpad :

Section "InputClass"
        Identifier "Natural Scrolling"
        MatchIsTouchpad "on"
        Option "VertScrollDelta" "-1"
        Option "HorizScrollDelta" "-1"
EndSection
    
por 09.08.2014 / 01:32
2

Quero complementar a resposta de @ Leiaz.
No meu caso, estou usando o Logitech M325 .
$ xinput

⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ HID 04b4:0823 id=10 [slave pointer (2)]
⎜ ↳ Logitech M325 id=12 [slave pointer (2)]
⎜ ↳ Logitech M185/M225 id=11 [slave pointer (2)]

$ xinput list-props 12

Device 'Logitech M325':
Device Enabled (152): 1
Coordinate Transformation Matrix (154): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
libinput Accel Speed (286): 0.000000
libinput Accel Speed Default (287): 0.000000
libinput Accel Profiles Available (288): 1, 1
libinput Accel Profile Enabled (289): 1, 0
libinput Accel Profile Enabled Default (290): 1, 0
libinput Natural Scrolling Enabled (291): 0
libinput Natural Scrolling Enabled Default (292): 0
libinput Send Events Modes Available (271): 1, 0
libinput Send Events Mode Enabled (272): 0, 0
libinput Send Events Mode Enabled Default (273): 0, 0
libinput Left Handed Enabled (293): 0
libinput Left Handed Enabled Default (294): 0
libinput Scroll Methods Available (295): 0, 0, 1
libinput Scroll Method Enabled (296): 0, 0, 0
libinput Scroll Method Enabled Default (297): 0, 0, 0
libinput Button Scrolling Button (298): 2
libinput Button Scrolling Button Default (299): 2
libinput Middle Emulation Enabled (300): 0
libinput Middle Emulation Enabled Default (301): 0
Device Node (274): "/dev/input/event16"
Device Product ID (275): 1133, 16394
libinput Drag Lock Buttons (302):
libinput Horizontal Scroll Enabled (303): 1

Note que existe uma propriedade "Natural Scrolling Enabled (291)", mude para "1", a direção da roda do mouse será inversa.
$ xinput set-prop 12 291 1

Se você quiser quebrar o procedimento em um script de shell, aqui está:

#!/bin/bash

dev_id=$(xinput | sed -n '/Logitech M325/{s/^.*Logitech M325\s\+id=\([0-9]\+\).*$//;p;}')

if [[ -z "$dev_id" ]];then
  exit 1
fi

nse_id=$(xinput list-props "$dev_id" | sed -n '/Natural Scrolling Enabled ([0-9]\+)/{s/^.*Natural Scrolling Enabled (\([0-9]\+\)).*//;p;}')

if [[ -z "$nse_id" ]];then
  exit 1
fi

xinput set-prop "$dev_id" "$nse_id" 1
xinput list-props "$dev_id" | grep -o "Natural Scrolling Enabled ($nse_id):\s\+[0-9]" 

Altere "Logitech M325" para o nome do seu próprio dispositivo.

    
por 12.04.2017 / 07:34