FLIRC Fernbedienung mit Raspberry Pi

  • Ich habe einen Raspberry Pi, an dem ein FLIRC angesteckt ist (https://flirc.tv/more/flirc-usb). VDR wird beim Booten über /etc/rc.local gestartet mit der Option "--terminal=/dev/tty1". Leider bekommt er aber keine "Tastatureingaben" über den FLIRC (vielleicht weil an tty1 ja "/sbin/agetty --noclear tty1 linux" hängt?).


    Weiß jemand wie ich es erreichen kann, dass die über den FLIRC an tty1 geschickten Tastatureingaben beim VDR landen?

  • Ja, da muss man entweder die (a)getty-Instanz beenden oder ein freies tty nehmen - ich mache das für den Raspberry Pi so, dass ich das TTY umschalten lasse und dessen Eingaben an den stdin des VDR binde - das geht mit Systemd recht einfach als Drop-In für eine generische Systemd-Unit für den VDR:

    Da tty7 normalerweise eh frei bleibt, reicht es vermutlich mit /usr/bin/chvt 7 dorthin zu wechseln, bevor man den VDR daran bindet.

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Kann man das auch ohne systemd machen?

    Ich glaube um 2008 herum hatte ich das mal so mit dem Mahlzeit-ISO so genutzt, aber seitdem hat sich viel getan...

    Eigentlich sollte das doch die Option "--terminal=/dev/tty7" dann machen, oder?

    Läuft dein VDR dauerhaft als root oder droppt der seine Rechte und wechselt auf einen weniger privilegierten Nutzer?


    Wenn ich das richtig sehe, schaut der VDR in http://git.tvdr.de/?p=vdr.git;…e52794c6ba52;hb=HEAD#l489, ob er auf das tty zugreifen darf, dann droppt er die Rechte: http://git.tvdr.de/?p=vdr.git;…e52794c6ba52;hb=HEAD#l528 und dann versucht er später stdin, stdout, stderr usw. zu öffnen, ohne den Rückgabewert von freopen zu prüfen: http://git.tvdr.de/?p=vdr.git;…e52794c6ba52;hb=HEAD#l684 - d.h. man würde wenn ich das richtig verstehe nicht wirklich mitbekommen, wenn das fehlschlägt.

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Kann man die Konsole nicht via raspi-config oder /etc/inittab freigeben? Wäre einfacher.

  • Das hängt vom Init-System ab - wenn Systemd genutzt wird, ist die rc.local nur ein Abwärtskompatibilitätslayer, der den Nachteil hat, dass er nicht für lange laufende Prozesse gedacht ist und standardmäßig wird die rc.local auch nicht am Ende des Startvorgangs ausgeführt: https://www.freedesktop.org/so…d-rc-local-generator.html - und eine /etc/inittab wird ignoriert.


    Natürlich kann man eine getty@ttyX.service maskieren, um zu verhindern, dass (a)getty auf ttyX gestartet wird, aber wenn das Init-System die Möglichkeit bietet stdin, stdout und stderr an die gewünschten Endpunkte zu hängen, ist das die einfachste Lösung, weil man sich keine Gedanken über die Berechtigungen des VDR-Prozess machen muss auf das tty zuzugreifen.

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Gerne, aber wäre es grundsätzlich nicht einfacher, wenn der vdr erst seine Ein- und Ausgabekanäle ans tty bindet und danach seine Rechte droppt?

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)