Voila un petit script qui permet de faire fonctionner les touches spéciales de réglage de volume sous linux, indépendamment de l'environnement de bureau (fonctionne même sans mode graphique, ou sous n'importe quel environnement de bureau)
Utilisation: configurer les variables de manière appropriée, et lancer en root, par exemple dans un script de démarrage système.
#!/usr/bin/perl -T # savd - Standalone Alsa Volume Daemon # (c) B0FH 2007 # ---- BEGIN CONFIGURATION ---- # Chemin vers amixer my $amixer_cmd = "/usr/bin/amixer"; # Essayer avec les autres si ça ne fonctionne pas ? my $device = '/dev/input/event0'; # Incrément/décrément de volume, en %, par pression de touche my $incr = 10; # Canal contrôlé. "amixer scontrols" pour la liste des canaux. my $channel = 'Master'; # Codes de touches pour les boutons de volume. Ces valeurs sont pour un # Dell Latitude D800. Utiliser "showkey" en mode texte pour trouver # les codes des touches. sub VOLUME_MUTE { 113; } sub VOLUME_DOWN { 114; } sub VOLUME_UP { 115; } # ----- END CONFIGURATION ----- $ENV{PATH} = ""; #Taint checking crybaby close STDIN; close STDOUT; # Yes, leave STDERR open just in case open EVENT, "<$device" or die "Cannot open input device: $!"; my %data; my $res; sub EV_KEY { 0x01; } while(1) { $res = read EVENT, $_, 16; die "Error reading $device: $!\n" unless defined $res; @data{'sec','usec','type','code','value'} = unpack 'l!l!S!S!I', $_; # print STDERR "Event: [@data]\n"; # uncomment me to debug if ($data{type} == EV_KEY && $data{value} == 1) { $data{code} =~ /^(\d+)$/ or next; # Taint checking crybaby system $amixer_cmd, 'set', $channel, "${incr}%+" if $1 == VOLUME_UP; system $amixer_cmd, 'set', $channel, "${incr}%-" if $1 == VOLUME_DOWN; system $amixer_cmd, 'set', $channel, 'toggle' if $1 == VOLUME_MUTE; } }