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).
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.
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
Schreibe einen Kommentar zu Nico Antworten abbrechen