Que serviço do systemd inicia o console de texto no dispositivo framebuffer?

5

Estou trabalhando com uma plataforma incorporada e preciso ter /dev/fb0 clear para meu próprio uso (o dispositivo pode ser acessado pelo console serial enquanto a tela é usada para exibir informações, sem X.).

Eu já alterei default.target de gráfico para multiusuário, mas agora ele abre o getty com o prompt de login no dispositivo framebuffer e eu simplesmente não consigo localizar qual serviço é esse. Eu não quero desativar o login do console serial por acaso, e lsof não mostra nada com /dev/fb0 open.

A distribuição é do Yocto Linux, se for de alguma ajuda.

    
por SF. 03.04.2015 / 13:52

1 resposta

11

lsof doesn't show anything with /dev/fb0 open.

Não vai. Existe um programa emulador de terminal embutido no kernel do Linux. Não se manifesta como um processo em execução com identificadores de arquivos abertos. É colocado sobre o framebuffer e o subsistema de eventos de entrada, que usa interfaces de kernel internas para acessar. Ele se apresenta para sistemas de modo aplicativo como uma série de dispositivos kernel virtual terminal , /dev/tty1 e assim por diante.

Um desses sistemas de modo de aplicativo é, naturalmente, o sistema getty + login , que pode ser configurado para operar nesses terminais virtuais do kernel, e (como você encontrou) é por padrão. Você pode facilmente se livrar dos processos getty usando mecanismos systemd documentados.

Em um sistema System 5 init antigo, cada getty seria um registro em /etc/inittab . Em um sistema BSD init , cada getty é um registro em /etc/ttys . Em um sistema systemd, as coisas são um pouco indiretas.

  • O daemon "login", logind , sabe sobre coisas chamadas "lugares" na gíria systemd. "Assento" zero é aquele com o framebuffer primário e todos os terminais virtuais do kernel.
  • Para esse local, logind tenta iniciar N serviços systemd, denominados [email protected] até autovt@ttyN.service . O valor de N é definido na configuração NAutoVTs em /etc/systemd/logind.conf .
  • Esses serviços do systemd são criados a partir de uma unidade de modelo de serviço , denominada [email protected] . O parâmetro de modelo é, como acima, o nome do dispositivo do arquivo de dispositivo do terminal virtual do kernel , em /dev/ .
  • [email protected] é, na configuração padrão, um link simbólico para [email protected] .
  • É [email protected] que descreve a execução de um programa getty , configurado para fazer sua entrada / saída por meio do arquivo de dispositivo do terminal virtual do kernel.

Portanto, para parar tudo isso, visite /etc/systemd/logind.conf e configure logind para não iniciar automaticamente nenhum autovt services (e não reservar terminais virtuais, se você quiser ser minucioso sobre isso).

No entanto, isso não é tudo. O programa emulador de terminal ainda está ativo no kernel, e tudo, desde mensagens de log direcionadas a um VT do kernel até o piscar regular do cursor, fará com que o emulador de terminal interfira no uso do framebuffer. Mas essa é uma questão de codificar o programa que você usa o framebuffer para negociar com o programa emulador de terminal do kernel, que já foi respondido aqui.

O login do console serial acontece por meio de uma rota bem diferente. Um gerador cria uma instância da unidade de modelo [email protected] em um tempo de inicialização, instanciando-a uma vez para cada dispositivo de console do kernel que ele encontra ou é informado.

Leitura adicional

por 03.04.2015 / 16:30