Console linux - Clavier

Mise à jour : Debian 10.6

Sommaire

1 - Principe

$ showkey -s ou --scancodes >> affiche les scancodes

$ showkey -k ou --keycodes >> affiche les codes clavier interprétés

$ showkey -a --ascii >> affiche les codes des touches en valeurs décimales/octales/hexadécimales
0x27 
39
m    109 0155 0x6d
0x32
50
m    109 0155 0x6d

2 - Scancode

$ showkey -s
le mode clavier était UNICODE
[ si vous essayez cela sous X Window, cela peut ne pas fonctionner
étant donné que le serveur X utilise également /dev/console ]

appuyer sur n'importe quelle touche (le programme terminera 10s après la dernière touche enfoncée)...
0x9c
0x10
0x90
0x11
0xe0 0x5f 0xe0 0xdf
0x45 0xc5
0x16 0x96 0x1f

3 - Keycode

3.1 - Showkey -k

$ showkey -k
le mode clavier était UNICODE
[ si vous essayez cela sous X Window, cela peut ne pas fonctionner
étant donné que le serveur X utilise également /dev/console ]

appuyer sur n'importe quelle touche (le programme terminera 10s après la dernière touche enfoncée)...
code clavier 28 relâcher
code clavier 16 appuyer
code clavier 16 relâcher
code clavier 17 appuyer
code clavier 17 relâcher
code clavier 18 appuyer
code clavier 18 relâcher
code clavier 245 appuyer
code clavier 245 relâcher
code clavier 431 appuyer
code clavier 431 relâcher

3.2 - Evemu

$ aptitude show evemu-tools
..
Description : Linux Input Event Device Emulation Library - test tools
The evemu library and tools are used to describe devices, record data, create
emulation devices and replay data from kernel evdev (input event) devices.
....

$ sudo aptitude install evemu-tools

$ man evemu-record
....
NAME
evemu-describe, evemu-record - print information and events from an input device
...
$ sudo evemu-record |grep KEY
Available devices:
/dev/input/event0: Sleep Button
/dev/input/event1: Power Button
/dev/input/event2: Power Button
/dev/input/event3: Video Bus
/dev/input/event4: Logitech K400 Plus
/dev/input/event5: Logitech M705
/dev/input/event6: PC Speaker
/dev/input/event7: HDA Digital PCBeep
/dev/input/event8: HDA Intel PCH Mic
/dev/input/event9: HDA Intel PCH Front Headphone
/dev/input/event10: HDA Intel PCH HDMI/DP,pcm=3
/dev/input/event11: HDA Intel PCH HDMI/DP,pcm=7
/dev/input/event12: HDA Intel PCH HDMI/DP,pcm=8
/dev/input/event13: HDA Intel PCH HDMI/DP,pcm=9
/dev/input/event14: HDA Intel PCH HDMI/DP,pcm=10
Select the device event number [0-14]:

Dans le cas présent, le clavier et la souris sont redirigés respectivement vers

/dev/input/event4:        Logitech K400 Plus
/dev/input/event5: Logitech M705
....
Select the device event number [0-14]:
4
# Event type 1 (EV_KEY)
# Event code 1 (KEY_ESC)
# Event code 2 (KEY_1)
# Event code 3 (KEY_2)
# Event code 4 (KEY_3)
# Event code 5 (KEY_4)
# Event code 6 (KEY_5)
# Event code 7 (KEY_6)
# Event code 8 (KEY_7)
# Event code 9 (KEY_8)
# Event code 10 (KEY_9)
# Event code 11 (KEY_0)
# Event code 12 (KEY_MINUS)
# Event code 13 (KEY_EQUAL)
# Event code 14 (KEY_BACKSPACE)
........
....
E: 0.000001 0001 001c 0000 # EV_KEY / KEY_ENTER 0
E: 1.718168 0001 0010 0001 # EV_KEY / KEY_Q 1
aE: 1.798381 0001 0010 0000 # EV_KEY / KEY_Q 0
E: 2.350115 0001 0011 0001 # EV_KEY / KEY_W 1
zE: 2.446259 0001 0011 0000 # EV_KEY / KEY_W 0
E: 3.290335 0001 0012 0001 # EV_KEY / KEY_E 1
eE: 3.404182 0001 0012 0000 # EV_KEY / KEY_E 0
E: 3.818402 0001 0013 0001 # EV_KEY / KEY_R 1
rE: 3.922501 0001 0013 0000 # EV_KEY / KEY_R 0
E: 4.292225 0001 0014 0001 # EV_KEY / KEY_T 1
tE: 4.404388 0001 0014 0000 # EV_KEY / KEY_T 0

