J’ai récemment changé de souris pour une souris ergonomique 3M (souris verticale). Celle-ci possède 3 boutons mais pas de roulette pour le défilement, ce qui est pénible mais pas une fatalité. Comme avec les souris trackball, il faut donc simuler la roulette en définissant un bouton qui, appuyé tout en bougeant la souris, va effectuer le défilement. Sous Gnome avec Ubuntu 18.04, il y a 3 manières de s’y prendre :

Facile mais limité

Avec Dconf, accéder à la clé org.gnome.desktop.peripherals.trackball.scroll-wheel-emulation-button et changer la valeur à 2. Ceci semble marcher pour les trackballs Logitech, mais pas avec ma souris. Ce réglage est chargé dans gsettings donc conservé entre deux redémarrage et personnalisable pour chaque utilisateur.

Temporaire

La commande xinput renvoie la liste des périphériques d’entrée disponibles, sous Wayland comme sous Xorg:

 1$ xinput
 2⎡ Virtual core pointer                    	    id=2	[master pointer  (3)]
 3⎜   ↳ Virtual core XTEST pointer              	id=4	[slave  pointer  (2)]
 4⎜   ↳ SynPS/2 Synaptics TouchPad              	id=19	[slave  pointer  (2)]
 5⎜   ↳ TPPS/2 IBM TrackPoint                   	id=20	[slave  pointer  (2)]
 6⎜   ↳ PixArt USB Optical Mouse                	id=16	[slave  pointer  (2)]
 7⎣ Virtual core keyboard                          id=3	[master keyboard (2)]
 8    ↳ Virtual core XTEST keyboard             	id=5	[slave  keyboard (3)]
 9    ↳ Power Button                            	id=6	[slave  keyboard (3)]
10    ↳ Video Bus                               	id=7	[slave  keyboard (3)]
11    ↳ Video Bus                               	id=8	[slave  keyboard (3)]
12    ↳ Sleep Button                            	id=9	[slave  keyboard (3)]
13    ↳ Integrated Camera: Integrated C         	id=17	[slave  keyboard (3)]
14    ↳ AT Translated Set 2 keyboard            	id=18	[slave  keyboard (3)]
15    ↳ ThinkPad Extra Buttons                  	id=21	[slave  keyboard (3)]

Il faut alors repérer dans cette liste la souris : PixArt USB Optical Mouse. Pour obtenir les options disponibles, on peut entrer la commande xinput --list-props "PixArt USB Optical Mouse" :

 1$ xinput --list-props "PixArt USB Optical Mouse"
 2Device 'PixArt USB Optical Mouse':
 3	Device Enabled (171):	1
 4	Coordinate Transformation Matrix (173):	1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
 5	libinput Natural Scrolling Enabled (351):	0
 6	libinput Natural Scrolling Enabled Default (352):	0
 7	libinput Scroll Methods Available (355):	0, 0, 1
 8	libinput Scroll Method Enabled (356):	0, 0, 0
 9	libinput Scroll Method Enabled Default (357):	0, 0, 1
10	libinput Button Scrolling Button (358):	2
11	libinput Button Scrolling Button Default (359):	2
12	libinput Middle Emulation Enabled (360):	0
13	libinput Middle Emulation Enabled Default (361):	0
14	libinput Accel Speed (362):	0.198529
15	libinput Accel Speed Default (363):	0.000000
16	libinput Accel Profiles Available (364):	1, 1
17	libinput Accel Profile Enabled (365):	1, 0
18	libinput Accel Profile Enabled Default (366):	1, 0
19	libinput Left Handed Enabled (367):	0
20	libinput Left Handed Enabled Default (368):	0
21	libinput Send Events Modes Available (293):	1, 0
22	libinput Send Events Mode Enabled (294):	0, 0
23	libinput Send Events Mode Enabled Default (295):	0, 0
24	Device Node (296):	"/dev/input/event14"
25	Device Product ID (297):	2362, 9488
26	libinput Drag Lock Buttons (353):	<no items>
27	libinput Horizontal Scroll Enabled (354):	1

L’option pertinente est libinput Scroll Method Enabled (356): 0, 0, 0 qui dit qu’aucune méthode n’est active. L’option libinput Scroll Methods Available (355): 0, 0, 1 renseigne sur les méthodes disponibles dans l’ordre :

  1. défilement à deux doigts = 0 : pas de défilement à 2 doigts
  2. défilement sur le bord = 0 : pas de défilement sur le bord disponible
  3. défilement par bouton = 1 : défilement par bouton disponible.

La commande xinput --set-prop "PixArt USB Optical Mouse" "libinput Scroll Method Enabled" 0, 0, 1 va donc activer le défilement jusqu’au prochain démarrage.

Définitif

On veut donc entrer ce réglage dans le marbre pour le garder entre deux démarrages. Il faut créer le répertoire /etc/X11/xorg.conf.d/ (absent par défaut sous les nouvelles versions d’Ubuntu) puis y créer un fichier 40-libinput.conf contenant :

1Section "InputClass"
2        Identifier      "Marble Mouse"
3        MatchProduct    "PixArt USB Optical Mouse"
4        Driver          "libinput"
5        Option          "ScrollMethod" "button"
6EndSection

Après redémarrage, la configuration est prise en compte et sera la même pour tous les utilisateurs du système. Le nom à indiquer dans l’option MatchProduct est le même que celui retourné par xinput. Ici on n’a pas besoin de définir quel bouton est utilisé pour le défilement puisque xinput montre que c’est déjà le bon bouton (2) qui est utilisé par défaut. Si ce n’était pas le cas, on pourrait ajouter l’option :

1Option          "ScrollButton" "8"

Additionnel

Si, comme moi, vous avez un souci avec la mise en veille automatique de la souris (sur ordinateur portable, les périphériques sont mis en veille automatiquement après 2-3 s d’inactivité), vous devez blacklister le périphérique USB par son identifiant pour l’exclure de la mise en veille. Si vous utilisez TLP, il faut d’abord relever l’identifiant du périphérique avec la commande lsusb :

 1$ lsusb
 2Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
 3Bus 001 Device 005: ID 138a:0097 Validity Sensors, Inc.
 4Bus 001 Device 003: ID 04f2:b5ab Chicony Electronics Co., Ltd
 5Bus 001 Device 024: ID 093a:2510 Pixart Imaging, Inc. Optical Mouse
 6Bus 001 Device 022: ID 0835:8502 Action Star Enterprise Co., Ltd
 7Bus 001 Device 021: ID 0835:8500 Action Star Enterprise Co., Ltd
 8Bus 001 Device 017: ID 0835:8501 Action Star Enterprise Co., Ltd
 9Bus 001 Device 016: ID 0835:8500 Action Star Enterprise Co., Ltd
10Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Ici, l’ID de la souris optique est 093a:2510. Il suffit alors d’éditer le fichier /etc/default/tlp à la section USB autosuspend :

1# Exclude listed devices from USB autosuspend (separate with spaces).
2# Use lsusb to get the ids.
3# Note: input devices (usbhid) are excluded automatically
4USB_BLACKLIST="093a:2510"

puis redémarrer l’ordinateur (ou TLP).

Source : https://wiki.archlinux.org/index.php/Logitech_Marble_Mouse