systemd: Programm auf /dev/ttyX starten

16/05/2015 - 23:13 von Christian Garbs | Report spam
Mahlzeit!

Nachdem nich mit dem Wechsel auf Jessie unerwartet erstaunlich gut mit
systemd zurechtkommt und mich damit angefreundet habe[1]. Auch eigene
Unit-Files sind deutlich fixer erstellt als Initskripte (obwohl ich da
auch kurz vor dem Wechsel auf Jessie das aktuelle Template-System
entdeckt habe, das hàtte auch früher sein dürfen…).

Jetzt bin ich aber scheinbar über das erste bei systemd gestolpert,
was doof ist, wie es ja alle beschrieben haben:

Ich habe auf meinem RaspberryPi einen selbstgebauten Mediaplayer für
die Konsole[2] (kein X), den ich bisher über /etc/inittab auf tty4
gestartet habe. Problem: Die inittab interessiert systemd nicht mehr.

Wichtig war es bei der Konsolen-Anwendung, dass sie auf einem
bestimmten Terminal làuft. $TERM muss gesetzt sein und `tput cols`
bzw. `tput lines` sollten sinnvolle Werte liefern.

Über einen systemd-service kann ich das Ding starten, mittels
'exec </dev/tty4', 'exec >/dev/tty4' komme ich auch Eingabe und
Ausgabe an das richtige Terminal. Nachdem ich jetzt im Skript manuell
TERM=linux setze, kann ich sogar tput wieder ohne Fehler aufrufen.
Leider kommt als Bildschirmgröße nur stumpf 80x25 zurück - der Pi
hàngt an einem HDMI-Fernseher, da passt mehr drauf. Da die Knsole
aber nicht sauber initialisiert ist, fehlt das wohl.

gettys werden unter systemd wohl über das Spezialkonstrukt 'logind'
versorgt (in der logind.conf habe ich dafür gesorgt, dass nur noch die
tty1-3 belegt werden und tty4 für mich frei ist). In dem Fall wird
vermutlich auch die Konsole sauber initialisiert. Aber es sieht nicht
so aus, als ob man wie früher flexibel Dienste auf den Konsolen
starten kann, sondern nur noch gettys (dafür aber dynamisch gestartet,
hui!).


Lange Rede, kurzer Sinn:

Wie kriege ich meine Anwendung unter systemd auf sauber initialisiert
auf einem bestimmten tty gestartet?
(Ich habe nicht mal Lust, $TERM setzen zu müssen…)

Ist das einer der Fàlle, der mit systemd unter den Tisch gefallen ist
oder gibt es da einen Trick?

Gruß
Christian

(Supersede, weil ich den Artikelentwurf zur Sicherheit unter anderem
Namen gespeichert habe und tin natürlich die halbfertige Originaldatei
versendet hat :-)


[1] Ich bin bis letzten Monat eisern bei "/etc/init.d/irgendwas start"
geblieben und habe mich nie mit "service start irgendwas" anfreunden
können. "systemctl start irgendwas" geht mir inzwischen aber flott
von den Fingern :-)

[2] https://github.com/mmitch/omxplayer-console
Christian.Garbs.http://www.cgarbs.de
Das Internet darf kein linkfreier Raum sein!From: Christian Garbs <mitch@cgarbs.de>
 

Lesen sie die antworten

#1 Sven Hartge
17/05/2015 - 00:17 | Warnen spam
Christian Garbs wrote:

[1] Ich bin bis letzten Monat eisern bei "/etc/init.d/irgendwas start"
geblieben und habe mich nie mit "service start irgendwas" anfreunden
können. "systemctl start irgendwas" geht mir inzwischen aber flott
von den Fingern :-)



Hat nichts mit deiner Frage zu tun, aber für das Archiv:

"/etc/init.d/irgendwas befehl_hier" zu nutzen ist schon seit langem
keine gute Idee. Alle (relevanten) Distributionen haben die Abstraktion
über "service irgendwas befehl_hier" eingeführt. Dies funktioniert für
alle aktuellen Init-Systeme, also systemd, upstart und klassiches
SysV-Init.

Wichtiger ist daber, dass "service" das Enviroment vorher sàubert, so
dass nicht aus Versehen Umgebungsvariablen wie LD_PRELOAD oder LC_* das
Verhalten des gestarten Daemons veràndern können.



Sigmentation fault. Core dumped.

Ähnliche fragen