Plus de son après wake up avec pulseaudio - jack bridge

Bonjour à tous.

Sur une debian8 avec pulseaudio, jack et cadence installés le son ne fonctionne plus lorsque je rallume le laptop après une mise en veille.

Si j’execute la commande
cadence-session-start -s

Je vois des messages d’erreur dans syslog mais le son refonctionne.

Lorsque je veux automatiser la chose en plaçant cette commande dans le system-sleep ainsi:

cat /lib/systemd/system-sleep/kmc_reload_sound
#!/bin/bash
#
pid=$(pgrep -xn pulseaudio)\
&& export DBUS_SESSION_BUS_ADDRESS="$(grep -ao -m1 -P '(?<=DBUS_SESSION_BUS_ADDRESS=).*?\0' /proc/"$pid"/environ)"

sudo -i -u kmc cadence-session-start -s

Ca ne fonctionne pas et je vois ça dans syslog:

...
Dec 29 18:40:52 kmcs systemd-sleep[1860]: bus = cls._new_for_bus(address_or_type, mainloop=mainloop)
Dec 29 18:40:52 kmcs systemd-sleep[1860]: dbus.exceptions.DBusException: org.freedesktop.DBus.Error.NotSupported: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11

Je ne comprends pas car je lance la commande en tant que kmc qui a un DISPLAY

Merci pour votre support

Bon, donc, ça vient de là:
http://linuxmao.org/tiki-view_forum_thread.php?comments_parentId=83413&topics_offset=4&display=print_all

Alors en fait, non, le sudo execute les choses comme kmc, mais le problème me semble venir d’avant, au moment du “export DBUS_SESSION_BUS_ADRESS”, et là, le script s’execute encore avec un autre id (genre systemd, je ne sais pas).

Solution à tester: crée ton script bash ailleurs que dans /etc/systemd/system/system-sleep/ sans aucun sudo dedans, et crée un 2e script dans /etc/systemd/system/system-sleep/ qui appelle le premier avec sudo.

Merci beaucoup, c’est ce que j’ai fait:

kmc@kmcs:~$ cat /usr/local/sbin/sound_reload 
#!/bin/bash
#
pid=$(pgrep -xn pulseaudio)\
  && export DBUS_SESSION_BUS_ADDRESS="$(grep -ao -m1 -P '(?<=DBUS_SESSION_BUS_ADDRESS=).*?\0' /proc/"$pid"/environ)"

logger kmc_sr4 PID=$pid DBUS_SESSION_BUS_ADDRESS=$DBUS_SESSION_BUS_ADDRESS
pulseaudio --kill
cadence-session-start -s
pulseaudio --start
/usr/sbin/alsactl restore --file /home/kmc/.asound.state
/usr/bin/play /usr/share/sounds/Kopete_Event.ogg
logger kmc_end
kmc@kmcs:~$ cat /lib/systemd/system-sleep/kmc_reload_sound 
#!/bin/bash
#
logger kmc_systemd =$1 =$2

if [[ "$1" == "post" ]]
then
sudo -i -u kmc /usr/local/sbin/sound_reload
fi
kmc@kmcs:~$ 

Mais à la sortie de veille le son sur Firefox (pulseaudio) ne fonctionne pas. Si je refais un

cadence-session-start -s

à la main dans un terminal, ça remarche.

Voici les logs:

