Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 :

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.

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  wink  )

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 wink

Et idéalement rejoins nous sur la mailing list wink

À + de lire ta prochaine contrib
Et idéalement

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.

En 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

Zococo a écrit :

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