web-dev-qa-db-fra.com

Défilement naturel dans l'ensemble du système 18.04?

Il s’agit de faire en sorte que le "défilement naturel", à savoir le "défilement inversé", fonctionne avec TOUTES les applications à l’échelle du système, avec souris et points de suivi USB. Ce problème me rend fou depuis le 12.04, où je l’ai tout à fait réussi à travailler avec de nombreuses solutions de contournement.

J'utilise buntu Studio 18.04 (xfce 4.12 desktop) et il existe une option de "défilement naturel" dans les préférences. Cela fonctionne comme prévu dans les navigateurs et les gestionnaires de fichiers, ainsi que dans les éditeurs de texte, etc.

Quelqu'un sait quel est l'état de développement sur ce sujet? Est-ce que je manque quelque chose?

Toute aide est appréciée avant que je ne recommence et que je teste toutes ces solutions de contournement.

Ubuntu Studio 18.04.1 avec xfce 4.12 4.15.0-20-lowlatency # 21-Ubuntu SMP PREEMPT

1
ronso0

Le comportement incohérent de "défilement inversé" incohérent, même parmi les applications ubuntu (x) par défaut, était dû à la gestion différente du défilement dans GTK2 et GTK3. Je ne sais pas si cela s'applique toujours ..

Quoi qu'il en soit, je viens de découvrir que le "vieux truc xinput" fonctionne toujours (xUbuntu 18.04.1, version xinput 1.6.2), donc je pourrais aussi bien partager son fonctionnement. Et comment le faire persister redémarre.

Test/solution temporaire

Répertoriez tous les pointeurs et claviers actuellement disponibles:

xinput list

Quelque chose comme ça va apparaître:

⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ Logitech USB Laser Mouse                  id=9    [slave  pointer  (2)]
⎜   ↳ TPPS/2 IBM TrackPoint                     id=12   [slave  pointer  (2)]
⎜   ↳ SynPS/2 Synaptics TouchPad                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)]
    ↳ Power Button                              id=8    [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=10   [slave  keyboard (3)]
    ↳ ThinkPad Extra Buttons                    id=13   [slave  keyboard (3)]

Choisissez le id du pointeur en question, répertoriez toutes ses propriétés de périphérique:

xinput list-props 12

Device 'TPPS/2 IBM TrackPoint':
    Device Enabled (143):   1
    Coordinate Transformation Matrix (145): 1.000000, ...
    libinput Natural Scrolling Enabled (281):   1
    libinput Natural Scrolling Enabled Default (282):   0
    libinput Scroll Methods Available (283):    0, 0, 1
    libinput Scroll Method Enabled (284):   0, 0, 1
    libinput Scroll Method Enabled Default (285):   0, 0, 1
    libinput Button Scrolling Button (286): 2
    ...


C’est ce dont nous avons besoin: libinput Natural Scrolling Enabled (281)

Pour activer le défilement naturel globalement, par exemple, pour "TPPS/2 IBM TrackPoint" (pour la session en cours), désactivez-le d'abord dans les préférences "Souris et pavé tactile".
Entrez l’une de ces deux lignes ci-dessous, appuyez sur Entrée. (les deux font la même chose, car pour lire ou écrire une propriété, vous pouvez utiliser son nom entier (!) ou son ID)

xinput set-prop 12 "libinput Natural Scrolling Enabled" 1

xinput set-prop 12 "281" 1

Maintenant, testez-le dans des applications où naturalscroling ne fonctionnerait pas via les préférences système.

Solution permanente

Si le test ci-dessus a fonctionné sur votre ordinateur, vous pouvez appliquer les modifications chaque fois que vous vous connectez à votre session avec un petit script de démarrage. La partie de script correspondant à deviceName provient de cette réponse à propos des cartes de boutons de @zerobandwidth).

Enregistrez le code ci-dessous sous le nom natural_scrolling.sh dans votre répertoire personnel ou dans /any/path/youLike.

#!/bin/bash
# Find all xinput devices whose name matches any of the arguments passed here,
# then set the Natural Scrolling' property to '1' regardless of its
# current state.

# expect multiple arguments, store them as array
deviceNames="$@"

# exit if no argument is passed
if [ "$deviceNames" = "" ]; then
        echo "No argument received, exiting."
        echo "Call this script with argument(s) like 'Logitech' that match"
        echo "any of your attached pointer devices."
    exit 1
fi

for deviceName in $deviceNames
do
    deviceId=$(xinput --list | awk -v search="$deviceName" \
    '$0 ~ search {match($0, /id=[0-9]+/);\
                  if (RSTART) \
                    print substr($0, RSTART+3, RLENGTH-3)\
                 }'\
     )
  # set device-specific property (works i.e for 'TrackPoint' & 'Logitech')
  xinput set-prop $id "libinput Natural Scrolling Enabled" 1
done

Marquez le script exécutable:

chmod +x natural_scrolling.sh

Appelez-le avec unique (!) device_name chaîne (s) comme argument:

/any/path/youLike/natural_scrolling.sh Logitech TrackPoint

Ajoutez-le à vos applications de démarrage, c'est-à-dire via les préférences de session et de démarrage dans xfce, et testez-le en vous reconnectant et en vous reconnectant.

2
ronso0

Hélas, je n'ai pas assez de réputation pour commenter, je vais donc devoir ajouter ceci comme réponse. Pour ceux qui tombent sur cela, il y a une très petite erreur dans le code ci-dessus. L'avant dernière ligne:

xinput set-prop $id "libinput Natural Scrolling Enabled" 1

Devrais lire:

xinput set-prop $deviceId "libinput Natural Scrolling Enabled" 1

De plus, j'utilise une souris ultra-fine Logitech et, pour une raison qui ne sait pas quoi, elle se connecte à la fois en tant que souris et clavier et apparaît donc deux fois dans xinput list. J'ai donc ajouté en piping la sortie à head -1 pour limiter ce qui est renvoyé à la première entrée (qui dans mon cas est toujours la souris):

...
                    print substr($0, RSTART+3, RLENGTH-3)\
                 }' | head -1 \
     )
...
1
Jack Lenox