4 - Ascii code

$ showkey -a (affiche les valeurs en decimal/octal/hexadecimal)

Appuyer sur n'importe quelle touche. Ctrl-D mettra fin au programme

a 97 0141 0x61
z 122 0172 0x7a
e 101 0145 0x65
r 114 0162 0x72
t 116 0164 0x74
9 0011 0x09 (tabulation)
A 65 0101 0x41
Z 90 0132 0x5a
E 69 0105 0x45
R 82 0122 0x52
Æ 195 0303 0xc3
134 0206 0x86
« 194 0302 0xc2
171 0253 0xab
€ 226 0342 0xe2
130 0202 0x82
172 0254 0xac
¶ 194 0302 0xc2
182 0266 0xb6
@ 64 0100 0x40
@ 64 0100 0x40
$ dumpkeys -l
....
0x0035 five
0x0036 six
0x0037 seven
0x0038 eight
0x0039 nine
0x003a colon
0x003b semicolon
0x003c less
0x003d equal
0x003e greater
0x003f question
0x0040 at
0x0041 A
0x0042 B
0x0043 C
0x0044 D
0x0045 E
0x0046 F
0x0047 G
0x0048 H
0x0049 I
0x004a J
0x004b K
0x004c L
.....
$ dumpkeys -k |grep "Keycode  18 "
keycode 18 = +e
shift keycode 18 = +E
altgr keycode 18 = euro
shift altgr keycode 18 = cent
control keycode 18 = Control_e
shift control keycode 18 = Control_e
altgr control keycode 18 = Control_e
shift altgr control keycode 18 = Control_e
alt keycode 18 = Meta_e
shift alt keycode 18 = Meta_E
altgr alt keycode 18 = Meta_e
shift altgr alt keycode 18 = Meta_E
control alt keycode 18 = Meta_Control_e
shift control alt keycode 18 = Meta_Control_e
altgr control alt keycode 18 = Meta_Control_e
shift altgr control alt keycode 18 = Meta_Control_e
shift shiftl keycode 18 = +E
altgr shiftl keycode 18 = euro
..........

Anisi le keycode 18 correspond au caractère "e" (noté +e) et l'euro est obtenu par la combinaison altgr + e, que le cent est obtenu avec la combinaison shift + altgr + e

5 - Configuration du clavier

5.1 - Configuration de base : keyboard-configuration

$ cat /etc/default/keyboard 
# KEYBOARD CONFIGURATION FILE

# Consult the keyboard(5) manual page.

XKBMODEL="pc105"
XKBLAYOUT="fr"
XKBVARIANT="latin9"
XKBOPTIONS="terminate:ctrl_alt_bksp"

BACKSPACE="guess"
$ sudo dpkg-reconfigure keyboard-configuration

Ce dernier permet de définir :

Une fois la nouvelle configuration définie, celle-ci sera prise en compte au prochain démarrage ou immédiatement avec l'une des commandes suivantes :

$ sudo service keyboard-setup restart

ou

