#!/usr/bin/perl -w
use strict;

# Script pour charger la disposition Béop et s’assurer que ce soit refait à
# chaque connexion de clavier (utile notamment avec un commutateur clavier-
# souris-écran)

# Ce script est fourni sans aucune garantie.
# Vous pouvez l’utiliser selon les termes de la licence GNU GPL version 2 ou
# ultérieure de la Free Software Foundation
# (http://www.gnu.org/licenses/licenses.html#GPL).

# par Laurent Dudоuеt, 2015-06-01 → 2015-06-03

# À FAIRE : trouver un moyen d’arrêter ce script à la fermeture de session
#           ou à défaut s’assurer qu’il n’en tourne qu’un seul à la fois pour
#           un même utilisateur.

# Commande de chargement de la disposition clavier
my @cmde_charge_dispo = ("$ENV{HOME}/bin/beop", @ARGV);

system @cmde_charge_dispo and die "Échec du chargement de la diposition clavier\n";

# On monitore les évènements udev (avec stdbuf -oL pour qu’ils ne stagnent pas dans le buffer).
open my $monitor, 'stdbuf -oL udevadm monitor --udev |' or die "Impossible de monitorer les évènements udev\n";
while (<$monitor>) {
    # Si un clavier a été connecté,
    if (m{^UDEV\s*?\[.+?\]\s+add\s+\S+/input/input\d+/event\d+\s+\(input\)\s*$}) {
        # on attend un peu pour avoir le dernier mot
        sleep 1;
        # et on charge la disposition.
        system @cmde_charge_dispo and die "Échec du chargement de la diposition clavier\n";
    }
}
close $monitor or warn "Problème avec le monitoring des évènements udev : $!\n";
