Contenu | Rechercher | Menus

Annonce

Ubuntu-fr.org recrute toujours de nouveaux modérateurs, avec de l'expérience.

Ubuntu 16.04 LTS
Commandez vos DVD et clés USB Ubuntu-fr !

Si vous avez des soucis pour rester connecté, déconnectez vous et reconnectez vous depuis ce lien en cochant le case
Me connecter automatiquement lors de mes prochaines visites.

#1 Le 08/07/2013, à 18:24

sosmayo

[Résolu]Udev HDMI pulseaudio changement automatique de la sortie audio

Bonjour à tous !
Il y a quelque temps j'ai partagé une petite astuce permettant de rediriger automatiquement le son vers HDMI lorsque celui ci est branché http://forum.ubuntu-fr.org/viewtopic.php?id=1119211.
Cependant depuis une mise à niveau vers Raring, cela ne fonctionne plus....
la règle udev :

SUBSYSTEM=="drm", ACTION=="change", RUN+="/usr/local/bin/SToggle"

le script /usr/local/bin/SToggle :

#!/bin/bash
# Sound Toggle
# By Charles Cruz
#
# The following script toggles the between laptop speakers and hdmi audio (if detected).
# Version 1.0

USERID="$(cat /var/run/ConsoleKit/database | grep -B 6 is_active=true | grep uid= | cut -f 2 -d '=')"
USER="$(grep $USERID /etc/passwd | cut -f 1 -d ':')"
HDMI_STATUS="$(cat /sys/class/drm/card0-HDMI-A-1/status)"
echo "HDMI" > /home/romain/temp.txt
if [ "${HDMI_STATUS}" = connected ]; then
sudo -u $USER pactl set-card-profile 0 output:hdmi-stereo
sudo -u $USER notify-send -i display "HDMI connected"
echo $HDMI_STATUS >> /home/romain/temp.txt
else
sudo -u $USER pactl set-card-profile 0 output:analog-stereo+input:analog-stereo
sudo -u $USER notify-send -i computer "HDMI disconnected"
echo $HDMI_STATUS >> /home/romain/temp.txt
fi

exit 0

Lors du branchement du câble HDMI, le switch de la sortie ne se fait pas, et la notification ne s'affiche pas
Ce que me dit syslog après un branchement du port HDMI :

Jul  8 18:03:05 romain-laptop udevd[9783]: starting '/usr/local/bin/SToggle'
Jul  8 18:03:05 romain-laptop pulseaudio[9798]: [pulseaudio] socket-server.c: bind(): Adresse déjà utilisée
Jul  8 18:03:05 romain-laptop pulseaudio[9798]: [pulseaudio] module.c: Failed to load module "module-esound-protocol-unix" (argument: ""): initialization failed.
Jul  8 18:03:05 romain-laptop pulseaudio[9798]: [pulseaudio] main.c: Module load failed.
Jul  8 18:03:05 romain-laptop pulseaudio[9798]: [pulseaudio] main.c: Échec lors de l'initialisation du démon
Jul  8 18:03:05 romain-laptop pulseaudio[9795]: [pulseaudio] main.c: Échec lors du démarrage du démon.
Jul  8 18:03:05 romain-laptop udevd[9749]: '/usr/local/bin/SToggle'(err) 'Échec lors de la connexion : Connexion refusée'
Jul  8 18:03:05 romain-laptop udevd[9749]: '/usr/local/bin/SToggle'(err) 'Échec de pa_context_connect() : Connexion refusée'
Jul  8 18:03:05 romain-laptop udevd[9749]: '/usr/local/bin/SToggle' [9783] exit with return code 0
Jul  8 18:03:05 romain-laptop udevd[9749]: passed -1 bytes to netlink monitor 0x7f06f3168f00
Jul  8 18:03:05 romain-laptop udevd[9749]: seq 2242 processed with 0
Jul  8 18:03:05 romain-laptop udevd[418]: seq 2242 done with 0
Jul  8 18:03:06 romain-laptop colord: Device added: xrandr-Sony-SONY TV-16843009

Cependant j'ai bien le contenu du fichier temp.txt qui a changé...

18:10 romain@romain-laptop ~ % cat temp.txt 
HDMI
connected

Et, étrangement, lorsque je lance le script à la main, tout fonctionne normalement (switch de la sortie son, affichage de la notication)....
Est ce que quelqu'un aurait une piste ?
Merci d'avance

Dernière modification par sosmayo (Le 09/07/2013, à 18:28)

Hors ligne

#2 Le 09/07/2013, à 18:11

sosmayo

Re : [Résolu]Udev HDMI pulseaudio changement automatique de la sortie audio

Bon finalement problème résolu ^^
L'erreur venait des variables d'environnement qui ne sont pas les même lorsque le script est exécuté depuis udev.
Donc la solution consiste à définir les variables PULSE_SERVER (utilisé par pactl) et DISPLAY (utilisé par notify-send) :

#!/bin/bash

USERID="$(cat /var/run/ConsoleKit/database | grep -B 6 is_active=true | grep uid= | cut -f 2 -d '=')"
USER="$(grep $USERID /etc/passwd | cut -f 1 -d ':')"
HDMI_STATUS="$(cat /sys/class/drm/card0-HDMI-A-1/status)"
export PULSE_SERVER='unix:/run/user/'$USER'/pulse/native'
export DISPLAY=":0"
if [ "${HDMI_STATUS}" = connected ]; then
	sudo -u $USER pactl set-card-profile 0 output:hdmi-stereo
	sudo -u $USER notify-send -i display "HDMI connected"
else
	sudo -u $USER pactl set-card-profile 0 output:analog-stereo+input:analog-stereo
	sudo -u $USER notify-send -i computer "HDMI disconnected"
fi

exit 0

Et ça fonctionne smile

Dernière modification par sosmayo (Le 09/07/2013, à 18:15)

Hors ligne