Linux – XBMC aus Bereitschaftsmodus per MCE-Fernbedienung aufwecken

Letzte Woche habe ich mich damit beschäftigt, meinen XBMC Media-PC per MCE-Fernbedienung (Logitech Harmony) aufzuwecken. Out-of-the-Box funktioniert es meiner Erfahrung nach, weder unter Ubuntu 10.04, 11.10 noch unter dem aktuellsten Arch Linux (Stand: 03.02.2012).

xbmc shutdown menu suspend 650x365 - Linux - XBMC aus Bereitschaftsmodus per MCE-Fernbedienung aufwecken

Mit den Standardeinstellungen kann man XBMC zwar über die Harmony (Remote Control) in den Bereitschaftsmodus (pm-suspend, S3, Suspend-to-RAM) schicken, aber nicht wieder aufwecken – stattdessen muss der Powerknopf am Gehäuse des Media-PCs gedrückt werden.

Unter Linux (Kernel 3.2) muss noch das Aufwachen (WakeUp) per USB (IR-RC6-Empfänger) aktiviert werden.

HowTo/Tutorial

Dazu checken wir erstmal, ob das Aufwecken per USB (in meinem Fall USB0, USB2, US15, US12) aktiviert ist.

cat /proc/acpi/wakeup
...
USB0 S4 *disabled pci:0000:00:04.0
USB2 S4 *disabled pci:0000:00:04.1
US15 S4 *disabled pci:0000:00:06.0
US12 S4 *disabled pci:0000:00:06.1
...

Sollten diese deaktiviert (disabled) sein, so müssen wir diese aktivieren.

echo "USB0" > /proc/acpi/wakeup
echo "USB2" > /proc/acpi/wakeup
echo "US15" > /proc/acpi/wakeup
echo "US12" > /proc/acpi/wakeup

Um es automatisch beim Starten prüfen zu lassen, können wir …

status=`cat /proc/acpi/wakeup | grep "USB0" | awk {'print $3}'`
 if [ "$status" = "disabled" -o "$status" = "*disabled" ]; then
 echo "USB0" > /proc/acpi/wakeup
 fi
status=`cat /proc/acpi/wakeup | grep "USB2" | awk {'print $3}'`
 if [ "$status" = "disabled" -o "$status" = "*disabled" ]; then
 echo "USB2" > /proc/acpi/wakeup
 fi
status=`cat /proc/acpi/wakeup | grep "US12" | awk {'print $3}'`
 if [ "$status" = "disabled" -o "$status" = "*disabled" ]; then
 echo "US12" > /proc/acpi/wakeup
 fi
status=`cat /proc/acpi/wakeup | grep "US15" | awk {'print $3}'`
 if [ "$status" = "disabled" -o "$status" = "*disabled" ]; then
 echo "US15" > /proc/acpi/wakeup
 fi

… in die /etc/rc.local eintragen. So damit hätten wir den ersten Schritt geschafft!!

Nun müssen wir das Aufwecken noch für das jeweiligen USB-Geräte (IR-RC6-Empfänger) aktivieren. In meinem Fall muss ich …

echo enabled > /sys/bus/usb/devices/3-3/power/wakeup

… ausführen. Die USB-Nummer (3-3) ändert sich je nach USB-Port und Motherboard. Um Herauszufinden, über welchen Port euer Linux-Betriebsystem den IR-Empfänger anspricht, führt ihr …

dmesg | grep -i mceusb
[ 22.930071] mceusb 3-3:1.0: Registered Formosa21 eHome Infrared Transceiver with mce emulator interface version 2
[ 22.930082] mceusb 3-3:1.0: 2 tx ports (0x0 cabled) and 2 rx sensors (0x0 active)
[ 22.930160] usbcore: registered new interface driver mceusb
[ 23.117845] input: MCE IR Keyboard/Mouse (mceusb) as /devices/virtual/input/input7
[ 23.181149] rc rc0: lirc_dev: driver ir-lirc-codec (mceusb) registered at minor = 0

… aus. Beim Grep-Befehl müsst ihr je nach IR-Empfänger euer Treiber-Modul, in meinem Fall mceusb, verwenden. echo enabled > /sys/bus/usb/devices/…/power/wakeup tragen wir logischerweise auch noch in die /etc/rc.local ein. mrgreen - Linux - XBMC aus Bereitschaftsmodus per MCE-Fernbedienung aufwecken


