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
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
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.
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.
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.
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
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?
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
..
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.
@maroony
Vielleicht ist bei dir im Bios ACPI deaktiviert – sollte aktiviert sein.
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.
Okay, viel Glück.
Kannst dich ja melden wenn du neue Erkenntnisse besitzt. 🙂
Gruß
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
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?
Quelle: https://www.silverstonetek.com/downloads/lc16mmanual.jpg
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
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?
Quelle: https://www.silverstonetek.com/downloads/lc16mmanual.jpg
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.
@tomask
Jo, mach das. Was sagt pm-suspend auf der Konsole?
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 =(
echo enabled > /sys/bus/usb/devices/3-1/power/wakeup ?
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.
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.
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
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
Cool, danke.
Servus!
@ ThorstenS: Kann ich die Zeile „in der Regel“ genau so in die: /etc/rc.local eintragen ?
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
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?
Hi Muck, welchen IR-Empfänger hast du? Welche Linux-Distri und Version?
Gruß Nico
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…
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ß