Ich arbeite mit einer eingebetteten Plattform und brauche /dev/fb0
klar für meinen eigenen Gebrauch (das Gerät, auf das über die serielle Konsole zugegriffen werden kann, während der Bildschirm zur Anzeige von Informationen verwendet wird, ohne X.).
Ich habe default.target
bereits geändert von grafisch zu Mehrbenutzer, aber jetzt öffnet es getty mit Anmeldeaufforderung auf dem Framebuffer-Gerät und ich kann einfach nicht welches finden Dienst ist das. Ich möchte nicht zufällig die Anmeldung an der seriellen Konsole und lsof
deaktivieren zeigt nichts mit /dev/fb0
öffnen.
Die Distribution ist Yocto Linux, falls Ihnen das weiterhilft.
Akzeptierte Antwort:
lsof
zeigt nichts mit /dev/fb0
öffnen.
Es wird nicht. Es gibt ein Terminal-Emulator-Programm, das in den Linux-Kernel integriert ist. Es manifestiert sich nicht als laufender Prozess mit offenen Dateihandles. Es ist über dem Framebuffer und dem Input-Event-Subsystem geschichtet, auf das es über interne Kernel-Schnittstellen zugreift. Es präsentiert sich für Systeme im Anwendungsmodus als eine Reihe von virtuellen Kernel-Terminals Geräte, /dev/tty1
und so weiter; eine Pseudo-Datei unter /sys
das zeigt die aktive KVT-Nummer; und eine Reihe von Videopuffergeräten im CGA-Stil, /dev/vcsa1
und so weiter.
Eines dieser Systeme im Anwendungsmodus ist natürlich getty
+login
System, das für den Betrieb auf diesen virtuellen Kernel-Terminals konfiguriert werden kann, und (wie Sie festgestellt haben) standardmäßig ist. Sie können getty
leicht loswerden Prozesse mit dokumentierten systemd-Mechanismen.
In einem alten System 5 init
System, jedes getty
wäre ein Eintrag in /etc/inittab
. In einem BSD init
System, jedes getty
ist ein Eintrag in /etc/ttys
. In einem systemd-System sind die Dinge etwas indirekt.
- Der „Login“-Dæmon,
logind
, kennt Dinge, die im systemd-Slang „Seats“ genannt werden. „Platz“ Null ist derjenige mit dem primären Framebuffer und all diesen virtuellen Kernel-Terminals. - Für diesen Platz
logind
an Versuche, N zu starten systemd-Dienste mit dem Namen[email protected]
durch zu[email protected]N.service
. Der Wert von N wird in denNAutoVTs
gesetzt Einstellung in/etc/systemd/logind.conf
. - Diese systemd-Dienste werden aus einer Dienstvorlageneinheit erstellt , benannt
[email protected]
. Der Vorlagenparameter ist, wie oben, der Gerätename der Gerätedatei des virtuellen Kernel-Terminals , in/dev/
. [email protected]
ist in der Standardkonfiguration ein symbolischer Link zu[email protected]
.- Es ist
[email protected]
das beschreibt, wie eingetty
ausgeführt wird Programm, das seine Ein-/Ausgabe über die Datei des virtuellen Terminalgeräts des Kernels durchführt.
Um all dies zu stoppen, besuchen Sie /etc/systemd/logind.conf
und konfigurieren Sie logind
autovt
nicht automatisch zu starten Dienste (und keine virtuellen Terminals zu reservieren, wenn Sie es genau wissen wollen).
Das ist jedoch noch nicht alles. Das Terminal-Emulator-Programm ist immer noch im Kernel aktiv, und alles, von Protokollnachrichten, die an ein Kernel-VT gerichtet sind, bis hin zum regelmäßigen Blinken des Cursors, wird dazu führen, dass der Terminal-Emulator Ihre Verwendung des Framebuffers stört. Aber das ist eine Frage der Codierung des Programms, das Sie haben, das den Framebuffer verwendet, um mit dem Kernel-Terminal-Emulator-Programm zu verhandeln, das hier bereits beantwortet wurde.
Die Anmeldung an der seriellen Konsole erfolgt übrigens auf einem ganz anderen Weg. Ein Generator erstellt eine Instanz von [email protected]
Template-Einheit eine Startzeit, instanziiert sie einmal für jedes Kernel-Konsolengerät, das sie findet oder über das sie informiert wird.
Weiterführende Literatur
- Best Practice zum Ausblenden der virtuellen Konsole beim Rendern von Video in Framebuffer
- https://superuser.com/a/723442/38062
logind.conf
. systemd Handbuchseiten. freedesktop.org.- „Mehrplatz“-Systemd. freedesktop.org.
systemd-getty-generator
. systemd Handbuchseiten. freedesktop.org.