ubuntuusers.de

pm/sleep.d Script

Status: Gelöst | Ubuntu-Version: Ubuntu 10.04 (Lucid Lynx)
Antworten |

Phaiax

Webteam
Avatar von Phaiax

Anmeldungsdatum:
1. August 2008

Beiträge: 45

Hallo

Nachdem bei mir endlich suspend funktioniert, möchte ich ein weiteres kleines Problem lösen.

Für die Audioausgabe besitzte ich eine externe Firewire-Soundkarte, die ich mit jack (jackd) anspreche. Der jack-Daemon überlebt den Standby aber nicht, weshalb ich ihn mittels eines Scriptes Beenden und starten wollte.

http://paste.ubuntuusers.de/398812/

  • Scriptverzeichnis: /etc/pm/sleep.d/90_jack_restart

  • Das Script ist ausführbar (+x)

Führe ich das Script in der Konsole als normaler User aus, klappt alles auf anhieb.

./90_jack_restart suspend
./90_jack_restart resume

Auch als root klappt es (fast)

sudo -s
./90_jack_restart suspend
./90_jack_restart resume

Bei der Ausführung als root, wird qjackctl (Das Steuerungsprogramm welches den jack-Daemon automatisch startet) zwar unter meinen Benutzer gestartet, läuft aber in einer anderen Umgebung, jedenfalls hat qjackctl dann als einziges Programm nicht mein Ubuntu-Gnome-Theme sondern das graue Ur-Gnome-Standard-Theme.

Gehe ich in den Standby wird Rhythmbox pausiert. Beim Aufwachen wird allerdings qjackctl nicht gestartet. Weiß jemand warum? Kann das an der "anderen Umgebung" liegen?

Phaiax

Webteam
(Themenstarter)
Avatar von Phaiax

Anmeldungsdatum:
1. August 2008

Beiträge: 45

Hallo nocheinmal

sleep.d Script

Ich habe mein Script soweit angepasst, dass die Variablen DISPLAY und HOME richtig gesetzt werden (nach einer Fehlermeldung in /var/log/pm-suspend, in der versucht wurde auf /root/irgendwasvonpulseaudio zuzugreifen). Außerdem habe ich von sudo auf gksu umgestellt. Folgende Fehlermeldung erscheint jetzt nach dem Resume als GTK-Fenster:

Failed to run nohup 'qjackctl' as user daniel.

Unable to copy the user's Xauthorization file.

Aber "export | grep XA" sagt:

XAUTHORITY="/var/run/gdm/auth-for-daniel-AXd00y/database"

Langt das nicht?

Phaiax

Webteam
(Themenstarter)
Avatar von Phaiax

Anmeldungsdatum:
1. August 2008

Beiträge: 45

Die besten Ideen kommen einem immer nach einem Post 😀

Ein

gksu -u daniel export >> /home/daniel/exp

verrät, dass überhaupt keine Umgebungsvariablen gesetzt sind.

Wie schaffe ich es, dass Gnome meinen Befehl ausführt (Und der Befehl damit die Umgebungsvariablen des laufenden Gnome-Prozesses übernimmt)?

Phaiax

Webteam
(Themenstarter)
Avatar von Phaiax

Anmeldungsdatum:
1. August 2008

Beiträge: 45

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 😀

Antworten |