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

Kommentare

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

  1. Avatar von make
    make

    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. Avatar von Nico

      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. Avatar von make
    make

    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. […] loggn.de – Mac OSX, Linux und manchmal auch Windows Erfahrungen, Tipps und Tricks zu Mac OSX, Linux und manchmal auch Windows. 😉 « Linux – XBMC aus Bereitschaftsmodus per MCE-Fernbedienung aufwecken […]

  4. Avatar von maroony

    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. Avatar von Nico

      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. Avatar von maroony

        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. Avatar von Nico

          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. Avatar von maroony

            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.

  5. Avatar von Nico

    @maroony
    Vielleicht ist bei dir im Bios ACPI deaktiviert – sollte aktiviert sein.

    1. Avatar von maroony

      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.

      1. Avatar von Nico

        Okay, viel Glück.
        Kannst dich ja melden wenn du neue Erkenntnisse besitzt. 🙂

        Gruß

  6. Avatar von tomask
    tomask

    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. Avatar von Nico

      Hi Tomask, welche Linux-Distri nutzt du? Welche Kernel-Version hast du drauf?
      Gruß

      UPDATE: Beim LC16M sollte das alles hardwaremäßig bereits ohne zusätzliche Einstellungen funktionieren. Kannst du den HTPC wenn er aus ist mit der Fernbedienung einschalten? Wenn nicht, hast du diese Verbindung hergestellt?

      LC16M IR

      Quelle: https://www.silverstonetek.com/downloads/lc16mmanual.jpg

      1. Avatar von tomask
        tomask

        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. Avatar von Nico

          Beim LC16M sollte das alles hardwaremäßig bereits ohne zusätzliche Einstellungen funktionieren. Kannst du den HTPC wenn er aus ist mit der Fernbedienung einschalten? Wenn nicht, hast du diese Verbindung hergestellt?

          LC16M IR

          Quelle: https://www.silverstonetek.com/downloads/lc16mmanual.jpg

          1. Avatar von tomask
            tomask

            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.

  7. Avatar von Nico

    @tomask

    Jo, mach das. Was sagt pm-suspend auf der Konsole?

    1. Avatar von tomask
      tomask

      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. Avatar von Nico

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

        1. Avatar von tomask
          tomask

          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.

          1. Avatar von Nico

            Ja, das sollte passen.
            Bei /proc/acpi/wakeup stehen auch alle US*-Devices auf enable?

            Schaue dir mal das hier an:

            Disable Usbcore Autosuspend – es könnte am USBCORE liegen (usbcore.autosuspend=-1), teste es mal.

            oder/und

            No resume form standby with vista remote after 2.6.32-23 #37 Kernel version – Ubuntu Bug, könnte auch #38 betreffen – sind 20 Seiten, es gibt da bestimmt ne Lösung!

            Gruß

            PS: Würde mich über eine Rückinfo freuen – Danke.

  8. Avatar von ThorstenS
    ThorstenS

    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. Avatar von ThorstenS
      ThorstenS

      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. Avatar von Loisel
        Loisel

        Servus!

        @ ThorstenS: Kann ich die Zeile „in der Regel“ genau so in die: /etc/rc.local eintragen ?

        1. Avatar von _nico

          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

  9. Avatar von Muck
    Muck

    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. Avatar von _nico

      Hi Muck, welchen IR-Empfänger hast du? Welche Linux-Distri und Version?

      Gruß Nico

      1. Avatar von Muck
        Muck

        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…

  10. Avatar von _nico

    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 zu Nico Antworten abbrechen

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