Dr Clèm's Blog

Tags: Ubuntu Clavier Documentation Canonical

Comment changer disposition des touches du clavier sur Ubuntu ?

Monday Jul 27, 2020 20:07, last edition on Monday Jul 27, 2020 20:21

J'ai récemment acheté un clavier dont la disposition des touches du clavier est différente de mon précédent clavier. Je branche mon clavier sur mon poste avec Ubuntu 18.04 LTS (Bionic Beaver). Comment faire pour changer la disposition des touches ? Ce poste est la démarche en directe.

La documentation officielle

Premier réflexe, lire la documentation officielle. Je regarde donc les tutoriels, mais aucun ne correspond. Je passe donc à la documentation. Il n'y a rien coté serveur. Pour la version desktop, je trouve la page Use alternative keyboard layouts. Il semble que la manipulation décrite ne s'applique pas à mon cas car il doit me manquer des paquets. En effet, je n'ai pas le paquet ubuntu-desktop d'installé car il dépend de network-manager que je ne souhaite pas utiliser. Ce dernier est sensé être optionnel, mais en pratique, ce n'est pas le cas.

% sudo apt install --no-install-recommends ubuntu-desktop
[sudo] password for clement:
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages were automatically installed and are no longer required:
libllvm9 libllvm9:i386
Use 'sudo apt autoremove' to remove them.
The following additional packages will be installed:
gnome-control-center libcolord-gtk1 libndp0 libteamdctl0 network-manager network-manager-gnome
Suggested packages:
gnome-user-share realmd rygel | rygel-tracker libcanberra-gtk-module libteam-utils network-manager-openconnect-gnome network-manager-openvpn-gnome
network-manager-vpnc-gnome network-manager-pptp-gnome
Recommended packages:
libnss-myhostname dnsmasq-base network-manager-pptp iputils-arping mobile-broadband-provider-info network-manager-config-connectivity-ubuntu network-manager-pptp-gnome
The following NEW packages will be installed:
gnome-control-center libcolord-gtk1 libndp0 libteamdctl0 network-manager network-manager-gnome ubuntu-desktop
0 upgraded, 7 newly installed, 0 to remove and 34 not upgraded.
Need to get 3 494 kB of archives.
After this operation, 13,1 MB of additional disk space will be used.
Do you want to continue? [Y/n] n
Abort.

Le wiki communautaire

N'ayant rien trouvé dans la documentation officielle, je cherche dans le wiki communautaire. Il n'y a rien dans la section dédiée : InputDevices.

Je me tourne donc vers la documentation de Ubuntu-fr dédiée à la configuration du clavier. La première section ne semble pas être à jour. C'est une conséquence des changements fréquents de la part de Ubuntu. En effet, cela rend fastidieux la mise à jour de la documentation. J'arrive à la section En ligne de commande, notamment, la section 2.3.2 Définitivement.

sudo dpkg-reconfigure keyboard-configuration

Quel clavier dois-je sélectionner ?

Durant l'installation de Ubuntu, il est demandé de presser quelques touches pour détection la disposition cliavier. C'est un outil très pratique bien que imparfait. Avec la commande précédente, je me retrouve avec une liste de clavier, mais je ne sais pas lequel sélectionner. J'ai un Logitech K270. Celui-ci n’apparaît pas dans la liste. Je suppose que je dois me tourner vers un générique, mais là encore, je ne sais pas le nombre de touche, ni si c'est un intl.. Grace à la FAQ, je peux voir que j'ai la disposition Anglais (International). Il semble que la mention intl. corresponde à international en cherchant un peu sur le web. Je choisis celui avec 105 touches en me disant qui peut le plus, peut le moins.

keyboard configuration
Ensuite, je sélectionne English (US).
keyboard configuration
J'arrive à nouveau avec une liste choix où je me sens un peu perdu. Je vois une entrée English (US) - English (US, euro on 5). Étant donné que j'ai un signe euro sur la touche 5, je pense que c'est la bonne disposition. Essayons.
keyboard configuration
Une fois encore, un menu avec une liste où il faut choisir et où les explication sont trop succinctes pour faire un choix éclairé. J'ai une touche "Menu key", si je comprends bien ce qui est entendu par là, donc je sélectionne cette option.
keyboard configuration
Un nouveau choix se présente à moi. Je trouve ça interminable, et je commence à penser au nombre de combinaisons à réaliser avant de trouver la bonne disposition. J'ai l'impression qu'il faut être un expert pour changer de clavier. Je laisse l'option par défaut ne sachant pas quoi sélectionner.
keyboard configuration
Un nouveau choix se présente à moi, mais pour une fois, je le comprends et je sais quoi répondre.
keyboard configuration
Enfin, c'est fini, sauf que... sauf que ça prend du temps à configurer, et je ne connaîtrai le résultat qu'au prochain démarrage. C'est très lourd comme démarche.
% sudo dpkg-reconfigure keyboard-configuration
[sudo] password for clement:
Your console font configuration will be updated the next time your system
boots. If you want to update it now, run 'setupcon' from a virtual console.
update-initramfs: deferring update (trigger activated)
Processing triggers for initramfs-tools (0.130ubuntu3.9) ...
update-initramfs: Generating /boot/initrd.img-4.15.0-112-generic
J'essaye de lancer la commande setupcon mais cela ne semble pas fonctionner.
% setupcon
setupcon: We are not on the console, the console is left unconfigured.

