Die hier vorgestellte Methode funktioniert bei mir momentan nicht. Bitte lest euch meine Alternative Vorgehensweise durch!!!

Mein Hörspielserver kann fast alles so, wie ich es gerne hätte. Was noch fehlt, ist eine Funktion, die den Suspend unterbindet wenn Musik abgespielt wird. Rhythmbox und Amarok machen das schon von Haus aus, aber ich möchte lieber Songbird nutzen.

Es muss also ein Script her, welches abfragt, ob derzeit etwas über die Lautsprecher geht. Da ich Ubuntu benutze (derzeit 9.10), ist standardmäßig pulseaudio installiert. Hierfür gibt es nun eine recht einfache Methode, um den “Boxenstatus” auszulesen. Man gibt einfach ins Terminal ein:

`pactl list | grep RUNNING`

Wird gerade etwas abgespielt, meldet der Befehl “RUNNING” zurück. Wird nichts abgespielt, so bleibt die Rückmeldung leer.

Für meine Zwecke habe ich dieses Skript von Thelasko etwas umgebogen. Bei mir heisst es nun no.suspend.sh, liegt in meinem Scriptordner und hat folgenden Inhalt:

#!/bin/bash

# cleanup any bad state we left behind if the user exited while flash was running
gconftool-2 -s /apps/gnome-screensaver/idle_activation_enabled --type bool true



turn_it_off=0
sleepcomputer0=`gconftool-2 -g /apps/gnome-power-manager/timeout/sleep_computer_ac`
sleepdisplay0=`gconftool-2 -g /apps/gnome-power-manager/timeout/sleep_display_ac`

a=0
while true; do
        sleep 1
        SS_off=0
        
        
        # check if sound is sent to speaker     
        if pactl list | grep RUNNING > /dev/null; then
                echo "Sound $a"
                SS_off=1
                a=$((a+1));
        else
                echo "Stille $a"        
                a=$((a+1));
        fi


        # read current state of screensaver
        ss_on=`gconftool-2 -g /apps/gnome-screensaver/idle_activation_enabled`
        
        # change state of screensaver as necessary
        if [ "$SS_off" = "1" ] && [ "$ss_on" = "true" ]; then
                gconftool-2 -s /apps/gnome-screensaver/idle_activation_enabled --type bool false
                gconftool-2 -s /apps/gnome-power-manager/timeout/sleep_computer_ac --type int 0
                gconftool-2 -s /apps/gnome-power-manager/timeout/sleep_display_ac --type int 0
                turn_it_off=1
        elif [ "$SS_off" = "0" ] && [ "$ss_on" = "false" ] && [ "$turn_it_off" = "1" ]; then
                gconftool-2 -s /apps/gnome-screensaver/idle_activation_enabled --type bool true
                gconftool-2 -s /apps/gnome-power-manager/timeout/sleep_computer_ac --type int $sleepcomputer0
                gconftool-2 -s /apps/gnome-power-manager/timeout/sleep_display_ac --type int $sleepdisplay0
                turn_it_off=0
        fi
done

Der Eintrag für “sleep” ist mit “1” etwas eng (jede Sekunde wird die Überprüfung durchgeführt), ist aber zum debuggen ganz gut.

Songbird Songbird hat leider die Eigenschaft, den Status weiterhin auf “RUNNING” zu belassen, auch wenn die Musik auf “Pause” steht. Nur ein wirklicher “Stop” ändert den Status. Dies ist zB der Fall, wenn die Wiedergabeliste ihr Ende erreicht hat. Leider gibt es unter Songbird keine “Stop”-Taste. Hierfür existiert aber ein Add-On, welches an die aktuelle Songbird-Version wie folgt angepasst werden muss:

  • Man lädt die aktuelle Version des Add-Ons von dieser Seite

  • Diese xpi-Datei kann man mit dem Archiventpacker öffnen (nicht entpacken!!!)

  • innerhalb des Archivs öffnet man die Datei install.rdf

  • Hier sucht man nun die Stelle “<em:maxversion>1.1.0pre</em:maxversion>” und ersetzt das 1.1.0pre auf die installierte Songbird-Version (ich habs mal auf 1.7 gesetzt) und klickt auf Speichern

  • Der Archivmanager fragt nun, ob das Archiv aktualisiert werden soll, was man bestätigt.

  • Jetzt kann die xpi-Datei als Add-On in Songbird installiert werden

Wenn man nun die Musik mit der Stop-Taste stoppt, dann erkennt das unser Script.