¿Cómo puedo iniciar sesión automáticamente en el escritorio con systemd?


20

¿Cómo puedo configurar systemd para iniciar sesión automáticamente en mi entorno de escritorio, preferiblemente sin usar el administrador de inicio de sesión? Estoy usando Arch.


¿Qué administrador de inicio de sesión estás usando? Algunos (GDM, KDM, iirc, tal vez más) ya admiten el inicio de sesión automático, por lo que solo necesitará habilitar el servicio para ellos.
Wieland

Actualmente estoy usando SLiM y se puede configurar para iniciar sesión automáticamente, pero sin un administrador de pantalla el proceso de arranque sería más rápido y sin parpadeos :)
fhucho

Oh, leí mal tu pregunta.
Wieland

Respuestas:


22

Esto se describe en Arch Wiki :

Cree un nuevo archivo de servicio similar a getty@.servicecopiándolo en/etc/systemd/system/

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

Básicamente, esto copia lo ya existente getty@.servicea un nuevo archivo autologin@.serviceque se puede modificar libremente. Se copia /etc/systemd/systemporque es donde se almacenan los archivos de unidad específicos del sitio. /usr/lib/systemd/systemcontiene archivos de unidad proporcionados por paquetes, por lo que no debe cambiar nada allí.

A continuación, deberá vincularlo autologin@.serviceal servicio getty para el tty en el que desea iniciar sesión automáticamente, por ejemplo, para tty1:

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

Hasta ahora, sigue siendo el mismo que el getty@.servicearchivo habitual , pero la parte más importante es modificar el archivo autologin@.servicepara iniciar sesión automáticamente. Para hacer eso, solo necesita cambiar la ExecStartlínea para leer

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

La diferencia entre la ExecStartlínea getty@.servicey autologin@.servicesolo es la -a USERNAMEque le dice a agetty que inicie sesión automáticamente con el nombre de usuario USERNAME.

Ahora solo tiene que decirle a systemd que vuelva a cargar sus archivos daemon e inicie el servicio:

systemctl daemon-reload
systemctl start getty@tty1.service

(No estoy seguro de si el servicio se iniciará correctamente si ya inició sesión en tty1, la forma más segura es simplemente reiniciar en lugar de iniciar el servicio).

Si luego quieres iniciar X automáticamente, inserta el siguiente fragmento en tu ~/.bash_profile(tomado de la wiki nuevamente):

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

Tendrá que modificar su ~/.xinitrcpara iniciar su entorno de escritorio, cómo hacerlo depende del DE y probablemente también se describa en Arch wiki.


¿Cuál es el agetty arg% I?
Edward Anderson

¿Qué pasa con el 'personaje al final? ¿Es eso necesario? Qué significa eso?
rien333

@ rien333 No es necesario, lo he eliminado de la respuesta.
Wieland

2
Me sale el error File existscuando hago el enlace simbólico
Post Self

use ln -sf /etc/systemd/system/autologin@.service /etc/systemd/system/getty.target.wants/getty@tty1.servicepara sobrescribirlo.
Manuel Schmitzberger

5

Modifique directamente el archivo /etc/systemd/system/getty.target.wants/getty@tty1.service(que es un enlace simbólico /lib/systemd/system/getty@service):

Añadir -a/--autologin USERNAMEa la línea:

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

Por lo tanto:

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

También puede eliminar -o '-p -- \\u'(como está presente en la instalación actual de Arch), ya que esto iniciaría el inicio de sesión USERNAMEpero aún le pedirá la contraseña.

Después de reiniciar, iniciará sesión automáticamente.

Ps Cambie el nombre del archivo getty@tty1.serviceal ttyque desea iniciar sesión.


Nota para mayor claridad: si es un enlace simbólico, reemplace el enlace simbólico con un nuevo archivo y edite ese nuevo archivo.
Edward Anderson

1

OMI, Arch Wiki actualmente recomienda una solución mucho más simple:

Ejecute el ayudante ( systemctl edit getty@tty1) o haga lo que hice manualmente:

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

El texto que desea ingresar (por cualquier método) es ( asegúrese de cambiar el nombre de usuario adecuadamente ):

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

NOTA : ¡La línea vacía es importante! (Es cierto que no estoy seguro de por qué ...)

Ahora, reinicie ( shutdown -r 0) y ... login: username (automatic login)sucederá algo que bloqueó previamente esperando la entrada de nombre de usuario / contraseña


Una vez reiniciado e iniciado sesión automáticamente, si eres como yo y quieres ingresar a SSH en este sistema ahora, probablemente necesites ejecutar:

systemctl enable sshd.service

Lo que creará el enlace simbólico (por ejemplo ln -s '/usr/lib/systemd/system/sshd.service' '/etc/systemd/system/multi-user.target.wants/sshd.service')


La línea vacía primero borrará la entrada ExecStart, mientras que la siguiente línea introducirá un nuevo comando exec. También vale la pena señalar que en algunos sistemas (Ubuntu) el ejecutable agetty podría ubicarse /sbin/agetty, por lo que vale la pena verificar /etc/systemd/system/getty.target.wants/getty@tty1.serviceprimero el archivo original .
Platforma
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.