QVINTVS · SCRIBET

Touchpad-Scrolling für GTK3 invertieren

GTK3 führt Smooth Scrolling ein, was nicht ohne weiteres invertiert werden kann.

Über Touchpads kann man sich bekanntlich streiten. Insbesondere über die Art und Weise, wie man mit ihnen scrollt. Zwar hatte ich nur für eine verhältnismäßig kurze Zeit Kontakt mit Macs, bin allerdings sehr schnell ein Fan von deren sog. „natural scrolling“ geworden, bei dem man den Inhalt scrollt und nicht den Scrollbalken. Oder anders ausgedrückt: Es funktioniert so, wie man es von gängigen Smartphones gewöhnt ist.

Aktuelle Touchpad-Hardware zusammen mit einem aktuellen X unterstützt Zwei-Finger-Scrolling über den xf86-input-synaptics-Treiber. Bis vor kurzem war der Tipp, die Scrollrichtung zu invertieren, folgende Zeile in der ~/.xinitrc (wenn man so wie ich X manuell von der virtuellen Konsole aus startet):

xmodmap -e "pointer = 1 2 3 5 4 6 7 8 9 10"

Das tauscht die Mausbuttons 5 und 4, die traditionell für Scroll-Up und Scroll-Down stehen, aus. GTK3 hat allerdings vor einiger Zeit eine Technik namens Smooth Scrolling eingeführt, die keinen Gebrauch mehr von dieser traditionellen Methode macht. Das Ergebnis ist dann, dass trotz Mausbuttonvertauschen ein invertiertes Scrolling in GTK3-Anwendungen nicht funktioniert. Nervigerweise nur in GTK3-Anwendungen, sodass die eine Anwendung so herum, die andere so herum scrollt. Ein desolater Zustand.

Die Lösung findet sich in diesem Bugreport in Kommentar Nr. 5. Mithilfe von

% xinput list
⎡ Virtual core pointer                            id=2        [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                      id=4        [slave  pointer  (2)]
⎜   ↳ SynPS/2 Synaptics TouchPad                      id=10        [slave  pointer  (2)]
⎜   ↳ TPPS/2 IBM TrackPoint                           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)]
    ↳ Integrated Camera                               id=8        [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard                    id=9        [slave  keyboard (3)]
    ↳ ThinkPad Extra Buttons                          id=12        [slave  keyboard (3)]

stellt man zunächst fest, welches Xinput-Gerät das Touchpad ist. Bei mir ist es das mit der ID 10 (Synaptics TouchPad). Mit folgendem Kommando stellt man jetzt die Scrolling-Distanz fest:

% xinput list-props 10 | grep 'Distance' 
        Synaptics Scrolling Distance (274):        109, 109

Der Trick ist nun, diese Distanz einfach zu invertieren, d.h. ins Negative zu verkehren:

% xinput set-prop 10 "Synaptics Scrolling Distance" -109 -109

Danach sollten GTK3-Anwendungen wie gewünscht invertiert scrollbar sein. Der Trick funktioniert im Übrigen auch für alle anderen Anwendungen, sodass der eingangs genannte xmodmap-Befehl aus der ~/.xinirc entfernt und durch den obigen xinput set-prop-Befehl ersetzt werden kann.

Synaptics muss mindestens Version 1.6.2 sein, ältere Versionen haben offenbar Probleme mit negativen Scroll-Distanzen.

Valete.