Remapper la touche scroll sous Gnome Wayland

Published: 28-07-2016

Updated: 02-03-2018

By: Maxime de Roucy

tags: gnome keyboard wayland

Dans cette article, je détaille comment j’ai remappé la touche « scroll » sur le caractère « & » sous gnome-wayland.

On détermine le keycode X de la touche « scroll » :

max@laptop % sudo evtest /dev/input/by-id/usb-TypeMatrix.com_USB_Keyboard-event-kbd  | grep 'EV_KEY.*value 1'
Event: time 1469737067.370782, type 1 (EV_KEY), code 70 (KEY_SCROLLLOCK), value 1
max@laptop % echo $((70+8))
78

ou :

max@laptop % xev | awk -F'[ )]+' '/^KeyPress/ { a[NR+2] } NR in a { printf "%-3s %s\n", $5, $8 }'
78  Scroll_Lock

Le keycode X de la touche est 78.

Les keycode symbolique de la touche « scroll » est « SCLK » :

max@laptop % grep '\s78;' /usr/share/X11/xkb/keycodes/evdev
        <SCLK> = 78;

Le keysym de « & » est « ampersand » :

max@laptop % grep 'key .* &' /usr/share/X11/xkb/symbols/fr
    key <AE01>  { [        ampersand,                1,           dead_caron,           dead_ogonek ] }; // & 1 ˇ
    key <AE01>  { [        ampersand,                1,           dead_caron,          dead_cedilla ] }; // & 1 ˇ ¸
    key <AE01>  { [        ampersand,                1,                caron,                ogonek ] }; // & 1 ˇ
    key <AD03> { [               p,            P,      ampersand,        section ] }; // p P & §

On écrit un fichier XkeyboardConfig associant la touch « scroll » au symbole « & » :

root@laptop # cat > /usr/share/X11/xkb/symbols/perso
partial alphanumeric_keys
xkb_symbols "scroll" {
    // Scroll key
    key <SCLK> { [ ampersand ] } ; // &
};

On ajoute, sous le nom perso:scroll, le block xkb_symbols "scroll" du fichier /usr/share/X11/xkb/symbols/perso (+perso(scroll)) à la liste des options (! option = symbols). Cette opération sera à refaire à chaque réinstallation/mise à jour du paquet xkeyboard-config.

root@laptop # cp /usr/share/X11/xkb/rules/evdev /tmp
root@laptop # vim /usr/share/X11/xkb/rules/evdev
root@laptop # diff -Naur /tmp/evdev /usr/share/X11/xkb/rules/evdev
--- /tmp/evdev  2016-07-28 22:37:10.486058981 +0200
+++ /usr/share/X11/xkb/rules/evdev      2016-07-28 22:37:31.436363836 +0200
@@ -958,6 +958,7 @@
   *                    misc:typo       = +typo(base):4
 
 ! option       =       symbols
+  perso:scroll         =       +perso(scroll)
   grp:shift_toggle     =       +group(shifts_toggle)
   altwin:menu          =       +altwin(menu)
   altwin:meta_alt      =       +altwin(meta_alt)

Il semble que, sous X11 (que je n’utilise pas ; j’utilise gnome-wayland), il soit aussi demandé de modifier le fichier evdev.lst pour ajouter une description à « perso » et « perso:scroll ». J’ai aussi du modifier les fichiers /usr/share/X11/xkb/rules/base{,.lst} pour que l’option « perso:scroll » soit affiché par localectl list-x11-keymap-options. J’ai ensuite supprimé ces modifications voyant qu’elle était inutile sous gnome-wayland. Si vous êtes sous X11 essayer :

max@laptop % localectl
     …
       VC Keymap: fr
      X11 Layout: fr
     X11 Variant: bepo
max@laptop % localectl list-x11-keymap-options | grep -i perso
perso:scroll
max@laptop % localectl set-x11-keymap fr '' bepo 'perso:scroll'
max@laptop % localectl
     …
       VC Keymap: fr
      X11 Layout: fr
     X11 Variant: bepo
     X11 Options: perso:scroll

La commande suivante permet d’activer « perso:scroll » sous gnome-wayland, l’effet est immédiat.

max@laptop % dconf dump /org/gnome/desktop/input-sources/
[/]
current=uint32 1
sources=[('xkb', 'fr+bepo'), ('xkb', 'fr+oss')]
xkb-options=['terminate:ctrl_alt_bksp']
max@laptop % gsettings get org.gnome.desktop.input-sources xkb-options
['terminate:ctrl_alt_bksp']
max@laptop % gsettings set org.gnome.desktop.input-sources xkb-options "['terminate:ctrl_alt_bksp', 'perso:scroll']"

Sources :