#1 Le 04/11/2019, à 22:32
- Zococo
Un script qui permet de créer une variante de clavier français
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 :
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.
Dernière modification par Zococo (Le 14/04/2020, à 10:22)
Ubuntu 23.04 (64 bits) - Gigabyte B250M-DS3H / Core i5-7600K (Kaby lake) - Microsoft surface Go 3
Hors ligne
#2 Le 04/11/2019, à 23:27
- fabux
Re : Un script qui permet de créer une variante de clavier français
Salut zococo,
Merci pour ta contribution (et d'avoir fais comme je te l'ai demandé en déplaçant ton script ici )
Pour les fois prochaines, n'hésite pas à préparer ton taf dans ton espace avant de le mettre en prod : ça évite les répétitions dans l'historique et gène moins les personnes abonnés qui reçoivent éventuellement un mail à chaque modif
Et idéalement rejoins nous sur la mailing list
À + de lire ta prochaine contrib
Et idéalement
May linux be with you
Comment poster un message.
Je me présente dans la doc
Hors ligne
#3 Le 05/11/2019, à 06:18
- Watael
Re : Un script qui permet de créer une variante de clavier français
salut,
"$FichierClavierAModifier""$ext""$i"
des chaînes concaténées forment UNE chaîne :
"$FichierClavierAModifier$ext$i"
* s'il y a plusieurs sudo dans un script, tout le script doit probablement être exécutable en sudo.
contrairement à test, [[ accepte || :
[[ cond1 || cond2 || cond3 ]]
il faudrait s'assurer que Xorg est en cours d'exécution avant de lancer zenity, et récupérer le DISPLAY de l'utilisateur qui exécute le script pour que sudo* l'affiche correcmtent
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#4 Le 14/04/2020, à 10:26
- Zococo
Re : Un script qui permet de créer une variante de clavier français
Bonjour,
Je n'avais pas bien suivi le post, je "déterre" au bout de quelques mois. Ça se justifie puisque le post vient en complément du wiki.
Merci pour les remarques qui m'apprennent des choses sur [[ ]]. Les considérations sur Xorg et DISPLAY dépassent mes compétences, à examiner un de ces jours...
Remarque sur sudo prise en compte.
Quant aux chaînes, les guillemets surnuméraires créent de la complexité lors de la rédaction mais je trouve qu'ils rendent les choses plus compréhensibles à la lecture. En tout cas pour moi. Question de goût.
Librement.
Dernière modification par Zococo (Le 14/04/2020, à 10:27)
Ubuntu 23.04 (64 bits) - Gigabyte B250M-DS3H / Core i5-7600K (Kaby lake) - Microsoft surface Go 3
Hors ligne
#5 Le 14/04/2020, à 15:21
- kamaris
Re : Un script qui permet de créer une variante de clavier français
Quant aux chaînes, les guillemets surnuméraires créent de la complexité lors de la rédaction mais je trouve qu'ils rendent les choses plus compréhensibles à la lecture. En tout cas pour moi. Question de goût.
Mouais… on est plus vraiment dans une question de goûts là, ça va à l'encontre de la correspondance naturelle « une chaine <-> une paire de guillemets ».
On s'attend à ce que des guillemets supplémentaires n'apparaissent que si on ne peut pas faire autrement, pour des raisons de protection de caractères en général.
À la limite, si tu tiens à souligner les débuts et fins des noms de variables, il vaut mieux mettre les accolades "${var1}${var2}${var3}".
Par ailleurs, aucun guillemet n'est nécessaire dans les tests à doubles-crochets [[…]].
Hors ligne