UPDATE_2013-04-03: Einige Systeme (Zotac ZBOX PLUS ID41) benötigen nicht nur für den USB-Port (3-3), sondern auch für den USB-Controller (3) dieses echo enabled > .../wakeup. In meinem Startup-Skript führe ich, für meinen RC6 IR605Q (147a:e03e) IR-Empfänger, folgende zusätzliche Befehle, neben den /proc/acpi/wakeup Befehlen, aus:

#############################################
### USB-IR darf den Media-PC aufwachen lassen
# mceusb 3-3:1.0: Registered Formosa21 eHome Infrared Transceiver with mce emulator interface version 1
usbport=`grep -i 147a/e03e /sys/bus/usb/devices/*-[0-9]/uevent | awk -F/ '{print $6}'`
usbcontroller=`echo $usbport | awk -F- '{print $1}'`
echo enabled > /sys/bus/usb/devices/$usbport/power/wakeup
echo enabled > /sys/bus/usb/devices/usb$usbcontroller/power/wakeup

Damit setze ich quasi, automatisiert, egal, an welchem USB-Port/-Controller der IR-Empfänger hängt, die beiden wakeup Werte auf enabled.

# Beispiel für USB-Port 3-3 und USB-Controller 3
echo enabled > /sys/bus/usb/devices/3-3/power/wakeup
echo enabled > /sys/bus/usb/devices/usb3/power/wakeup

Ob der IR-Empfänger nun an USB-Port 3-3, 4-1, 1-2 oder USB-Controller usb3, usb4, usb1 hängt, ist egal, weil die beiden Variablen usbport und usbcontroller diese Werte selbstständig beim Booten herausfinden!


UPDATE_2013-04-04: Man kann das Ganze, auch viel einfacher, mit einer udev-Regel umsetzen.

vi /etc/udev/rules.d/90-mcewakeup.rules
## 147a:e03e Formosa Industrial Computing, Inc. Infrared Receiver [IR605A/Q]
SUBSYSTEM=="usb", ENV{ID_VENDOR_ID}=="147a", ENV{ID_MODEL_ID}=="e03e" RUN+="/bin/sh -c 'echo enabled > /sys$env{DEVPATH}/../power/wakeup;echo enabled > /sys$env{DEVPATH}/power/wakeup'"

Wenn ihr einen anderen IR-Empfänger nutzt, müsst ihr die ID_VENDOR_ID und ID_MODEL_ID anpassen.

lsusb
Bus 003 Dev 003: ID 147a:e03e Formosa Industrial Computing, Inc. Infrared Receiver [IR605A/Q]

So, das sollte es gewesen sein. Nun könnt ihr euer Media-Center auch mit der MCE-Fernbedienung aufwecken. Im nächsten Artikel beschäftigen wir uns mit den Problemen nach dem Suspend (Bereitschaft)!

Weiterführende Links:
HTPC – Media Center – Logitech Harmony reagiert träge unter Windows und Linux 
Linux – LIRC – XBMC mit Logitech Harmony steuern – Lircmap.xml und Keyboard.xml
Arch Linux – LIRC Konfiguration mit MCE RC6 IR und Lircmap.xml für XBMC (Logitech Harmony)
Ubuntu (alle Versionen) – LIRC Konfiguration mit MCE RC6 IR605Q (147a:e03e) und Logitech Harmony

Quellen:
USB Wakeup bei Kernel 3.2 aktivieren
[LINUX] HOW-TO to install Ubuntu and XBMC on Zotac MAG Mini HD-ND01 Ion the easy way

Veröffentlicht von

_nico

Mac-User aus Leidenschaft, Blogger seit Oktober 2009, 88er Baujahr, technikaffin. Ich fühle mich aber nicht nur auf Apple'schen Betriebssystemen zu Hause, alles was eine Shell hat, interessiert mich besonders! Ihr findet mich auch auf Twitter und Google+.

