Qt-Anwendung, die Xmodmap nicht gehorcht

7

Vor langer Zeit habe ich ein ~/.XmodmapUmkehren des 4und 5zum "natürlichen Scrollen" erstellt:

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

Ich Quelle .Xmodmapin .xinitrcder Standard - Mode ( xmodmap $HOME/.Xmodmap &). Dies hat jahrelang ohne Probleme funktioniert.

Ich habe kürzlich eine Anwendung namens installiert cockatrice. Ich habe keine anderen Probleme mit dem Programm, außer dass meine Bildlaufrichtung beim Scrollen innerhalb des Programms aus irgendeinem Grund nicht "natürlich" ist (dh es ist, als würde meine .Xmodmapnur von dieser Anwendung nicht befolgt).

Zuerst dachte ich , es ein Problem mit meinem Qt - Eingangsmodul ist, aber ich erkennen , dass ich richtig erklärt habe , QT_IM_MODULEum ximin meinem .xinitrc, und ich hatte noch nie dieses Problem mit einer anderen Anwendung.

Ist dies ein anwendungsspezifisches Problem oder ist dies Qt-spezifisch? Was sollte ich versuchen, um dieses Problem weiter zu beheben (oder zu lösen)?

Der Versuch, dies universell durchzusetzen, xinputschlägt fehl:

$ 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
HalosGhost
quelle

Antworten:

6

Es scheint Qt-spezifisch zu sein (vom Versuch in Qt Assistant). Ich denke, das liegt daran, dass Qt nur den Bildlaufabstand für seine Radereignisse verwendet.

Anstatt hier xmodmap zu verwenden, können Sie Ihren Bildlaufabstand auf negative Werte einstellen.

Sie können es über eine Datei in /etc/X11/xorg.conf.d/für eine von evdev verwaltete Maus festlegen:

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

Oder versuchen Sie es xinputzuerst mit:

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

(Um die Geräte - ID zu erhalten: xinput list)

Die Eigenschaften werden mit dem tatsächlichen Gerät aufgelistet. Hier xinput list-props 12sollten die Eigenschaften des Touchpads aufgelistet sein. Da es sich um ein Synaptics-Touchpad handelt, sollte die Eigenschaft auf dieser Manpage wie folgt lauten:

xinput set-prop <touchpad id> "Synaptics Scrolling Distance" -1 -1 (Nur zwei Werte, vertikale und horizontale Kanten.)

Für die Regel in der Konfigurationsdatei sollte Folgendes funktionieren MatchIsTouchpad:

Section "InputClass"
        Identifier "Natural Scrolling"
        MatchIsTouchpad "on"
        Option "VertScrollDelta" "-1"
        Option "HorizScrollDelta" "-1"
EndSection
Leiaz
quelle
Ich gehe davon aus, dass die Verwendung dieser Lösung bedeuten würde, sie nicht mehr zu verwenden xmodmapund dann zu hoffen, dass dies universell funktioniert. (Nicht unbedingt eine schlechte Sache, nur zur Klarstellung.)
HalosGhost
@ HalosGhost Ja, es sollte überall funktionieren. Und xmodmap sollte nicht gleichzeitig verwendet werden, sonst wird das Scrollen für einige Apps zweimal umgekehrt.
Leiaz
Ich bin endlich dazu gekommen, dies zu testen, aber die xorg conf-Datei hat keine Auswirkung, und das Testen durch xinputerzeugt den Fehler, den ich in der Bearbeitung des OP erwähne.
HalosGhost
@ HalosGhost Aktualisiert. Für ein Synaptics-Touchpad scheint die Eigenschaft "Synaptics Scrolling Distance" zu sein.
Leiaz
Die aktualisierte Konfiguration hat den gewünschten Effekt, erzeugt jedoch den Nebeneffekt eines unglaublich nervösen Bildlaufs.
HalosGhost
1

Ich möchte die Antwort von @ Leiaz ergänzen.
In meinem Fall verwende ich Logitech M325 .
$ xinput

⎡ ID des virtuellen Kernzeigers = 2 [
Hauptzeiger (3)] X XTEST-Zeiger-ID des virtuellen Kerns = 4 [Slave-Zeiger (2)]
↳ HID 04b4: 0823 id = 10 [Slave-Zeiger (2)]
↳ ite Logitech M325 id = 12 [Slave-Zeiger (2)]
ite ↳ Logitech M185 / M225 id = 11 [Slave-Zeiger (2)]

$ xinput list-props 12

Gerät 'Logitech M325':
Gerät aktiviert (152): 1
Koordinatentransformationsmatrix (154): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
libinput Beschleunigungsgeschwindigkeit (286): 0.000000
libinput Accel Speed ​​Default ( 287): 0.000000
Libinput-Beschleunigungsprofile verfügbar (288): 1, 1
libinput-Beschleunigungsprofil aktiviert (289): 1, 0
libinput-Beschleunigungsprofil aktiviert Standard (290): 1, 0
libinput Natural Scrolling aktiviert (291): 0
libinput Natural Scrolling Aktiviert Standard (292): 0
libinput Sendeereignismodi verfügbar (271): 1, 0
libinput Sendeereignismodus aktiviert (272): 0, 0
libinput Sendeereignismodus aktiviert Standard (273): 0, 0
libinput Linkshänder aktiviert (293): 0
libinput Linkshänder aktiviert Standard (294): 0
libinput Bildlaufmethoden verfügbar (295) ): 0, 0, 1
Libinput-Bildlaufmethode aktiviert (296): 0, 0, 0
Libinput-Bildlaufmethode aktiviert Standard (297): 0, 0, 0
Libinput- Schaltfläche Bildlaufschaltfläche (298): 2
Libinput- Schaltfläche Bildlaufschaltfläche Standard (299) ): 2
libinput Middle Emulation aktiviert (300): 0
libinput Middle Emulation aktiviert Standard (301): 0
Geräteknoten (274): "/ dev / input / event16" Geräteprodukt-
ID (275): 1133, 16394
libinput Drag-Lock-Schaltflächen (302):
libinput Horizontal Scroll Enabled (303): 1

Beachten Sie, dass die Eigenschaft "Natural Scrolling Enabled (291)" vorhanden ist. Ändern Sie sie in "1". Die Richtung Ihres Mausrads ist umgekehrt.
$ xinput set-prop 12 291 1

Wenn Sie die Prozedur in ein Shell-Skript einbinden möchten, finden Sie hier Folgendes:

#!/bin/bash

dev_id=$(xinput | sed -n '/Logitech M325/{s/^.*Logitech M325\s\+id=\([0-9]\+\).*$/\1/;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]\+\)).*/\1/;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]" 

Ändern Sie "Logitech M325" in den Gerätenamen Ihres eigenen.

Miau
quelle