Moin Forum,
nach dem Tausch meiner CineS2 V5 durch eine V6 war diese Woche VDR-Basteln angesagt, wobei ich normalerweise ein stiller yavdr (0.3) Nutzer und eher ein Mitleser denn aktiver Forumsbegleiter bin.
Beim Basteln kam der Wunsch auf, die Mediatheken, Youtube- und Browser-Addons von yavdr mit meiner Fernbedienung sauber bedienen zu können. Also hab ich mich gestern mal hingesetzt und hier nichts vernünftiges gefunden. Deswegen gibt es hier ein Mini-Howto, das prinzipiell distributionsunabhängig ist, aber auf yavdr 0.3 aufsetzt.
Benötigt werden die Programme lircd, lircmd sowie xte (aus dem Paket "xautomation") und die Python-Erweiterung "python-pylirc".
Die Fernbedienung und der lircd werden wie üblich eingerichtet, sodass ein Lirc-Nutzerprogramm vom Dämon die übersetzten Fernbedienungstasten aus der /etc/lirc/lircd.conf erhält.
Ich verwende eine Harmony 600, die perfekt zum VDR passt
Natürlich muss jeder die nachfolgende Konfigurationstipps an seine Codes anpassen!
Bei yavdr werden Web-Addons über Upstart gestartet und beendet. Die entsprechenden Startdateien liegen unter /etc/init/ Nur dort will ich den Mausersatz haben.
Deswegen erweitere ich die Startdateien - hier am Beispiel des Youtube-Addons:
#/etc/init/youtube.conf
description "youtube"
author "Steffen Barszus <steffenbpunkt@gmail.com>"
pre-start script
/usr/bin/svdrpsend remo off || /bin/true
if [ ! -z $STANDALONE ] ; then
touch /tmp/.standalone || /bin/true
fi
end script
post-stop script
/bin/rm -f /tmp/.standalone || /bin/true
/usr/bin/svdrpsend remo on || /bin/true
killall /usr/sbin/lircmd || /bin/true
killall T9.py || /bin/true
/sbin/initctl emit --no-wait vdr-frontend-restart
end script
exec su -c "chromium-browser --start-maximized --app=http://www.youtube.com/xl" vdr
post-start script
/usr/sbin/lircmd --nodaemon --uinput&
/usr/bin/T9.py&
end script
Alles anzeigen
Zusätzlich zum Browser werden also der lircmd als Mausersatz auf dem Steuerkreuz gestartet und ein von mir erstelltes Script /usr/bin/T9.py für die Texteingabe.
Diese werden später per killall-Befehl wieder beendet.
lircmd braucht eine passenden config in /etc/lirc/lircmd.conf:
#
# lircmd config file
#
# protocol to use
PROTOCOL IMPS/2
# ACCELERATOR start max multiplier
ACCELERATOR 1 60 5
MOVE_S * KEY_UP
MOVE_E * KEY_RIGHT
MOVE_N * KEY_DOWN
MOVE_W * KEY_LEFT
BUTTON1_CLICK * KEY_OK
BUTTON3_CLICK * KEY_INFO
Alles anzeigen
Die Codes KEY_* kommen aus meiner lircd.conf und müssen ggf. angepasst werden. Linke Maustaste ist die OK-Taste, Rechte Maustaste die Info-Taste
Das Script T9.py ermöglicht eine bequeme T9-artige Texteingabe per Fernbedienung . Die Datei findet sich auf Grund der kritischen Formatierung bei Python-Skripten auch in Anlage - der Download muss in T9.py umbenannt werden und die Datei ausführbar sein (chmod u+x T9.py, wenn die Datei root gehört):
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#/usr/bin/T9.py
def set_proc_name(newname):
from ctypes import cdll, byref, create_string_buffer
libc = cdll.LoadLibrary('libc.so.6')
buff = create_string_buffer(len(newname)+1)
buff.value = newname
libc.prctl(15, byref(buff), 0, 0, 0)
import pylirc, time, os, sys
key_delay = 0.5
keys = {
"1" : u" .,?!1",
"2" : u"abcä2ABCÄ2",
"3" : u"def3DEF3",
"4" : u"ghi4GHI4",
"5" : u"jkl5JKL5",
"6" : u"mnoö6MNOÖ6",
"7" : u"pqrs7PQRS7",
"8" : u"tuvü8TUVÜ8",
"9" : u"wxyz9WXYZ9",
"0" : u"/@+-*()0",
"E" : u"³",
"D" : u"²",
"UP" : u"{",
"DOWN" : u"}",
"POS1" : u"¼",
"END" : u"½",
"CURLEFT" : u"°",
"CURRIGHT" : u"~",
"PGDOWN" : u' ',
"OK" : u"¹",
"EXIT" : u"|"
}
translation = {
u"ä" : " adiaeresis",
u"Ä" : " Adiaeresis",
u"ö" : " odiaeresis",
u"Ö" : " Odiaeresis",
u"ü" : " udiaeresis",
u"Ü" : " Udiaeresis",
u"+" : " plus",
u"-" : " minus",
u"*" : " asterisk",
u"/" : " slash",
u"(" : " parenleft",
u")" : " parenright",
u" " : " space",
u"." : " period",
u"," : " comma",
u"?" : " question",
u"!" : " exclam",
u"@" : " at",
u"¹" : " Return",
u"²" : " BackSpace",
u"³" : 'down Control_L" "key a" "keyup Control_L',
u"{" : 'down Control_L" "key plus" "keyup Control_L',
u"}" : 'down Control_L" "key minus" "keyup Control_L',
u"¼" : ' Home',
u"½" : ' End',
u"°" : ' Left',
u"~" : ' Right',
u"|" : 'down Alt_L" "key F4" "keyup Alt_L'
}
index = 0
blocking = 1
#
set_proc_name("T9.py")
if(pylirc.init("T9.py", "/etc/lirc/lircrc", blocking)):
code = {"config" : ""}
lastkey = u""
while(code["config"] != "quit"):
start = time.time()
# Read next code
s = pylirc.nextcode(1)
while(s):
for (code) in s:
lirccode = code["config"].encode("utf-8")
listlength = len(keys[lirccode])
if(lirccode == lastkey ) and (listlength > 1):
delay = time.time() - start
if(delay < key_delay):
os.system('xte "key BackSpace"')
#print "delete"
index = (index + 1) % listlength
else:
index = 0
start = time.time()
else:
index = 0
key = keys[lirccode][index]
if(key in translation):
key = translation[key]
else:
key = u" " + key
os.system('xte "key%(key)s"' % vars())
#print key," ",index
s = []
lastkey = lirccode
# Clean up lirc
pylirc.exit()
Alles anzeigen
Dieses Script benötigt eine passende /etc/lirc/lircrc Konfig:
begin
button = KEY_ARROW_UP
prog = T9.py
config = UP
end
begin
button = KEY_ARROW_DOWN
prog = T9.py
config = DOWN
end
begin
prog = T9.py
button = KEY_EXIT
config = EXIT
end
begin
prog = T9.py
button = KEY_PLAY
config = OK
end
begin
prog = T9.py
button = KEY_SKIP_BACK
config = POS1
end
begin
prog = T9.py
button = KEY_SKIP_NEXT
config = END
end
begin
prog = T9.py
button = KEY_REWIND
config = CURLEFT
end
begin
prog = T9.py
button = KEY_FORWARD
config = CURRIGHT
end
begin
prog = T9.py
button = KEY_PAUSE
config = PGDOWN
end
begin
prog = T9.py
button = KEY_0
config = 0
end
begin
prog = T9.py
button = KEY_1
config = 1
end
begin
prog = T9.py
button = KEY_2
config = 2
end
begin
prog = T9.py
button = KEY_3
config = 3
end
begin
prog = T9.py
button = KEY_4
config = 4
end
begin
prog = T9.py
button = KEY_5
config = 5
end
begin
prog = T9.py
button = KEY_6
config = 6
end
begin
prog = T9.py
button = KEY_7
config = 7
end
begin
prog = T9.py
button = KEY_8
config = 8
end
begin
prog = T9.py
button = KEY_9
config = 9
end
begin
prog = T9.py
button = KEY_E
config = E
end
begin
prog = T9.py
button = KEY_PLUS
config = D
end
Alles anzeigen
In Feld button sind wieder die Codes meiner Fernbedienung eingetragen und dieses sind somit anzupassen.
Im Feld config sind die Codes definiert, die das Script auswertet. Hier wäre ein Ansatzpunkt, wenn man das Script erweitern möchte. Ich könnte mir vorstellen, auf der Harmony einen Web-Modus zu konfigurieren und dort könnte man Smart-Key wie "www.", ".de" ".com" oder "Home" einrichten.
Bis jetzt hab ich aber nur Basics vorgesehen, die universell für webartige Add-Ons mit dem Chromium-Browser geeignet sind.
Das T9.py-Skript ist kein Meisterwerk und beruht auf dem Simple-Example der pylirc-Erweiterung. In nutze in dem Script seltene UTF8-Zeichen als Platzhalter für Steuerzeichen wie Ctrl-A , Ctrl-+ oder Alt-F4. Für Verbesserungen wäre ich dankbar, insbesondere ein saubererer Ausstieg des Python-Scriptes wäre schön.
Ach ja, für yavdr gehören die Änderungen natürlich ins Template-System und nicht in die Original-Dateien
HTH
Thorsten