SUSPEND unterbinden wenn Musik spielt (Alternative)

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.

Ich hatte erst versucht, die SUSPEND-Zeiten per Skript zu verändern. Da aber irgendwie der Gnome-Power-Manager bei mir nicht will, hab ich eine andere Lösung gefunden. Nämlich durch simulierte Maus-Bewegungen zu verhindern, dass die GNOME-Session IDLE wird. Und so geht es:

Zuerst installiert man xmacro:

sudo apt-get install xmacro

Jetzt erstellt man eine Datei namens „myxmacro“. Diese erhält den folgenden Inhalt:

MotionNotify 90 90 
MotionNotify 120 120

Anschließend erstellt man eine Datei namens „no.idle.sh“ und macht sie ausführbar. Ich habe sie bei mir in den Skriptordner gelegt:

touch no.idle.sh
chmod +x no.idle.sh

Diese Datei erhält nun den folgenden Inhalt:

#!/bin/bash
# No IDLE prevents GNOME to turn IDLE 
# if there is any sound sent to speakers
# This script requires the package "xmacro"
# (apt-get install xmacro)
###########################################
# This script requires a textfile called "myxmacro"
# with the following (dummy) content:
# ------------ myxmacro ------------
# MotionNotify 90 90 
# MotionNotify 120 120
# ----------------------------------
# You need to fix the path to "myxmacro" in line 31
#
#############################################

# set Log-File
LOG=/home/YOUR_USERNAME/noidle.log
sound=0
silence=0


while true; do
    sleep 1
    Datum=`date +%d.%m.%Y-%H:%M:%S`    
    
    # check if sound is sent to speaker    
    if pactl list | grep RUNNING > /dev/null; then
        echo "[$Datum] Sound (Ping: $sound)" >> $LOG
        sound=$((sound+1));
        xmacroplay :0 </path/to/myxmacro
        silence=0
    else
        echo "[$Datum] Stille (Ping: $silence)"    >> $LOG
        silence=$((silence+1));
        sound=0
    fi
    #----------------------------------------------------
done

Ihr müsst jetzt noch:
– in Zeile 18 den Pfad zur Logdatei anpassen
– in Zeile 31 den Pfad zur Datei myxmacro anpassen
Der Eintrag für „sleep“ ist mit „1“ etwas eng (jede Sekunde wird die Überprüfung durchgeführt), ist aber zum debuggen ganz gut.

Das Script wird nun zu den Startprogrammen hinzugefügt, so dass es bei jedem Neustart direkt ausgeführt wird.

Fertig.

Was das Script macht:

  • Jede Sekunde wird überprüft, ob etwas auf die Lautsprecher gesendet wird (pactl list | grep RUNNING)
  • WIRD Musik abgespielt, werden die Mausbewegungen simuliert (mittels xmacroplay). Das hat zur Folge, dass die GNOME-Session nicht IDLE wird (und somit auch der Suspend unterdrückt wird)
  • Wird KEINE Musik abgespielt, macht es gar nichts. Somit kann die Session IDLE werden.
  • Der Status (Musik ja/nein) wird in die Logdatei geschrieben. Ihr könnt diesen Status überprüfen, indem ihr folgendes ins Terminal eingebt:

    tail -f /path/to/noidle.log

    (wobei auch hier wieder der Pfad zur Logdatei angepasst werden muss)

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.

(english)

This entry was posted in Ubuntu, ubuntuusers. Bookmark the permalink. Follow any comments here with the RSS feed for this post. Post a comment or leave a trackback.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Your email address will never be published.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.