Inicio automático en el modo escritorio al arrancar en Bazzite OS
El problema
La imagen de Bazzite OS para Steam Deck viene configurada para iniciar siempre en el modo juego, ya que está orientada a este tipo de dispositivos. Por el contrario, la imagen de escritorio viene con el modo juego desactivado.
Para poder iniciar en modo escritorio a penas arranca el sistema se intentaron varias formas de cambiar el comportamiento del sistema.
Posibles soluciones
Eliminación de configuración de SDDM
Algunos usuarios han optado por eliminar los contenidos de la carpeta /etc/sddm.conf.d/
, desactivar el inicio de sesión automático y cambiar manualmente entre el modo juego y el modo escritorio desde la pantalla de inicio de sesión. Esto, según los usuarios que lo probaron, en la imagen que tiene Plasma como entorno de escritorio no afecta al botón de cambar a escritorio del modo juego, pero personalmente no lo probé porque no tengo dicha imagen.
Cambio de SDDM a GDM (Para la imagen de GNOME)
También está la opción de cambiar el gestor de sesión, desactivando SDDM y activando GDM. Esto también tiene como consecuencia el cambio manual entre el modo juego y el modo escritorio.
Para el cambio de DM se usa systemctl
:
sudo systemctl disable sddm
sudo systemctl enable gdm
Creación de archivo desktop_autologin
Según se ve en el archivo /usr/libexec/bazzite-autologin
, lanzado por el servicio /usr/lib/systemd/system/bazzite-autologin.service
, se comprueba si existe el archivo /etc/bazzite/desktop_autologin
antes de display-manager.service
. En caso de que este archivo exista, se cambia la sesión usada en el inicio de sesión automático a la de escritorio, ya sea la de Plasma o GNOME, caso contrario se usa gamescope-session (el modo juego).
Se puede crear el archivo simplemente con sudo touch /etc/bazzite/desktop_autologin
, pero esto hace que no funcione el botón de cambiar al modo juego. Si se elimina ya se puede acceder al modo juego, pero no al escritorio directamente en el arranque.
Soluciones funcionales
Crear un archivo adicional en /etc/sddm.conf.d/
Ya que en SDDM, al cargar la configuración, si hay claves duplicadas en varios archivos, el valor del último archivo cargado (según el orden alfabético) prevalece.
El archivo /etc/sddm.conf.d/zz-steamos-autologin.conf
, que es creado por /usr/bin/return-to-gamemode
al cambiar al modo juego, lanzado por el servicio /usr/lib/systemd/system/return-to-gamemode.service
, tiene el siguiente contenido:
[Autologin]
Session=gamescope-session.desktop
Pero este archivo no existe al arrancar el sistema, ya que el servicio bazzite-autologin
lo borra, y se ejecuta antes de que se inicie el gestor de sesión.
Entonces se puede crear un archivo llamado yy-default-session-override.conf
que contenga lo siguiente:
[Autologin]
Session=gnome-wayland.desktop
O puede ser otro entorno de escritorio de los que están en /usr/share/wayland-sessions
.
Como se mencionó al inicio, esto sobrescribirá la sesión usada y, en consecuencia, se iniciará la sesión de escritorio en lugar de la de gamescope.
Luego (aún no sé qué programa o servicio lo cambia) el archivo zz-steamos-autologin.conf
, al volver a cambiar al modo escritorio cambia su contenido al siguiente:
[Autologin]
Session=gnome-wayland-oneshot.desktop
Y si se vuelve a cambiar al modo juego entonces cambia su contenido al mencionado más arriba.
Automatizar la creación de desktop_autologin
Si bien la solución anterior es muy buena, esta otra también es útil.
Consiste en mejorar la ya mencionada solución de crear un archivo desktop_autologin en /etc/bazzite/
, haciendo que se cree antes que se ejecute el servicio bazzite-autologin
y se borre luego de que se ejecute SDDM.
Hay que crear dos servicios de systemd que automaticen esta tarea.
El primero va a crear el archivo desktop_autologin
, se creará en /etc/systemd/system/bazzite-prepare-desktop-autologin.service
y debe contener:
[Unit]
Description=Prepara el archivo de autologin en modo escritorio para Bazzite
Before=bazzite_autologin.service
[Service]
Type=oneshot
ExecStart=/usr/bin/sh -c 'echo "Creando /etc/bazzite/desktop_autologin" && touch /etc/bazzite/desktop_autologin'
[Install]
WantedBy=multi-user.target
El segundo va a cumplir la tarea de eliminar ese archivo una vez ya se haya iniciado el gestor de sesión, debido a que ya se cumplió el objetivo principal: hacer que se ejecute el escritorio antes que el modo juego.
Se crea junto al otro, por ejemplo: /etc/systemd/system/bazzite-cleanup-desktop-autologin.service
:
[Unit]
Description=Limpia el archivo de autologin en escritorio después de SDDM
After=sddm.service
Requires=sddm.service
[Service]
Type=oneshot
ExecStart=/usr/bin/sh -c 'echo "Eliminando /etc/bazzite/desktop_autologin" && rm -f /etc/bazzite/desktop_autologin && systemctl start bazzite-autologin.service'
[Install]
WantedBy=multi-user.target
Nótese que se inicia nuevamente el servicio bazzite-autologin
, esto es para que las configuraciones vuelvan a estar como estarían si no se hubiera creado el archivo desktop_autologin
, lo agregué debido a que, a pesar de haber borrado este último archivo, seguía sin funcionar el cambio al modo juego.