
Alors que, je modifiais une fois de plus la configuration du son sur mon eMachines EL1200 tournant sous CrunchBang Linux, j'ai finalement était rencontré à un bug.
Bug qui ne m'a pas trop étonné puisque je l'avais déjà rencontré sur d'autres configurations : le son après avoir été réglé à 0 via ALSA reste audible via OSS. On peut alors le mettre à 0 en utilisant, par exemple, gnome-volume-control et en choisissant le périphérique OSS… ce qui est bien moins pratique qu'une ligne de commande du genre de celle de amixer :
amixer -q set Master 0
C'est d'autant moins pratique que je voulais scripter un clavier Logitech S510 (photo).
Bien, ça ne semble pas très compliqué… il suffit juste de trouver un mixer qui puisse faire la même chose mais pour OSS, ou d'une façon globale… yakafokon…
Et c'est là que j'ai cherché… longtemps ! Avant de finalement tomber sur smixer (smixer 1.0.4), qui est un outil similaire à amixer, mais je ne rencontre aucun souci avec smixer pour mettre le volume à 0 :
echo 'vol Vol 0' | smixer
De plus, smixer, est très facile à compiler… et il est distribué sous licence GNU GPL, si bien que j'ai décidé d'en héberger une copie ici : smixer1.0.4.tgz, au cas où…
Un exemple d'utilisation rc.xml avec amixer, et un autre exemple avec smixer, installé dans /opt/local (une vieille habitude) :
<keybind key="XF86AudioLowerVolume">
<action name="Execute">
<execute>amixer -q set Master 1- unmute</execute>
</action>
</keybind>
<keybind key="XF86AudioRaiseVolume">
<action name="Execute">
<execute>amixer -q set Master 1+ unmute</execute>
</action>
</keybind>
<keybind key="XF86AudioMute">
<action name="Execute">
<execute>amixer -q set Master 0</execute>
</action>
</keybind>
<keybind key="XF86AudioLowerVolume">
<action name="Execute">
<execute>~/bin/smixer-wrapper lower</execute>
</action>
</keybind>
<keybind key="XF86AudioRaiseVolume">
<action name="Execute">
<execute>~/bin/smixer-wrapper raise</execute>
</action>
</keybind>
<keybind key="XF86AudioMute">
<action name="Execute">
<execute>~/bin/smixer-wrapper mute</execute>
</action>
</keybind>
Seulement, pour pouvoir utiliser smixer dans le rc.xml il a fallu que je rédige un petit script bash… j'ignore pour quelle raison mais les commandes ne semblaient pas fonctionner telles quelles dans le rc.xml ! Et puis, de toute façon, je voulais les simplifier
.
#!/usr/bin/env bash
# -*- coding: utf-8 -*-
# Time-stamp: <2010-02-07 17:15:54 (dimitri)>
#
# ~/bin/smixer-wrapper
#
# smixer v1.0.4 - a simple interface to /dev/mixer
# smixer is a command-line and scriptable program to control
# and display the mixer volume levels on a sound card in
# linux. smixer is ideal for setting mixer settings on
# startup or to switch between multiple configurations
# quickly.
#
# http://centerclick.org/programs/smixer/man.html
pthbin="/opt/local/bin/smixer"
outsrc="Vol"
function main() {
case "$1" in
raise)
"$pthbin" -a <<< "vol $outsrc +";;
lower)
"$pthbin" -a <<< "vol $outsrc -";;
mute)
"$pthbin" -a <<< "vol $outsrc 0";;
status)
"$pthbin" -p;;
help|*)
usage
exit 1;;
esac
return 0
}
function usage() {
cat <<EOF
Usage: $(basename -- $0) {raise|lower|mute|status|help}
raise Increase the $outsrc volume 5%
lower Decrease the $outsrc volume 5%
mute Mute the $outsrc volume
status Print out the current mixer settings, then exit
help Show this message and exit
EOF
}
main "$@"
Je ferai un autre billet, à propos du script lui même, et avec une nouvelle version de celui-ci. En effet, j'ai, entre autres modifications, ajouté une option toggle, cette fonctionnalité n'existant pas dans smixer. Autres modifications : quelques vérifications, de plus le script source le .bashrc de façon à pouvoir trouver smixer (comme il s'agit d'une installation personnalisée, ça peut être utile), et les deux seules variables globales sont écrites en majuscules (je préfère).
Sinon, il existe aussi aumix, qui lui est présent dans les dépôts… mais qui présente le défaut, à mons sens, d'ajouter un service ; ce qui ne me semble pas indispensable pour un simple mixer audio. En définitive : si le volume de ALSA correspond à celui de OSS : il n'est peut-être pas utile de toucher à quoi que ce soit
.