Bidouillage : des leds pour capslock et numlock en bash
D'où l'idée d'en faire une à ma sauce, mais comme je renvoie toujours au surlendemain l'apprentissage de Python j'ai encore eu recours à un infâme bidouillage en bash. Enfin, ça fonctionne, et même plutôt bien, alors...
Les dépendances :- xterm pour exécuter le script dans une fenêtre facile à gérer
- alltray pour envoyer la fenêtre dans le systray
- xset pour connaître l'état du clavier (capslock et numlock)
- xseticon (AUR) pour changer son icône à chaque changement d'état.
- aplay, installé par alsa donc en principe présent
le principe :
Le script est lancé dans xterm via alltray pour ce loger dans le systray. Il boucle pour vérifier l'état du clavier avec xset. En cas de changement il joue un son avec aplay puis modifie sa propre icône avec xseticon.
Le lancement :
idéalement dans un autostart, mais en fait n'importe où. Voici ma formule
alltray -H -- xterm -fa "BitStream Vera Sans Mono" -fs 10 -cr
"rgb:ff/ff/fe" -geometry 80x12-10+40 -hold -e lockkeys > /dev/null
2>&1 &
- l'option -H de alltray permet à xterm de se minimiser immédiatement dans le systray
- le séparateur -- est important pour indiquer à alltray que les options suivantes correspondent au programme à lancer (voir man alltray).
- les options -fa "BitStream Vera Sans Mono" -fs 10 établissent la police et sa taille
- l'option -fs 10 -cr "rgb:ff/ff/fe" rend le curseur invisible
- l'option -geometry 80x12-10+40 demande à xterm de s'ouvrir dans une fenêtre de 80 caractères x 12 lignes à 40 pixels du haut et à 10 pixels de le droite de l'écran.
- l'option -hold demande à xterm de ne pas fermer sa fenêtre sitôt la fin du script. Utile en cas de planté et / ou de déboggage.
- -e lockkeys c'est le script lui-même qui doit être dans votre PATH (/usr/local/bin me paraît bien).
- > /dev/null 2>&1 & permet de ne pas polluer un terminal avec des messages hors de saison. À supprimer en cas de débogage
Les icônes et le son :
Les icônes sont faites à la rache. Si un graphiste passe par là et veux me faire quelque-chose de bien je lui en serai éternellement reconnaissant.
le son, pop.wav, est piqué dans un paquet quelconque (kdebase-workspace je crois).
Tout ceci est attendu par le script dans /usr/local/share/lockkeys
le code :
#!/bin/bash # dépendances : xorg-xset, xterm, alltray, xseticon (AUR) echo "Ceci est un infâme bricolage en bash pour servir de leds à capslock et numlock" echo echo -e "\\033[1mlancement de la commande (par exemple dans un autostart) :\\033[0m" echo 'alltray -H -- xterm -e lockkeys > /dev/null 2>&1 &' echo echo -e "\\033[1moptions complémentaires pour xterm (à placer avant -e lockkeys)\\033[0m" echo '-fa "BitStream Vera Sans Mono" -fs 10 (choisir sa police et sa taille)' echo '-cr "rgb:ff/ff/fe" (pour rendre le curseur invisible)' echo '-geometry 80x10-10+40 (pour positioner la fenêtre)' echo echo -e "\\033[1;34;01mvgay@vintherine.org\\033[0m" #vérifier les dépendances # xterm et alltray se vérifient d'eux-mêmes if ! command -v xset >/dev/null; then echo echo "Dépendance xset du paquet xorg-xset non trouvée" exit 1 fi if ! command -v xseticon >/dev/null; then echo echo "Dépendance xseticon (AUR) non trouvée" exit 1 fi #chemin des icônes et du son ShareDir="/usr/local/share/lockkeys/" icone[0]=$ShareDir"lockkeys-0.png" icone[1]=$ShareDir"lockkeys-1.png" icone[2]=$ShareDir"lockkeys-2.png" icone[3]=$ShareDir"lockkeys-3.png" GetLed () { LedMask=$(xset q | grep "LED mask" | sed -r "s/.*LED mask:\\s+[0-9a-fA-F]+([0-9a-fA-F]).*/\\1/") NewCapsLock=$(( 0x$LedMask & 0x1 )) NewNumLock=$(( 0x$LedMask & 0x2 )) let mask=$NewCapsLock+$NewNumLock } GetLed CapsLock=$NewCapsLock NumLock=$NewNumLock xseticon -id $WINDOWID ${icone[mask]} while : do GetLed if [ $CapsLock != $NewCapsLock ] || [ $NumLock != $NewNumLock ]; then CapsLock=$NewCapsLock NumLock=$NewNumLock aplay $ShareDir"pop.wav" >/dev/null 2>&1 xseticon -id $WINDOWID ${icone[mask]} fi done