Swisslinux.org

− Le carrefour GNU/Linux en Suisse −

 

Langue

 

savd - Standalone ALSA Volume daemon

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;
	}
}
Powered by Dokuwiki - fr/documentation/scripts/savd.txt · Dernière modification: 2011/07/18 08:44 (modification externe)