Nun gut. Ich habe das Problem mit einem stark gewürzten Würgaround gelöst.
In der gnome-session läuft ein Daemon, der auf dem Session-Bus des Dbus eine Methode parat hat, die jack startet.
Folgende Dateien machens möglich: /etc/pm/sleep.d/90_jack_restart
#!/bin/sh
# Start Jackd after suspend
DA=$DISPLAY
HA=$HOME
export DISPLAY=:0.0
export HOME="/home/daniel"
## herausfinden mit export | grep XA
export XAUTHORITY="/var/run/gdm/auth-for-daniel-dLqyK9/database"
case $1 in
hibernate)
gksu -u daniel "rhythmbox-client --pause"
sleep 1
killall jackd
killall qjackctl.bin
;;
suspend)
gksu -u daniel "rhythmbox-client --pause"
sleep 1
killall jackd
killall qjackctl.bin
;;
thaw)
nohup dbus-send --print-reply --system --dest=phaiax.jack /phaiax/jack/action phaiax.jack.action.start &
;;
resume)
echo 1
nohup dbus-send --print-reply --system --dest=phaiax.jack /phaiax/jack/action phaiax.jack.action.start &
echo 2
;;
*) echo "Wrong argument"
;;
esac
export DISPLAY=$DA
export HOME=$HA
exit 0
Dbus-Server: jack-starter-daemon.py (Dieses Script muss zu Beginn der Gnome-Session gestartet werden (Autostart))
#!/usr/bin/python
import dbus
import dbus.service
import glib
import gobject
import os
from time import *
from dbus.mainloop.glib import DBusGMainLoop
DBusGMainLoop(set_as_default=True)
BUSNAME = "phaiax.jack"
INTERFACE = "phaiax.jack.action"
OBJECTPATH = "/phaiax/jack/action"
class Example(dbus.service.Object):
def __init__(self, bus, object_path):
dbus.service.Object.__init__(self, bus, object_path)
@dbus.service.method(dbus_interface='phaiax.jack.action',
in_signature='', out_signature='i')
def start(self):
z = localtime()
print "Es ist %d:%d:%d Uhr" % (z[3], z[4], z[5])
os.system("nohup qjackctl")
return 0
sbus = dbus.SystemBus()
busname = dbus.service.BusName(name=BUSNAME, bus=sbus)
Exported_Obj = Example(busname, OBJECTPATH)
loop = gobject.MainLoop()
loop.run()
#root@yak:/etc/dbus-1/system.d# cat phaiax.jack.conf
#<?xml version="1.0" encoding="UTF-8"?> <!-- -*- XML -*- -->
#<!DOCTYPE busconfig PUBLIC
# "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
# "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
#<busconfig>
# <!-- Only root can own the service -->
# <policy user="daniel">
# <allow own="phaiax.jack"/>
#<allow send_requested_reply="true" send_type="method_return"/>
#<allow send_requested_reply="true" send_type="error"/>
# </policy>
# <policy context="default">
# <allow send_requested_reply="true" send_type="method_return"/>
#<allow send_requested_reply="true" send_type="error"/>
# <allow send_destination="phaiax.jack"
# send_interface="phaiax.jack"/>
# <allow send_destination="phaiax.jack"
# send_interface="phaiax.jack.action"/>
# </policy>
#</busconfig>
Damit das Script überhaupt ein Sessionbus-Objekt exportieren darf die entsprechende policy: /etc/dbus-1/system.d/phaiax.jack.conf
<?xml version="1.0" encoding="UTF-8"?> <!-- -*- XML -*- -->
<!DOCTYPE busconfig PUBLIC
"-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
"http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
<busconfig>
<!-- Only root can own the service -->
<policy user="daniel">
<allow own="phaiax.jack"/>
<allow send_requested_reply="true" send_type="method_return"/>
<allow send_requested_reply="true" send_type="error"/>
</policy>
<policy context="default">
<allow send_requested_reply="true" send_type="method_return"/>
<allow send_requested_reply="true" send_type="error"/>
<allow send_destination="phaiax.jack"
send_interface="phaiax.jack"/>
<allow send_destination="phaiax.jack"
send_interface="phaiax.jack.action"/>
</policy>
</busconfig>
Danach den dbus mit
sudo service dbus reload
die Konfig updaten lassen.
Ich hoffe irgendjemandem hilft das 😀