Touchpad-Scrolling für GTK3 invertieren

Marvin Gülker · 16.02.2014

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

Kategorien: Kurztipps, Software

Ü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.