Eu sempre usei inicialização de texto + console sem interface gráfica. Isso inclui o login, que também é apenas texto, pois faço algumas coisas de sincronização no momento do login, especificamente tty1
onde tenho um script de login automático, que executa o seguinte comando através do arquivo /etc/systemd/system/[email protected]/override.conf
:
/usr/sbin/agetty --autologin <myusername> --noclear %I 38400 linux
Acabei de atualizar para o Fedora 36 (de 35), e a inicialização vai bem até a última etapa. Em vez de me mostrar um prompt de login de texto, ele mostra uma tela preta com um sublinhado no canto superior esquerdo.
Por quê?
O comando systemctl
vai bem, exceto precisamente por uma linha vermelha:
● [email protected] loaded failed failed Getty on tty1
Nos logs, vejo um erro:
agetty[4565]: /dev/tty1: "cannot get controlling tty: Operation not permitted"
agetty[4565]: setting terminal attributes failed: Input/output error
Eu posso ver esse erro no console toda vez que tento como root
service [email protected] start
Não sei o que deu errado, mas parece que o comando agetty mudou?
EDITAR :
Se eu colocar a linha:
ExecStart=-/usr/sbin/agetty --autologin <myusername> --noclear tty1 38400 linux
no arquivo /etc/systemd/system/[email protected]/override.conf
o autologin funciona. No entanto, se eu mudar para
ExecStart=-/home/<myusername>/bin/myautologinscript.sh
com a mesma linha, não!!
Esse
cannot get controlling tty: Operation not permitted
erroagetty
é retornado poragetty
quandoTIOCSCTTY
ioctl()
ele faz com que o dispositivo terminal se torne o terminal de controle daagetty
sessão de falha.Ele emite isso
ioctl()
se o terminal atualmente não controlar nenhuma sessão ou se controlar uma sessão cujo id não sejaagetty
o pid de .Da
tty_ioctl(2)
página man:Portanto, não funcionará se
agetty
não for um líder de sessão.Se você iniciar um script que é executado
agetty
em um processo filho em vez de iniciaragetty
diretamente, o shell será um líder de sessão eagetty
não será.Using
exec agetty
será executadoagetty
no mesmo processo que o shell (substituirá o shell) e, em seguidaagetty
, será o líder da sessão.Se isso funcionasse na versão anterior do Fedora com o mesmo modus operandi, meu palpite seria quesystemd
já havia feito do terminal device o terminal de controle da sessão, talvez chamandoopen()
-o sem oO_NOCTTY
sinalizador. Mas mesmo assim,agetty
não ser o líder da sessão parece uma má ideia.(Eu acaricio isso, pois nesse caso a sessão controlada ainda não corresponderia
agetty
ao pid de , então ainda tentaria emitir oTIOCSCTTY
; não tenho outra explicação por enquanto).