31 Gedanken zu „Linux – XBMC aus Bereitschaftsmodus per MCE-Fernbedienung aufwecken“

  1. Hi – vielen Dank für das How-To, aufwecken aus S3 funktioniert jetzt, allerdings mit einem Folgeproblem: Die Fernbedienung funktioniert nach dem Aufwecken in 90% aller Fälle nicht mehr, da laut dmesg der USB Receiver disconnected wurde (das komplette USB Device fehlt obwohl laut „lsusb“ angeschlossen) – hattest Du das Problem auch schon?
    Wenn per Power-Button aufgeweckt wird , funktioniert alles wie es soll

    1. Guten Morgen make, ja das Problem kenn ich. 🙂

      Das wird in dem Artikel heute Nachmittag/Abend beleuchtet. Es kann allerdings sein, dass das Problem von dir damit nicht gelöst wird – ich habe aber schon eine Idee. Kommentiere dann einfach noch mal in dem anderen Artikel!

      Gruß Nico

      PS: Ich denke, dass es Zufall war, dass der IR-Empfänger mal ging, wenn du den Power-Button benutzt hast – alles anderen wäre schon sehr komisch.

  2. Hi Nico, erstmal tolle Arbeit die Du hier ablieferst – Vielen Dank!
    Da bin ich mal auf den Artikel gespannt – lustigerweise funktioniert die Fernbedienung bzw. der Empfänger nach resume aus S3 per Gehäuse-Powerbutton IMMER!.
    Nur wenn per Fernbedienung aufgeweckt wird wird der betreffende USB Port nach dem Resume anscheinend kurz disconnected und das Device geht flöten (lsusb zeigt aber den Empfänger als existent)! Aber mal sehen – melde mich auf jeden Fall noch.

  3. Hallo, ich kann leider deine Anleitung nicht ganz nachvollziehen. Ich benutze Kubuntu 11.10.
    1)
    echo „USB0“ > /proc/acpi/wakeup müsste doch wohl eher als root ausgeführt werden, also sudo sh -c ‚echo „USB0“ > /proc/acpi/wakeup‘ ?
    2)
    if [ „$status“ = „disabled“ ] : müsste hier nicht = „*disabled“ stehen? So, wie du das jetzt hast, wird das ‚echo‘ immer ausgeführt und das ‚if‘ könnte gespart werden.

    1. Hi Andy, erst mal freut es mich das du den Artikel so gewissenhaft gelesen hast. Du hast natürlich in beiden Punkten recht!

      Allerdings habe ich bewusst das „sudo“, „sudo -c“ oder „su -“ weggelassen. Ich bin der Meinung, dass das fast jedem klar sein sollte, spätestens beim Ausführen bekommt man ja „permission denied“. Ein anderer Grund könnte auch sein, dass ich eh immer als root per SSH auf dem Media-PC bin. 🙂

      Punkt zwei habe ich noch mal bearbeitet und korrigiert! Kann wohl, je nach Kernel-Version, unterschiedlich sein – mal mit Stern mal ohne Stern.

      Danke dafür!

      Gruß Nico

      1. Danke für die schnelle Antwort! 🙂 Bei mir sieht die Ausgabe von ‚cat /proc/acpi/wakeup‘ ähnlich aus. Aber nach einen ‚echo USB0 > …‘ (als su) wird bei mir nichts auf ‚enabled‘ gestellt (erneuter Aufruf von ‚cat /proc….‘).

        Woran kann das liegen?

        1. Puh gute Frage… hast du mal neugestartet? Ein boot tut ja immer gut! Ich habe es gerade bei mir (Kernel 3.2) getestet – funktioniert.

          root@elfriede:~$
          root@elfriede:~$ cat /proc/acpi/wakeup
          Device S-state Status Sysfs node
          SMB0 S4 *disabled pci:0000:00:03.2
          USB0 S4 *disabled pci:0000:00:04.0
          USB2 S4 *enabled pci:0000:00:04.1

          root@elfriede:~$
          root@elfriede:~$ echo „USB0“ > /proc/acpi/wakeup
          root@elfriede:~$ cat /proc/acpi/wakeup
          Device S-state Status Sysfs node
          SMB0 S4 *disabled pci:0000:00:03.2
          USB0 S4 *enabled pci:0000:00:04.0
          USB2 S4 *enabled pci:0000:00:04.1
          ..

          1. Einen Neustart hab ich schon hinter mir um nochmal explizit im BIOS S3 einzustellen. Ich verwende Kernel 3.0.0-15-generic.

            Ahhhh… Es funktioniert bei mir auch. Allerdings nur bein den Devices, die als pci:… gekennzeichnet sind (bei cat /proc/…). Meine USBX haben dort aber nichts stehen.

    1. Ich hab heute nochmal verschiedene Bios-Einstellungen getestet. Leider ohne Erfolg. Sogar ein Bios-Update hab ich gemacht. Eventuell sollte ich mal noch einen anderen Kernel testen. Eine andere Idee hab ich momentan nicht mehr.

  4. hi nico,

    ich bekomme bei dem befehl
    echo enabled > /sys/bus/usb/devices/3-1/power/wakeup

    folgenden fehler
    -su: echo: Schreibfehler: Das Argument ist ungültig.

    habe ein silverstone lc16-m mit iMon fernbedienung
    dmesg | grep -i imon
    [ 31.762757] lirc_imon: Driver for SoundGraph iMON MultiMedia IR/Display, v0.6
    [ 31.762853] lirc_imon: Registered iMON driver (lirc minor: 0)
    [ 31.762906] input: iMON PAD IR Mouse (15c2:0036) as /devices/pci0000:00/0000:00:02.0/usb3/3-1/3-1:1.0/input/input5
    [ 31.772385] lirc_imon: iMON device (15c2:0036, intf0) on usb initialized
    [ 31.774176] lirc_imon: iMON device (15c2:0036, intf1) on usb initialized
    [ 31.774234] usbcore: registered new interface driver lirc_imon
    [ 39.719180] lirc_imon: send_packet: packet tx failed (-32)
    [ 39.719187] lirc_imon: vfd_write: send packet failed for packet #5
    [ 42.958446] lirc_imon: IR port opened

    irgend eine idee?
    danke vorab

      1. guten morgen nico,

        bin noch auf der 10.04 LTS mit kernel 2.6.32-38

        uname -a
        Linux melbourne 2.6.32-38-generic #83-Ubuntu SMP Wed Jan 4 11:12:07 UTC 2012 x86_64 GNU/Linux

        vg

          1. jab ist dran.
            komischerweise kann ich den rechner via XBMC aktuell nicht in den suspend schicken – da tut sich gar nix.
            ich werfe jetzt erst einmal ein blick ins bios.

    1. so…suspend geht nun. war im bios noch deaktiviert ^^
      nun geht’s via pm-suspend und xbmc-gui.
      nur starten via ir-fb tut er danach noch nicht wieder =(

        1. jub. denkst du das ist falsch?
          laut der ausgabe von ‚dmesg | grep -i imon‘ würde ich vermuten, dass dies mein device ist.

          [ 31.762906] input: iMON PAD IR Mouse (15c2:0036) as /devices/pci0000:00/0000:00:02.0/usb3/3-1/3-1:1.0/input/input5

          kann mich natürlich auch täuschen.

  5. Eine hilfreicher Post – danke!
    Den Code zum Aktivieren kannst du ein wenig zum Einzeiler optimieren:

    awk ‚/US(B(0|2),1(2|5))/ && $3==“*disabled“ { print „echo „$1″ > /proc/acpi/wakeup“ }‘ /proc/acpi/wakeup | sh

    1. argh, da hatte sich noch ein Komma anstelle des pipe eingeschlichen. Ich habe es auch noch so erweitert, dass ein führender asterisk nicht stört:

      awk ‚/US(B(0|2)|1(2|5))/ && $3~“disabled“ { print „echo „$1″ > /proc/acpi/wakeup“ }‘ /proc/acpi/wakeup

        1. Hi Loisel,
          so funktioniert es:

          awk '/US(B(0|2)|1(2|5))/ && $3~"disable" { print "echo "$1" > /proc/acpi/wakeup" }' /proc/acpi/wakeup | sh

          Gruß Nico

  6. Vielen Dank für das Tutorial!
    Ich verwende XBMC Eden und eine ZBox. Ich habe alle Schritte oben ausgeführt und sehe auch, dass beim Einschalten mit der Harmony ein (sehr kurzes) Signal an den IR-Empfänger gesendet wird, allerdings wacht XBMC nicht auf – nur durch Drücken des Power-Knopfes 🙁
    Woran kann das noch liegen?

      1. Hi Nico,

        ich habe diesen hier: (den mittleren)
        auf der zbox läuft seit gestern xbmc 11.1 in der „live-version“, also xbmcbuntu

        ich hatte davor die 10er und da ging alles problemlos…

  7. Hi Muck, ah okay.

    Poste hier mal bitte folgende Ausgaben:

    lsusb | grep -i infrared
    cat /proc/acpi/wakeup
    #*-* in deinen Port ändern
    cat /sys/bus/usb/devices/*-*/power/wakeup

    Du könntest mit irw mal testen, ob das Ein-/Ausschaltkommando beim Media-PC ankommt. Aber wenn du den Media-PC mit der Fernbedienung ausschalten kannst, sollte es eigentlich passen – vorausgesetzt in Harmony-Konfiguration steht „original Fernbedienung hat eine Taste zum Ein- und Ausschalten“.

    Wie ist der Ausschaltbutton in XBMC belegt (Einstellungen > System -> Energie)? Bereitschaft, Ruhezustand, Ausschalten?

    Gruß

Schreibe einen Kommentar

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