Sto lavorando con una piattaforma incorporata e ho bisogno di avere /dev/fb0
chiaro per uso personale (il dispositivo accessibile tramite console seriale mentre lo schermo viene utilizzato per visualizzare informazioni, senza X.).
Ho già cambiato default.target
da grafico a multiutente, ma ora si apre getty con il prompt di accesso sul dispositivo framebuffer e non riesco proprio a individuare quale il servizio è quello. Non voglio disabilitare per caso l'accesso alla console seriale e lsof
non mostra nulla con /dev/fb0
aperto.
La distribuzione è Yocto Linux, se può esserti d'aiuto.
Risposta accettata:
lsof
non mostra nulla con /dev/fb0
aperto.
Non lo farà. C'è un programma di emulazione di terminale integrato nel kernel Linux. Non si manifesta come un processo in esecuzione con handle di file aperti. È sovrapposto al framebuffer e al sottosistema degli eventi di input, a cui utilizza le interfacce interne del kernel per accedere. Si presenta ai sistemi in modalità applicazione come una serie di terminali virtuali del kernel dispositivi, /dev/tty1
e così via; uno pseudo-file in /sys
che mostra il numero KVT attivo; e una serie di dispositivi di buffer video in stile CGA, /dev/vcsa1
e così via.
Uno di quei sistemi in modalità applicazione è ovviamente getty
+logind
system, che può essere configurato per funzionare su questi terminali virtuali del kernel e (come hai scoperto) è di default. Puoi facilmente sbarazzarti di getty
processi utilizzando meccanismi di sistema documentati.
In un vecchio System 5 init
sistema, ogni getty
sarebbe un record in /etc/inittab
. In un BSD init
sistema, ogni getty
è un record in /etc/ttys
. In un sistema systemd, le cose sono un po' indirette.
- Il demone "login",
logind
, conosce cose chiamate "posti" nel gergo systemd. "Seat" zero è quello con il framebuffer primario e tutti quei terminali virtuali del kernel. - Per quel posto,
logind
tenta di avviare N servizi systemd, denominati[email protected]
fino a[email protected]N.service
. Il valore di N è impostato inNAutoVTs
impostazione in/etc/systemd/logind.conf
. - Questi servizi di sistema vengono creati da un'unità modello di servizio , denominato
[email protected]
. Il parametro del modello è, come sopra, il nome del dispositivo del file del dispositivo del terminale virtuale del kernel , in/dev/
. [email protected]
è, nella configurazione predefinita, un collegamento simbolico a[email protected]
.- È
[email protected]
che descrive l'esecuzione di ungetty
programma, impostato per eseguire il suo input/output tramite il file del dispositivo terminale virtuale del kernel.
Quindi, per fermare tutto questo, visita /etc/systemd/logind.conf
e configura logind
non avviare automaticamente alcun autovt
servizi (e non prenotare terminali virtuali, se vuoi essere approfondito).
Tuttavia, questo non è tutto. Il programma dell'emulatore di terminale è ancora attivo nel kernel, e qualsiasi cosa, dai messaggi di registro diretti a un kernel VT fino al regolare lampeggio del cursore, farà sì che l'emulatore di terminale interferisca con l'uso del framebuffer. Ma si tratta di codificare il programma che hai che usa il framebuffer per negoziare con il programma emulatore di terminale del kernel, a cui è già stata data risposta qui.
A proposito, l'accesso alla console seriale avviene tramite un percorso abbastanza diverso. Un generatore crea un'istanza di [email protected]
template unit un tempo di avvio, istanziandolo una volta per ogni dispositivo della console del kernel che trova o di cui viene parlato.
Ulteriori letture
- Best practice per nascondere la console virtuale durante il rendering di video su framebuffer
- https://superuser.com/a/723442/38062
logind.conf
. pagine di manuale di sistema. freedesktop.org.- sistema "multiposto". freedesktop.org.
systemd-getty-generator
. pagine di manuale di sistema. freedesktop.org.