Pour éviter le travail laborieux d’essayer toutes les combinaisons jusqu'à trouver la bonne, je cherche une alternative. Sur cette même page de wiki, on trouve la commande setxkbmap qui change pour quelques minutes la disposition des touches du clavier. En lisant le man, je ne trouve pas de moyen d'afficher les arguments valides, mais, il y a une référence vers un fichier

FILES
/usr/share/X11/xkb
En parcourant les fichiers, je finis par comprendre que l'information qui m'intéresse se trouve dans /usr/share/X11/xkb/symbols/us. Je comprends que le nom du fichier correspond au premier argument à passer à la commande, mais cela ne me donne pas encore la bonne disposition du clavier. Dans le fichier, il y a des des variables name[Group1]= dont je remarque qu'elles correspondent au valeur de la méthode permanente et que le le second argument à passer est la valeur de la variable xkb_symbols qui y est associée.
% grep xkb_symbols /usr/share/X11/xkb/symbols/us
xkb_symbols "basic" {
xkb_symbols "euro" {
xkb_symbols "ibm238l" {
xkb_symbols "intl" {
xkb_symbols "alt-intl" {
xkb_symbols "dvorak" {
xkb_symbols "dvorak-intl" {
xkb_symbols "dvorak-alt-intl" {
xkb_symbols "dvorak-l" {
xkb_symbols "dvorak-r" {
xkb_symbols "dvorak-classic" {
xkb_symbols "dvp" {
xkb_symbols "rus" {
xkb_symbols "mac" {
xkb_symbols "colemak" {
xkb_symbols "altgr-intl" {
xkb_symbols "classmate" {
xkb_symbols "classmate-intl" {
xkb_symbols "classmate-alt-intl" {
xkb_symbols "classmate-altgr-intl" {
xkb_symbols "olpc" {
xkb_symbols "olpc2" {
xkb_symbols "olpcm" {
xkb_symbols "chr" {
xkb_symbols "hbs" {
xkb_symbols "htcdream" {
xkb_symbols "workman" {
xkb_symbols "workman-intl" {
xkb_symbols "norman" {
xkb_symbols "carpalx" {
xkb_symbols "carpalx-intl" {
xkb_symbols "carpalx-altgr-intl" {
xkb_symbols "carpalx-full" {
xkb_symbols "carpalx-full-intl" {
xkb_symbols "carpalx-full-altgr-intl" {
xkb_symbols "cz_sk_de" {
xkb_symbols "scn" {
xkb_symbols "intl-unicode" {
xkb_symbols "alt-intl-unicode" {
xkb_symbols "ats" {
xkb_symbols "crd" {
xkb_symbols "sun_type6" {
Il reste de nombreuses possibilités, mais certains noms sont suffisamment explicites pour être exclu, par exemple dvorak. Je finis par me convaincre que la bonne disposition du clavier est donnée par
% setxkbmap us altgr-intl

Le travail n'est pas terminé. Il me reste encore à comprendre quelle combinaisons d'options va me permettre de rendre ce changement permanent. Le travail effectué au paragraphe précédent va juste me permettre de réduire les possibilités. Désormais, je sais que je dois choisir English (US) - English (intl., with AltGr dead keys) à la place de English (US) - English (US, euro on 5).

keyboard configuration
J'ai donc avancé d'une étape. Concernant le menu suivant, une fois de plus, je ne suis pas certain du choix. Je sélectionne Right Alt (AltGr), en gardant en tête que le premier choix, The default for the keyboard layout est peut-être le bon.
keyboard configuration
Pour le menu suivant, je laisse par défaut car cela me semble avoir un impact faible.
keyboard configuration
Je sais quoi répondre à la dernière question.
keyboard configuration
% sudo dpkg-reconfigure keyboard-configuration
[sudo] password for clement:
Your console font configuration will be updated the next time your system
boots. If you want to update it now, run 'setupcon' from a virtual console.
update-initramfs: deferring update (trigger activated)
Processing triggers for initramfs-tools (0.130ubuntu3.9) ...
update-initramfs: Generating /boot/initrd.img-4.15.0-112-generic
Il ne me reste plus qu'à redémarrer pour tester.

Échec

J'ai testé grub, les changements ont bien été pris en compte. J'ai aussi pu rentrer mon mot de passe avec la bonne disposition du clavier. Cela veut dire que cela est pris en compte par LightDM. Une première étape est donc franchie. Cependant, à l'ouverture de la session, la disposition du clavier est à nouveau avec l'ancienne disposition.

Où trouver de l'aide ?

Étant à court d'idée, je cherche de l'aide. Il y a de nombreux moyen d'obtenir de l'aide. Il y a notamment IRC disponible dans de nombreuses langues, dont anglais et français. En anglais, il y a le forum et Ask Ubuntu. En français, il y a le forum. J'ai l'impression que la liste de distribution a disparue.

De manière générale, je n'aime pas IRC ou les listes de distribution pour résoudre un problème notamment car il n'est pas possible d'éditer ses messages et car cela ne laisse pas une bonne trace pour la communauté. Je commence par Ask Ubuntu, tout simplement car je trouve l'interface plus agréable. Je tombe rapidement sur How do I change keyboards from the command line?. La réponse acceptée ne me satisfait pas car elle ne change pas la disposition du clavier par défaut. Cependant, parmi toutes les réponses, une répond à ma problématique. En effet, j'arrive à identifier le problème

% gsettings get org.gnome.desktop.input-sources sources
[('xkb', 'fr+latin9')]
J'essaye de voir si altgr-intl est présent dans le fichier /usr/share/X11/xkb/rules/base.lst
% grep altgr-intl /usr/share/X11/xkb/rules/base.lst altgr-intl us: English (intl., with AltGr dead keys)
J'essaye donc
% gsettings set org.gnome.desktop.input-sources sources "[('xkb', 'us+altgr-intl')]"
ça semble avoir bien été pris en compte
% gsettings get org.gnome.desktop.input-sources sources [('xkb', 'us+altgr-intl')]
Je redémare pour voir si tout fonctionne correctement.

Conclusion

Tout fonctionne correctement, grub, LighDM, GNOME. Mais cela m'a pris plus de 8h pour changer la disposition de mon clavier. La force d'Ubuntu est d'avoir pu répondre à la demande du grand public Je veux que ça fonctionne et Ubuntu y était parvenu avec brio pendant des années mais je sens un relâchement depuis plusieurs LTS. J'ai l'impression que Ubuntu et Canonical se concentrent de plus en plus vers l'industrie et d'autres champs d'application que l'ordinateur de bureau. C'est regrettable pour le grand public et ça me semble mauvais sur le plan stratégique car l'industrie n'aura pas tendance à accorder sa confiance à un partenaire qui bacle ses produits et Ubuntu est la plus grande vitrine pour Canonical.

La difficulté pour faire une action qui me semblait si simple vient de plusieurs facteurs.

Il y a de réelles problématiques techniques, par exemple le fait que ça impacte grub, c'est à dire avant que le système ne soit lancé.

Je n'ai pas simplifié la tache avec ma configuration personnalisée, sans network-manager. En un sens, c'est le prix de la liberté, mais cela vient tout de même d'un système qui est trop contraint à la base. En effet, pourquoi je ne peux pas changer la disposition de mon clavier si je ne souhaite pas utiliser le gestionnaire réseau par défaut.

Les changements trop fréquents de la part d'Ubuntu. En effet, la documentation n'est pas à jour, impossible de dire si les bugs sont encore d'actualité, les questions sur les plateformes d'entraide sont pertinentes seulement si elles sont suffisamment récentes et de nombreux membres de la communauté n'arrivent plus à aider car ils ne sont pas au courant de tel ou tel changement arrivé récemment.

Cela me fait revenir sur l'éternel compromis entre la liberté de forker, ce qui permet la créativité, et faire un effort commun pour se concentrer sur une solution pour l'améliorer et la rendre accessible au plus grand nombre.

Mastodon Follow me Mastodon Share
Comments
There is no comment yet.
Post a comment

* required field.

Your comment

*

About you

*

*

Dr Clément Février

Bonjour, Je suis Clément Février, docteur en physique théorique de l’université de Grenoble Alpes, ingénieur Recherche et Développement dans le domaine de l’imagerie médicale et de la chirurgie mini-invasive chez Surgivisio et soutien du mouvement La France Insoumise.


Dites les velotaffeur, vous avez entendu parler d'un casque qui a un feu avant, un feu arrière et des clignotants sur les cotés / avant arrière ? (Enfin un simple bandeau led de chaque coté se gère hein)
Genre un truc pour que les voitures voient qu'on tourne à droite ou gauche sans qu'on ai besoin de tendre le bras ?

Parce que bon, j'ai testé ce soir, passer sur les marquages au sol + les rails du tramway avec un bras levé sous la pluie, niveau stabilité on repassera ^^'

J'arrive pas à trouver :/ et les solutions existantes de clignotants sont seulement pour l'arrière

Si le coeur vous en dit vous pouvez partager ;)

#velotaff #boostappréciés :)

The only thing that really matter is, at the end of the day, to choose the correct method automatically without conditional statement at runtime. I really wonder is a workaround is possible.
I already tried to add "std::tuple< d1*, d2 > b_tuple" to class b, using some forward declaration, but, of course, std::get< i >(b_tuple) cannot compile since it will be known at runtime only.

But I allow complete refactoring code, even the b and d1 & d2. Templates, new classes and sub classes and even are fine (I already put 100-lines define to add iterator to enum and another one to allow enum inheritance, and my coworkers begin to hate me ^^)
For example, method "create" can become a class, or class b can be construct using a macro to make somehow the base class aware of derived ones
BASE(b, ...) std::tuple< __VA_ARGS__ > g_ ## b; class b