Jan  8 10:56:38 kmcs logger: kmc_systemd =post =suspend
Jan  8 10:56:38 kmcs logger: kmc_sr4 PID=4347 DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-pLyTqc0sNp,guid=eba4af3931bbeedbdee842435a51e5cb
Jan  8 10:56:38 kmcs systemd-sleep[4381]: E: [pulseaudio] main.c: Impossible de tuer le démon : Aucun processus de ce type
...
Jan  8 10:56:43 kmcs pulseaudio[4347]: JACK error >Server is not running<
...
Jan  8 10:56:43 kmcs org.jackaudio.service[1609]: no message buffer overruns
...
Jan  8 10:56:45 kmcs org.jackaudio.service[1609]: ALSA lib pcm_hw.c:1667:(_snd_pcm_hw_open) Invalid value for card
Jan  8 10:56:45 kmcs pulseaudio[4513]: JACK error >Cannot lock down 82274202 byte memory area (Ne peut allouer de la mémoire)<
Jan  8 10:56:45 kmcs pulseaudio[4513]: Default and alternate sample rates are the same.
Jan  8 10:56:45 kmcs pulseaudio[4513]: JACK error >Cannot use real-time scheduling (RR/5)(1: Opération non permise)<
Jan  8 10:56:45 kmcs pulseaudio[4513]: JACK error >JackClient::AcquireSelfRealTime error<
...
Jan  8 10:56:45 kmcs pulseaudio[4513]: Not enough physical output ports, leaving unconnected.
Jan  8 10:56:45 kmcs pulseaudio[4513]: Default and alternate sample rates are the same.
...
Jan  8 10:56:45 kmcs systemd-sleep[4381]: Initiated PulseAudio successfully!
Jan  8 10:56:45 kmcs systemd-sleep[4381]: JACK Started Successfully
Jan  8 10:56:45 kmcs pulseaudio[4525]: Daemon already running.
Jan  8 10:56:45 kmcs systemd-sleep[4381]: /usr/sbin/alsactl: set_control:1461: Cannot write control '2:0:0:Independent HP:0' : Device or resource busy
Jan  8 10:56:45 kmcs systemd-sleep[4381]: /usr/share/sounds/Kopete_Event.ogg:
Jan  8 10:56:45 kmcs systemd-sleep[4381]: File Size: 27.9k     Bit Rate: 194k
Jan  8 10:56:45 kmcs systemd-sleep[4381]: Encoding: Vorbis
Jan  8 10:56:45 kmcs systemd-sleep[4381]: Channels: 2 @ 16-bit
Jan  8 10:56:45 kmcs systemd-sleep[4381]: Samplerate: 44100Hz
Jan  8 10:56:45 kmcs systemd-sleep[4381]: Replaygain: off
Jan  8 10:56:45 kmcs systemd-sleep[4381]: Duration: 00:00:01.15
Jan  8 10:56:46 kmcs systemd-sleep[4381]: In:0.00% 00:00:00.00 [00:00:01.15] Out:0     [      |      ]        Clip:0    #015In:40.4% 00:00:00.46 [00:00:00.68] Out:20.5k [ =====|====- ]        Clip:0    #015In:56.6% 00:00:00.65 [00:00:00.50] Out:28.7k [  ====|===== ]        Clip:0    #015In:72.7% 00:00:00.84 [00:00:00.31] Out:36.9k [   ===|====  ] Hd:5.9 Clip:0    #015In:88.9% 00:00:01.02 [00:00:00.13] Out:45.1k [      |      ] Hd:5.9 Clip:0    #015In:100%  00:00:01.15 [00:00:00.00] Out:50.7k [      |      ] Hd:5.9 Clip:0
Jan  8 10:56:46 kmcs systemd-sleep[4381]: Done.

Alors intuitivement, sans être sûr de ce que je fais, j’inverserais l’ordre de cadence-session-start -s et pulseaudio --start.
Juste pour voir.

Non. Inverser les lignes ne change rien. :smirk:

Bon, ben faut essayer autrechose:
https://wiki.archlinux.org/index.php/PulseAudio/Troubleshooting#No_sound_after_resume_from_suspend

Ouupsss! J’ai du mal tester car ce matin au réveil ki c ki fè du bon son ? Mon debian 8 ! Merci Matt !

Par contre il semble que si on suspend et qu’on rallume tout de suite ça na fonctionne pas… bon je vè pa cherché la petite bèt.

Par contre j’ai suivi ton lien et effectivement on peut éviter d’avoir à relancer toutes les applis pulseaudio. Voilà mon script actuel:

