PROJET AUTOBLOG


Planet-Libre

source: Planet-Libre

⇐ retour index

Vincent Gay : Bidouillage : des leds pour capslock et numlock en bash

mercredi 19 novembre 2014 à 14:59
Les leds capslock et numlock sur ma machine sont ridiculement petits et mal placés. Dans la plupart des environnement de bureau (KDE, Gnome, XFCE, Cinnmon, Mate, Unity...) il y a des applets pour les remplacer, mais comme je n'utilise en lieu et place que d'un simple gestionnaire de fenêtre (OpenBox), je me suis trouvé assez dépourvu. J'ai cherché sur le web une application qui se loge dans le systray, mais sans succès.

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 :

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 &

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

Gravatar de Vincent Gay
Original post of Vincent Gay.Votez pour ce billet sur Planet Libre.