Dienstag, 5. Mai 2009

Logitech Fernbedienung (Harmony 515) unter (K)Ubuntu 9.04 programmieren

Da ich mir vor einigen Wochen eine Logitech Harmony 515 sehr günster über Liveshopping gekauft habe, wollte ich diese auch unter Linux konfigurieren können. Ganz besonders, weil die Windows-Software dafür absoluter Sch... ist!

Dafür gibt es das schöne Projekt congruity. Das ist eine in Python (wyPython) geschriebene Oberfläche zum Konfigurieren der Harmony unter Linux. Es basiert auf libconcordance, diese Bibliothek wird zum Ansteuern der Fernbedienung verwendet.

Nach dem Herunterladen der jeweils neusten Version müssen zum Kompilieren von libconcord zuerst die Pakete libusb, libusb-dev, build-essential und g++ über den Paketmanager installiert werden. Congruity benötigt noch wxpython (Pakete python-wxgtk2.8, python-wxversion, libwxgtk2.8-0, libwxbase2.8-0, python-ctypes, python-wxtools, python-wxaddons). Python selbst sollte standardmässig vorhanden sein, sonst ebenfalls nachinstallieren.

Jetzt wird libconcord konfiguriert, d.h. das Makefile wird an das System passend erstellt:

cd concordance-0.21/libconcord

./configure

Achtung: Zumindest bei mir was es jetzt nötig, das generierte Makefile anzupassen, da ansonsten libconcord nicht gegen die libstdc++ gelinkt wurde und der Start von congruity sonst später den Fehler 'undefined symbol: _ZTVN10__cxxabiv120__si_class_type_infoE' in libconcord wirft! Dafür einfach das Makefile öffnen und die Zeile 'LIBS = -lusb' in 'LIBS = -lusb -lstdc++' ändern/ergänzen. Weitere Infos zum Thema finden sich im dazugehörigen Bug.

Anschließend wird die Bibliothek kompiliert und installiert:

make

sudo make install

Danach liegt die Bibliothek in /usr/local/lib. Jetzt fehlen noch die Python bindings:

cd concordance-0.21/libconcord/bindings/python

sudo python setup.py install

Laut Readme benötigt libconcord Direct IO, d.h. man muss später congruity entweder als root ausführen (was ein unnötiges Sicherheitsrisiko wäre) oder dem Benutzer RAWIO Rechte geben. Ich habe mich für letzteres entschieden. Unter Ubuntu geht das mit policykit und nettweise enthält das makefile von libconcordance gleich die passende Regel:

cd concordance-0.21/libconcord

make policykit

sudo make install_policykit

Leider enthält diese Regel z.Zt. noch einen Bug. Daher muss das erzeugte Permission-File noch in den richtigen Ordner kopiert werden, denn sonst wird die Fernbedienung später nur erkannt, wenn congruity als root gestartet wird:

sudo cp /usr/local/etc/udev/rules.d/99-libconcord.rules /etc/udev/rules.d/

lsusb |grep -i logitech

Hier merkt man sich die ID (bei mir 046d:c111) und passt entsprechend den nächsten Befehl mit den bei sich ermittelten Werten an:

echo 'SYSFS{idVendor}=="046d", SYSFS{idProduct}=="c111", MODE="666"' |sudo tee /etc/udev/rules.d/custom-concordance.rules

Die Installation der Bibliothek ist damit abgeschlossen, weiter geht es mit der Benutzeroberfläche congruity:

cd congruity-10

sudo make install

Zum Schluss sollte man seinem Lieblingsbrowser noch sagen, dass er die Dateiendungen *.EZHex, *.EZUp und *.EZTut immer mit congruity öffnen soll, damit die Bedienung später einfach von der Hand geht. Wie man das macht, sollte jeder wissen (ansonsten hilft jede Suchmaschine gerne weiter), man kann auch einfach warten, dass der Browser beim ersten Download so einer Datei nachfragt und dann congruity zuweisen.

Unter Firefox gibt es noch eine kleine Besonderheit zu beachten, dieser Browser lädt nämlich standardmässig alle Dateien ohne Nachfrage herunter. Um das zu Lösen, gibt es einen einfachen Weg, den die Readme beschreibt:

You'll need to change a setting to see the download action prompt; Otherwise,

files will simply be saved to disk without you being asked. On Linux, this may

be achieved from the Edit menu -> Preferences menu item -> Main tab -> Select

"Always ask me where to save files". The exact menu location may vary slightly

on other operating systems.

When a file download commences, a dialog will appear with the option to "Open

With", or "Save" the file. Select "Open With", and browse for the congruity

executable as the application. You may also want to select "Do this

automatically for files like this from now on". You will need to select the

path to the congruity application once for each file type (*.EZHex, *.EZUp,

*.EZTut).

If the automatic option is not selected, the dialog will appear for every file

downloaded. Note that Firefox does remember the path to congruity for future

downloads, even though it is not displayed.

Ein kurzer Test lädt das Programm /usr/local/bin/congruity.

Es bricht mit einem Fehler ab (ERROR: Precisely one filename argument is required), denn der Konfigurationsvorgang läuft anders ab:

Nach der Konfiguration des Browsers (s.o.) besucht man die Harmony Webseite. Hier erstellt man sich einen neuen Login (oder loggt sich mit einem vorhandenen ein), ignoriert die Meldung über veraltete Software und klickt sich durch, bis man aufgefordert wird, die Fernbedienung über USB mit dem PC zu verbinden. Folgt man dem Assistenten weiter, öffnet sich congruity automatisch, sobald der Browser ein durch den Assistenten generiertes EZHex-File herunterlädt (das haben wir ja weiter oben so konfiguriert; ansonsten fragt der Browser jetzt nach, womit die Datei geöffnet werden sollen, dann wählen wir /usr/local/bin/congruity).

Alles weitere ist jetzt selbsterklärend. Sollten nach weitere Dateien automatisch runtergeladen werden und der Browser nachfragen, womit diese geöffnet werden sollen, wählen wir einfach immer congruity.

1 Kommentar:

  1. Hab deine Anleitung Schritt für Schritt ausgeführt, hat wunderbar geklappt, vielen Dank! (Besitze auch ne Harmony 515).

    AntwortenLöschen