Como obter menos ttys com o Systemd?


29

Nos velhos tempos eu apenas modifiquei /etc/inittab. Agora, com o systemd, parece iniciar o tty [1-6] automaticamente, como devo desabilitar o tty [4-6]?

Parece que há apenas um arquivo de serviço systemd e ele usa a %Ipara discernir diferentes sessões tty. Espero não precisar remover esse serviço e criar cada um getty@ttyX.servicemanualmente.

Respostas:


35

Não há necessidade real de desabilitar TTYs "extras", pois em systemdgettys são gerados sob demanda: veja man systemd-getty-generatordetalhes. Observe que, por padrão, essa geração automática é feita apenas para os VTs até VT6 (para imitar sistemas Linux tradicionais).

Como Lennart diz em uma postagem no blog 1 :

Para tornar as coisas mais eficientes, os prompts de login agora são iniciados somente sob demanda. À medida que você muda para as VTs, o serviço getty é instanciado para getty@tty2.service, getty@tty5.service e assim por diante. Como não temos mais que iniciar incondicionalmente os processos getty, isso nos permite economizar um pouco de recursos e torna a inicialização um pouco mais rápida.

Se você deseja configurar um número específico de gettys, basta modificar logind.confcom a entrada apropriada, neste exemplo 3:

NAutoVTs=3


1. De fato , vale a pena ler toda a série de postagens - atualmente com o número 18 - systemd para Administradores .


Obrigado pela resposta, Jason. O aplicativo da minha empresa é enviado em um servidor físico e, em distribuições mais antigas, modificaríamos o inittab para bloquear outros ttys.
jcbwlkr

11

Nos sistemas Debian, existe um arquivo que causa o lançamento de 5 gettys extras na inicialização, se você acabou de criar um servidor (sem o serviço dbus):

/lib/systemd/system/getty.target.wants/getty-static.service

Nele, diz:

[Service]
Type=oneshot
ExecStart=/bin/systemctl --no-block start getty@tty2.service getty@tty3.service getty@tty4.service getty@tty5.service getty@tty6.service
RemainAfterExit=true

A exclusão desse arquivo interromperá a desova do getty extra. Sinta-se à vontade para encurtar a lista se quiser gerar apenas uma getty extra (para 2 consoles virtuais). Observe que você automaticamente obtém um em tty1, portanto sempre possui pelo menos um console virtual.

Consulte também: systemd-logind.service falha ao iniciar se o dbus estiver ausente


2
Nota: o arquivo pertence ao pacote systemd; portanto, para modificá-lo ou excluí-lo, use dpkg-divertprimeiro. Mas, há também uma maneira systemd nativo para obtê-lo fora do caminho - prazo sudo systemctl mask getty-static.servicee criar o seu próprio em/etc
Josip Rodin

2
maskSe um serviço ativado for barulhento , seria mais fácil criar uma unidade com o mesmo nome /etcpara substituir seu conteúdo. Use ExecStart = / bin / true se desejar iniciar zero gettys estáticos.
sourcejedi

a outra maneira correta do systemd é substituir a versão do pacote (você NUNCA deve excluir esse arquivo) usando sudo systemctl edit getty-static.service, o que criará um arquivo de substituição que tem precedência sobre o /libone
ryeager

8

Para desativar gettys em TTYs específicos 4-6, deixando possivelmente 1-3 e 7-9 funcionando, execute:

for i in {4..6}; do
  systemctl mask getty@tty${i}.service
done

maskcria um link simbólico /etc/systemd/system/{name} -> /dev/nullque desativa efetivamente o serviço. A tentativa de executá-lo systemctl startexibirá um erroFailed to start NAME.service: Unit NAME.service is masked.

Se você tiver um serviço A. Wants=masked.service, start Aterá êxito, mas também gerará erro de início de dependência no diário.

Se você tiver B.service Requires=masked.service, start Btambém falhará.

Sim, necroanswer. Felicidades.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.