$ sudo udevadm trigger --subsystem-match=input --action=change
$ sudo debconf-show keyboard-configuration |grep '*'
* keyboard-configuration/altgr: The default for the keyboard layout
* keyboard-configuration/modelcode: pc105
* keyboard-configuration/other:
* keyboard-configuration/optionscode:
* keyboard-configuration/store_defaults_in_debconf_db: true
* keyboard-configuration/layout:
* keyboard-configuration/variantcode: latin9
* keyboard-configuration/compose: No compose key
* keyboard-configuration/variant: Français - Français (variante obsolète)
* keyboard-configuration/toggle: No toggling
* keyboard-configuration/switch: No temporary switch
* keyboard-configuration/model: PC générique 105 touches (internat.)
* keyboard-configuration/layoutcode: fr
* keyboard-configuration/xkb-keymap: fr(latin9)

5.2 - Configurations optionnelles : kbd

Le paquet kbd fournit différents utilitaires permettant de configurer le clavier et l'affichage de la console/

5.2.1 Codage clavier ascii ou UTF8

La commande kbd_mode affiche (et permet de modifier) le mode ascii ou UTF-8 utilisé. Le mode par défaut est UTF-8

$ kbd_mode
Le clavier est mode Unicode (UTF -8)

Dans le mode ascii, seules les touches émettant des caractères ascii seront reconnues : les caractères accentués, ç, .. seront ignorées (caractère inconnu).

5.2.2 Vitesse de répétition

Il est possible de modifier la vitesse de répétition du clavier dans le mode console, avec la commande kbdrate suivie des options -d pour le délai avant la répétition et -r pour la fréquence de répétition. La commande arrondit aux valeurs les plus proches disponibles.

$ sudo kbdrate -r 750 -d 10 

Dans l'exemple ci-dessus, le temps d'attente sera de 750 ms et la vitesse de répétition de 10 fois par seconde. La commande kbdrate sans option, rétablit les valeurs par défaut.

6 - Modification de l'affectation des touches

Dans ce qui suit, on prend l'exemple de l'utilisation des touches Home et Arrêt PC. Sur le clavier considéré, ces touches ne sont pas utilisées (keycode nul), la modification consiste à les affecter au redémarrage et l'arrêt du système
$ showkey -k
.....
Code clavier 172 appuyé
Code clavier 172 relaché
$ showkey -k
.....
Code clavier 142 appuyé
Code clavier 142 relaché
$ dumpkeys -k |grep " 172 "
keycode 172 = nul nul nul
control keycode 172 = nul
shift control keycode 172 = nul
alt keycode 172 = nul
control alt keycode 172 = nul
$ dumpkeys -k |grep " 142 "
keycode 142 = nul nul nul
control keycode 142 = nul
shift control keycode 142 = nul
alt keycode 142 = nul
control alt keycode 142 = nul
$ sudo mkdir -p /usr/share/local/keymaps

$ sudo touch /usr/share/local/keymaps/personal.map
$ cat /usr/share/local/keymaps/personal.map
keycode 172 = F71
string F71= "sudo /bin/systemctl reboot\n"

keycode 142 = F70
string F70 = "sudo /bin/systemctl poweroff\n"
$ sudo loadkeys /usr/share/local/keymaps/personal.map
$ dumpkeys |grep F71
keycode 172 = F71 nul nul
string F71 = "sudo /bin/systemctl reboot\012"

$ dumpkeys -k |grep F70
keycode 142 = F70
string F70 = "sudo /bin/systemctl poweroff\012"
$ cat /etc/rc.local
#!/bin/sh -e
.....

# Personnalisation des touches (Home et Arrêt PC)
loadkeys /usr/share/local/keymaps/personal.map

...
exit 0
$ sudo /etc/rc.local

$ dumpkeys |grep F71
keycode 172 = F71 nul nul
string F71 = "sudo /bin/systemctl reboot\012"

$ dumpkeys -k |grep F70
keycode 142 = F70
string F70 = "sudo /bin/systemctl poweroff\012"