#!/bin/bash
#
# Recharge la chaine son après mise en veille
# Script appelé par /etc/systemd/system/system-sleep/kmc_reload_sound

pid=$(pgrep -xn pulseaudio)\
  && export DBUS_SESSION_BUS_ADDRESS="$(grep -ao -m1 -P '(?<=DBUS_SESSION_BUS_ADDRESS=).*?\0' /proc/"$pid"/environ)"

logger kmc_sr4 PID=$pid DBUS_SESSION_BUS_ADDRESS=$DBUS_SESSION_BUS_ADDRESS

#pulseaudio --kill
#pulseaudio --start
/usr/bin/pasuspender /bin/true

cadence-session-start -s

/usr/sbin/alsactl restore --file /home/kmc/.asound.state

logger kmc_end

/usr/bin/play /usr/share/sounds/Kopete_Event.ogg

#restart pulseaudio applications
#amarok -s
#amarok -p
1 J'aime

J’ai également essayé d’adapter la “shell script method” avec jackdbus

https://wiki.archlinux.org/index.php/PulseAudio/Examples#The_KXStudio_method

en adaptant les scripts à system-sleep mais sans succès.

Décidément instable cette méthode. Ca ne fonctionne plus. Lorsque je mets en veille et rallume pulseaudio n’est pas au rendez vous:

kmc@kmcs:~$ pgrep pulseaudio
kmc@kmcs:~$ 

Maintenant, si je l’execute manuellement le script fonctionne:

kmc@kmcs:~$ /usr/local/sbin/sound_reload 
Initiated PulseAudio successfully!
JACK Started Successfully
/usr/sbin/alsactl: set_control:1461: Cannot write control '2:0:0:Independent HP:0' : Device or resource busy
/usr/share/sounds/Kopete_Event.ogg:

 File Size: 27.9k     Bit Rate: 194k
  Encoding: Vorbis        
  Channels: 2 @ 16-bit   
Samplerate: 44100Hz      
Replaygain: off         
  Duration: 00:00:01.15  
In:100%  00:00:01.15 [00:00:00.00] Out:50.7k [      |      ] Hd:5.9 Clip:0    
Done.
amarok: aucun processus trouvé
QDBusConnection: session D-Bus connection created before QCoreApplication. Application may misbehave.
Object::connect: No such signal org::freedesktop::UPower::DeviceAdded(QString)
mimetype  "application/vnd.ms-powerpoint.slide.macroEnabled.12" 
amarok(6163)/kdecore (KConfigSkeleton) KCoreConfigSkeleton::writeConfig:
QWidget::insertAction: Attempt to insert null action
amarok(6163)/kdecore (KConfigSkeleton) KCoreConfigSkeleton::writeConfig:
********************************************************************************************** 
** AMAROK WAS STARTED IN NORMAL MODE. IF YOU WANT TO SEE DEBUGGING INFORMATION, PLEASE USE: ** 
** amarok --debug                                                                           ** 
********************************************************************************************** 
Calling appendChild() on a null node does nothing.

Maintenant pulseaudio est là et j’ai du son avec amarok:

kmc@kmcs:~$ pgrep pulseaudio
    6148

Voici les scripts:

 kmc@kmcs:~$ cat /lib/systemd/system-sleep/kmc_reload_sound 
    #!/bin/bash
    #
    #Can be tested with: env -i /lib/systemd/system-sleep/kmc_reload_sound
    logger kmc_systemd =$1 =$2
    if [[ "$1" == "post" ]]
    then
    sleep 30
    sudo -i -u kmc /usr/local/sbin/sound_reload
    #sudo -i -u kmc pulse-jack-pre-start.sh
    #sudo -i -u kmc pulse-jack-post-start.sh
    fi


kmc@kmcs:~$ cat /usr/local/sbin/sound_reload 
#!/bin/bash
#
pid=$(pgrep -xn pulseaudio)\
  && export DBUS_SESSION_BUS_ADDRESS="$(grep -ao -m1 -P '(?<=DBUS_SESSION_BUS_ADDRESS=).*?\0' /proc/"$pid"/environ)"
