Bonjour,
Si vous avez besoin de créer un agencement personnalisé de clavier et de répéter l'opération, il peut être intéressant de créer un script qui automatise l'opération. En lien avec la page du
wiki, vous trouverez ci-dessous un exemple (au cas d'espèce, décalage des touches de la rangée du bas du clavier pour récupérer < et > qui avaient migré ailleurs, sur un tout petit clavier).
Il est ainsi possible d'
- intègrer une variante à l’intérieur du fichier des claviers français /usr/share/X11/xkb/symbols/fr (ajout en fin de fichier).
- insèrer le renvoi à cette variante dans le fichier /usr/share/X11/xkb/rules/evdev.xml, en fin de section <variantList> du groupe des claviers français.
Après redémarrage du système, la variante est disponible dans les paramètres de clavier.
Ce script a été testé avec succès en 2019 sur une installation Xenial Xerus 16.04.
#!/bin/bash
# Copie de sauvegarde & initialisation (avec un test pour être certain de en pas perdre le tout premier fichier issu de l'installation)
FichierClavierAModifier="/usr/share/X11/xkb/symbols/fr"
FichierListeDesClaviersAModifier="/usr/share/X11/xkb/rules/evdev.xml"
ext=".anc"
i=0; while [[ -f "$FichierClavierAModifier""$ext""$i" ]]; do let "i++"; done
if [[ -f "$FichierClavierAModifier""$ext" ]]; then
cp "$FichierClavierAModifier" "$FichierClavierAModifier""$ext""$i"
else
cp "$FichierClavierAModifier" "$FichierClavierAModifier""$ext"
fi
i=0; while [[ -f "$FichierListeDesClaviersAModifier""$ext""$i" ]]; do let "i++"; done
if [[ -f "$FichierListeDesClaviersAModifier""$ext" ]]; then
cp "$FichierListeDesClaviersAModifier" "$FichierListeDesClaviersAModifier""$ext""$i"
else
cp "$FichierListeDesClaviersAModifier" "$FichierListeDesClaviersAModifier""$ext"
fi
# ------------------------------------------------------
usage () { # Information sur le script, utilisation et résultats attendus
local status=${1}
echo ""
echo " $(basename $0)"
echo ""
echo " Modifie les paramètres des fichiers $FichierClavierAModifier et $FichierListeDesClaviersAModifier pour ajouter une variante de clavier adaptée à l'appareil."
echo ""
echo " Version 0.0 - 02/11/2019"
echo ""
echo " "
echo ""
echo " Exemple :"
echo " ----------"
echo " $(basename $0) "
exit "${1}"
}
# ------------------------------------------------------
if [[ "${1}" == "-h" ]] || [[ "${1}" == "-help" ]] || [[ "${1}" == "--help" ]] || [[ "${1}" == "--aide" ]] || [[ "${1}" == "-a" ]]; then
usage
fi
# Insertion de la nouvelle variante en fin de fichier clavier FichierClavierAModifier
# -----------------------------------------------------------------------------------
NvFichierClavier=$(mktemp)
cp "$FichierClavierAModifier" "$NvFichierClavier"
echo "
partial alphanumeric_keys
xkb_symbols \"Clavier_personnalise\" {
include \"fr(basic)\"
name[Group1]=\"French\";
key <AB01> { [ less, greater, guillemotleft, guillemotright ] };
key <AB02> { [ w, W, lstroke, Lstroke ] };
key <AB03> { [ x, X, dead_acute, dead_doubleacute ] };
key <AB04> { [ c, C, copyright, cent ] };
key <AB05> { [ v, V, diamond, leftradical ] };
key <AB06> { [ b, B, ssharp, horizconnector ] };
key <AB07> { [ n, N, dead_tilde, asciitilde ] };
key <AB08> { [ comma, question, exclamdown, questiondown ] };
key <AB09> { [ semicolon, period, VoidSymbol, periodcentered ] };
key <AB10> { [ colon, slash, exclam, section ] };
};" >> "$NvFichierClavier"
# Remplacement de l'ancien fichier
mv "$NvFichierClavier" "$FichierClavierAModifier"
chmod ga+r "$FichierClavierAModifier"
chmod u+rw "$FichierClavierAModifier"
chown root:root "$FichierClavierAModifier"
# Modification de la liste des variantes dans FichierListeDesClaviersAModifier
# ----------------------------------------------------------------------------
# Trouve le numéro de ligne de la 1ere occurence de <name>fr</name>
NumLigneBlocFr=$(grep -ne "<name>fr</name>" -m 1 "$FichierListeDesClaviersAModifier" | cut -d: -f1)
# Compte le nb de lignes
NbLignesFichier=$(wc -l "$FichierListeDesClaviersAModifier" | cut -d' ' -f1)
let "NbLignesApresDebutBlocFr=$NbLignesFichier-$NumLigneBlocFr"
# Repère la fin de la liste des variantes
NumLigneFinVariantes=$(tail -n "$NbLignesApresDebutBlocFr" "$FichierListeDesClaviersAModifier" | grep -ne "</variantList>" -m 1 | cut -d: -f1)
let "NumLigneFinVariantes=$NumLigneBlocFr+$NumLigneFinVariantes+1"
# Création du nouveau fichier par insertion de la nouvelle variante
let "NbLignesQuiPrecedent=$NumLigneFinVariantes-1"
let "NbLignesQuiSuivent=$NbLignesFichier-$NbLignesQuiPrecedent+1"
fichierTEMP=$(mktemp)
head -n "$NbLignesQuiPrecedent" "$FichierListeDesClaviersAModifier" > "$fichierTEMP" # début inchangé
echo " <variant>
<configItem>
<name>Clavier_personnalise</name>
<description>Français disposition spécifique personnalisée</description>
<languageList>
<iso639Id>fra</iso639Id>
</languageList>
</configItem>
</variant>" >> "$fichierTEMP" # nouvelle variante
tail -n "$NbLignesQuiSuivent" "$FichierListeDesClaviersAModifier" >> "$fichierTEMP" # fin inchangée
# Remplacement de l'ancien par le nouveau
sudo mv "$fichierTEMP" "$FichierListeDesClaviersAModifier"
chmod ga+r "$FichierListeDesClaviersAModifier"
chmod u+rw "$FichierListeDesClaviersAModifier"
chown root:root "$FichierListeDesClaviersAModifier"
# réinitialisation claviers -> j'ai laissé la ligne (cf discussion) mais l'opération ne semble plus nécessaire
# -------------------------
# rm /var/lib/xkb/*.xkm
# Information
# -----------
zenity --info --text="Nouveau clavier intégré dans la liste des variantes.\nVeuillez redémarrer le système puis vous reconnecter pour que le nouveau clavier soit pris en compte.\nLe changement de clavier se fait ensuite dans le dialogue des préférences de clavier.\nEn cas de problème, essayer de désactiver le pavé numérique (Fn+Insert)"
echo -e "Nouveau clavier intégré dans la liste des variantes.\nVeuillez redémarrer le système puis vous reconnecter pour que le nouveau clavier soit pris en compte.\nLe changement de clavier se fait ensuite dans le dialogue des préférences de clavier.\nEn cas de problème, essayer de désactiver le pavé numérique (Fn+Insert)"
exit 0;
Watael (voir ci-dessous) m'a fait remarquer :
Watael a écrit
s'il y a plusieurs sudo dans un script, tout le script doit probablement être exécutable en sudo
C'est une remarque de bon sens, de celles dont on se demande pourquoi on n'y a pas pensé tout seul. Le script a été revu en ce sens, ce qui implique que LE SCRIPT DOIT NÉCESSAIREMENT ÊTRE EXÉCUTÉ AVEC SUDO.
Par ailleurs, ainsi que précisé dans le wiki,
- le nom de la variante doit être identique dans les 2 fichiers et dépourvu d'espaces et d'accents.
- dans la liste des claviers, c'est la description (<description>Français disposition spécifique personnalisée</description>) du fichier evdev.xml qui sera mentionnée et triée par ordre alphabétique. Si vous souhaitez repérer votre variante dans la liste des claviers français, il est important de débuter sa description par le mot « Français ». Dans le fichier fourni par la distribution les autres variantes sont identifiées « French » puis traduites automatiquement mais cela n'est pas le cas des variantes personnalisées, sauf probablement à intervenir ailleurs (dans les locales ?) ce qui est probablement très « pur » mais pas très utile (sauf peut-être pour un constructeur de clavier).
- il est très utile de mentionner le groupe pour le classement dans la liste des nombreux claviers.
- la ligne « include "fr(basic)" » en début de fichier des claviers est absolument nécessaire, au risque de se retrouver avec un clavier dont seules les touches modifiées sont affectées.
- la mise à jour des droits des fichiers est elle aussi essentielle, au risque que le nouvel agencement ne fonctionne pas dans la fenêtre de connexion.
En cas de besoin, il est également possible de trouver des informations complémentaires sur cette page du
wiki.