Como posso me registrar automaticamente na área de trabalho com o systemd?


20

Como posso configurar o systemd para efetuar login automaticamente no meu ambiente de área de trabalho, de preferência sem usar o gerenciador de login? Estou usando o Arch.


Qual gerenciador de login você está usando? Alguns (GDM, KDM, iirc, talvez mais) já oferecem suporte ao logon automático, portanto, você só precisa ativar o serviço para eles.
Wieland

Atualmente estou usando fino e pode ser configurado para autologin, mas sem um gerenciador de exibição do processo de inicialização seria mais rápido e mais flickerless :)
fhucho

Oh, eu interpretei mal sua pergunta.
Wieland

Respostas:


22

Isso é descrito no Arch Wiki :

Crie um novo arquivo de serviço semelhante ao getty@.servicecopiá-lo para/etc/systemd/system/

cp /usr/lib/systemd/system/getty@.service /etc/systemd/system/autologin@.service

Isso basicamente copia o que já existe getty@.servicepara um novo arquivo autologin@.serviceque pode ser modificado livremente. É copiado /etc/systemd/systemporque é onde os arquivos de unidades específicas do site são armazenados. /usr/lib/systemd/systemcontém arquivos de unidade fornecidos pelos pacotes, portanto você não deve alterar nada.

Você precisará vincular isso autologin@.serviceao serviço getty para o tty no qual deseja se registrar automaticamente, por exemplo, para tty1:

ln -s /etc/systemd/system/autologin@.service /etc/systemd/system/getty.target.wants/getty@tty1.service

Até o momento, ainda é o mesmo que o getty@.servicearquivo usual , mas a parte mais importante é modificar o autologin@.servicearquivo para efetivamente fazer login automaticamente. Para fazer isso, você só precisa alterar a ExecStartlinha para ler

ExecStart=-/sbin/agetty -a USERNAME %I 38400

A diferença entre a ExecStartlinha getty@.servicee autologin@.serviceé apenas a -a USERNAMEque diz à agetty para efetuar logon automaticamente no usuário com o nome de usuário USERNAME.

Agora você só precisa dizer ao systemd para recarregar seus arquivos daemon e iniciar o serviço:

systemctl daemon-reload
systemctl start getty@tty1.service

(Não tenho certeza se o serviço iniciará corretamente se você já estiver conectado ao tty1, a maneira mais segura é provavelmente reinicializar em vez de iniciar o serviço).

Se você deseja iniciar automaticamente o X, insira o seguinte trecho no seu ~/.bash_profile(retirado do wiki novamente):

if [[ -z $DISPLAY ]] && [[ $(tty) = /dev/tty1 ]]; then
    exec startx
fi

Você precisará modificá-lo ~/.xinitrcpara iniciar o ambiente da área de trabalho, pois isso depende do DE e provavelmente também está descrito no wiki do Arch.


Qual é o agetty arg% I?
Edward Anderson

O que há com o `caractere no final? Isso é necessário? O que isso significa?
precisa saber é o seguinte

@ rien333 É desnecessário, removi-o da resposta.
Wieland

2
Eu recebo o erro File existsquando eu faço a ligação simbólica
Pós Auto

use ln -sf /etc/systemd/system/autologin@.service /etc/systemd/system/getty.target.wants/getty@tty1.servicepara substituí-lo.
Manuel Schmitzberger 9/11

5

Modifique diretamente o arquivo /etc/systemd/system/getty.target.wants/getty@tty1.service(que é um link simbólico para /lib/systemd/system/getty@service):

Anexar -a/--autologin USERNAMEà linha:

ExecStart=-/sbin/agetty --noclear %I $TERM

Conseqüentemente:

ExecStart=-/sbin/agetty -a USERNAME %I $TERM

Você também pode remover -o '-p -- \\u'(como presente na instalação atual do Arch), pois isso iniciaria o login, USERNAMEmas ainda solicitará a senha.

Após a reinicialização, você entrará automaticamente.

Ps Altere o nome do arquivo getty@tty1.servicepara o qual ttyvocê deseja fazer login.


Nota para maior clareza: se for um link simbólico, substitua o link simbólico por um novo arquivo e edite esse novo arquivo.
Edward Anderson

1

IMO, o Arch Wiki atualmente recomenda uma solução muito mais simples:

Execute o helper ( systemctl edit getty@tty1) ou faça o que eu fiz manualmente:

mkdir -p /etc/systemd/system/getty@tty1.service.d/
touch /etc/systemd/system/getty@tty1.service.d/override.conf

O texto que você deseja inserir (por qualquer método) é ( certifique-se de alterar o nome de usuário adequadamente ):

[Service]
ExecStart=
ExecStart=-/usr/bin/agetty --autologin username --noclear %I $TERM

NOTA : A linha vazia é importante! (é certo que não sei por que ...)

Agora, restart ( shutdown -r 0) e algo com efeito ... login: username (automatic login)acontecerá onde ele bloqueou anteriormente a espera da entrada de nome de usuário / senha


Depois de reiniciado e de login automático, se você é como eu e deseja fazer o SSH neste sistema agora, provavelmente precisará executar:

systemctl enable sshd.service

O que criará o link simbólico (por exemplo ln -s '/usr/lib/systemd/system/sshd.service' '/etc/systemd/system/multi-user.target.wants/sshd.service')


A linha vazia limpará primeiro a entrada ExecStart, enquanto a próxima linha apresentará um novo comando exec. Também é importante notar que em alguns sistemas (Ubuntu) o agetty executável pode estar localizado /sbin/agetty, então vale a pena conferir o /etc/systemd/system/getty.target.wants/getty@tty1.servicearquivo original primeiro.
platforma
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.