logger kmc_sr7 PID=$pid DBUS_SESSION_BUS_ADDRESS=$DBUS_SESSION_BUS_ADDRESS
cadence-session-start -s
/usr/sbin/alsactl restore --file /home/kmc/.asound.state
logger kmc_end
/usr/bin/play /usr/share/sounds/Kopete_Event.ogg
#restart pulseaudio applications
killall amarok
amarok -p
kmc@kmcs:~$

et syslog pendant le wake up from suspend:

Jan 11 13:35:46 kmcs logger: kmc_systemd =post =suspend 
...
Jan 11 13:09:45 kmcs logger: kmc_sr7 PID=1007 DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-zQRrk23F9D,guid=d65c8e399a3bb7a643a6a3fb5a5537f9 
Jan 11 13:09:46 kmcs org.jackaudio.service[1459]: no message buffer overruns 
Jan 11 13:09:47 kmcs pulseaudio[3724]: Stale PID file, overwriting. 
Jan 11 13:09:47 kmcs pulseaudio[3724]: JACK error >Cannot lock down 82274202 byte memory area (Ne peut allouer de la mémoire)< 
Jan 11 13:09:47 kmcs pulseaudio[3724]: Default and alternate sample rates are the same. 
Jan 11 13:09:47 kmcs pulseaudio[3724]: JACK error >Cannot use real-time scheduling (RR/5)(1: Opération non permise)< 
Jan 11 13:09:47 kmcs pulseaudio[3724]: JACK error >JackClient::AcquireSelfRealTime error< 
Jan 11 13:09:47 kmcs pulseaudio[3724]: Default and alternate sample rates are the same. 
Jan 11 13:09:47 kmcs pulseaudio[3724]: JACK error >Cannot use real-time scheduling (RR/5)(1: Opération non permise)< 
Jan 11 13:09:47 kmcs pulseaudio[3724]: JACK error >JackClient::AcquireSelfRealTime error< 
Jan 11 13:09:47 kmcs systemd-sleep[2310]: Initiated PulseAudio successfully! 
Jan 11 13:09:47 kmcs systemd-sleep[2310]: JACK Started Successfully 
Jan 11 13:09:47 kmcs systemd-sleep[2310]: /usr/sbin/alsactl: set_control:1461: Cannot write control '2:0:0:Independent HP:0' : Device or resource busy 
Jan 11 13:09:47 kmcs logger: kmc_end 

le message au sujet de la mémoire est suprenant. A noter que j’ai mis un sleep 30 dans le kmc_reload_sound au cas où, pour laisser passer tous les process d’initialisation system, mais ça n’a rien changé.

D’aprés https://askubuntu.com/questions/166126/unable-to-start-jack-cannot-allocate-memory c’était un probléme d’appartenance au groupe audio pour le gars.
Est ce que kmc fait bien partie du groupe “audio” ?

kmc@kmcs:~$ grep audio /etc/group
audio:x:29:pulse,kmc

Ben je suis sec.
Ce que je ne comprend pas, c’est qu’entre kmc_sr7 et kmc_end, tu ne fais aucune opération sur jack ni pulseaudio directement dans ton script, mais c’est à ce moment là que sont générées les erreurs pulsaudio.

cadence fait les opérations sur jack et pulseaudio. C’est un script qui connecte pulseaudio sur jack de manière à pouvoir utiliser les applications pulseaudio (FF, amarok, etc…) et jack (Hydrogène, Ardour, etc…) simultannément.
lorsque j’execute la commande cadence-session-start -s dans un terminal après un resume/suspend tout rentre dans l’ordre, le pont pulseaudio-jack est rétabli alors que le même script lancé au réveil du laptop juste avant via systemd ne fonctionne pas.

Un petit qjackctl -s, juste avant cadence-session-start -s ?
Je sais pas.