Qual é a diferença entre [email protected] e [email protected]?

1

Para desativar alguns getty no meu dispositivo /dev/ttyAMA0 , tenho que mascará-lo com systemctl mask [email protected] . Isso funciona bem. Então eu habilito um getty em ttyUSB1 com systemctl enable [email protected] . Funciona também bem.

Então, minha pergunta: Existe uma diferença (e o que é) entre um [email protected] e um [email protected] ?

    
por powerpete 05.11.2018 / 15:11

1 resposta

1

Para ver a diferença entre essas duas unidades (ou, melhor, modelos de unidade), basta olhar a diferença entre os arquivos getty @ .service e serial-getty @ .service , que você pode encontrar em /lib/systemd/system em seu sistema.

(Os arquivos apontados aqui apontam para os do systemd v239, versão mais recente até o momento desta publicação. Os arquivos têm macros m4 neles, então são processados antes da instalação, mas é uma pequena alteração introduzida pelo processamento m4, portanto eles estão perto o suficiente.)

Existem algumas diferenças, mas a principal é o comando ExecStart= chamado por cada unidade.

A unidade getty @ .service chama este comando:

ExecStart=-/sbin/agetty -o '-p -- \u' --noclear %I $TERM

Enquanto o serial-getty @ .service invoca este comando:

ExecStart=-/sbin/agetty -o '-p -- \u' --keep-baud 115200,38400,9600 %I $TERM

O comando usado em serial-getty @ .service passa o argumento agetty the --keep-baud , para configurar a velocidade da porta serial. De certa forma, getty @ .service funcionará em uma porta serial, mas pode não configurar a porta serial corretamente, o que pode acabar não funcionando tão bem quanto poderia ou talvez ser mais lento do que poderia ser se configurado adequadamente.

Por outro lado, getty @ .service passa agetty o argumento --noclear , portanto a tela do console não é limpa depois que um usuário efetua logout (isso era tradicionalmente configurado em pelo menos tty0.)

Outras diferenças em relação aos arquivos da unidade:

  • serial-getty @ .service liga-se ao dispositivo udev para a porta serial ( BindsTo=dev-%i.device ), portanto, se for um dispositivo removível (como USB), o systemd interromperá o getty se o dispositivo for removido ou desconectado. / li>
  • getty @ .service verifica se tty0 existe ( ConditionPathExists=/dev/tty0 ), portanto, ele não gera consoles locais se o suporte a eles estiver desativado no kernel.
  • getty @ .service não configura as variáveis de localidade ( UnsetEnvironment=LANG LANGUAGE LC_... ) porque a localização normalmente não é suportada ou é mal suportada no console local.

Em relação ao seu caso particular em que você está mascarando ttyAMA0 e habilitando ttyUSB1, ttyUSB1 é uma porta serial (pelo menos, emula uma), então usar serial-getty @ .service seria mais apropriado.

No entanto, , ativar um getty @ ou [email protected] e mascarar o @ ttyAMA0 não é a melhor maneira de fazer isso.

O systemd pega sua configuração de console do kernel, tipicamente do argumento console= na linha de comando do kernel (isso é implementado por systemd-getty-generator , então veja sua documentação para mais detalhes.) Então tudo que você precisa fazer é configurar o console na linha de comando do kernel (com um argumento como console=ttyUSB1 , embora você queira incluir um console local como tty0 também) e o systemd fará a coisa certa.

Dê uma olhada em esta postagem do blog no suporte ao console serial no systemd para obter mais detalhes.

    
por 07.11.2018 / 06:47