Ubuntu 21.10 – Problema de GDM – pantalla de inicio de sesión

Ubuntu 21.10 – Problema de GDM – pantalla de inicio de sesión

Acabo de actualizar mi escritorio de Ubuntu 21.04 a 21.10. ¡Todo funciona bien! Yo era feliz.

Pero después de eso, ejecuto un programa incorrecto que cambiará el fondo de la pantalla gráfica de inicio de sesión a otra imagen.

Lo más probable es que sea el script que ejecuto: descargué el siguiente programa durante el 21.04, lo instalé y lo ejecuté.

 github.com/thiggy01/gdm-background

 gdm-background/gdm-background-helper /


#!/usr/bin/env python3

import distro
import dbus
import dbus.service
from dbus.mainloop.glib import DBusGMainLoop
from gi.repository import GLib
import shutil
from subprocess import call

class GDMBackground(dbus.service.Object):

    if distro.id() == 'ubuntu':
        default_theme = '/usr/share/gnome-shell/theme/Yaru/gnome-shell-theme.gresource'
    elif distro.id() == 'pop':        
        default_theme = '/usr/share/gnome-shell/theme/Pop/gnome-shell-theme.gresource'
    
    backup_theme = default_theme + '~'

    def __init__(self, conn=None, object_path=None, bus_name=None):
        dbus.service.Object.__init__(self, conn, object_path, bus_name)

    @dbus.service.method('xyz.thiggy01.GDMBackground', in_signature='s', out_signature='b',
        sender_keyword='sender', connection_keyword='conn')
    def SetImage(self, task, sender=None, conn=None):
        action_id = 'xyz.thiggy01.GDMBackground.SetImage'
        if self._check_polkit_privilege(sender, conn, action_id):
            if task == 'backup':
                shutil.copy(self.default_theme, self.backup_theme)
            elif task == 'set':
                shutil.move("/tmp/gdm3/theme/gnome-shell-theme.gresource", self.default_theme)
                return True
        else:
            return False

    @dbus.service.method('xyz.thiggy01.GDMBackground', in_signature='s', out_signature='b',
        sender_keyword='sender', connection_keyword='conn')
    def RestoreBackup(self, task, sender=None, conn=None):
        action_id = 'xyz.thiggy01.GDMBackground.RestoreBackup'
        if self._check_polkit_privilege(sender, conn, action_id):
            if task == 'restore':
                shutil.move(self.backup_theme, self.default_theme)
                return True
        else:
            return False

    @dbus.service.method('xyz.thiggy01.GDMBackground', in_signature='s', out_signature='',
        sender_keyword='sender', connection_keyword='conn')
    def RestartGDM(self, action_id, sender=None, conn=None):
            if self._check_polkit_privilege(sender, conn, action_id):
                call(['/usr/sbin/service', 'gdm', 'restart'])

    def _check_polkit_privilege(self, sender, conn, action_id):
        if sender is None and conn is None:
            return

        self.proxy_dbus = dbus.Interface(conn.get_object('org.freedesktop.DBus',
            '/org/freedesktop/DBus/Bus', False), 'org.freedesktop.DBus')
        sender_pid = self.proxy_dbus.GetConnectionUnixProcessID(sender)

        self.proxy_polkit = dbus.Interface(dbus.SystemBus().get_object(
            'org.freedesktop.PolicyKit1', '/org/freedesktop/PolicyKit1/Authority', False),
            'org.freedesktop.PolicyKit1.Authority')

        try:
            (is_auth, is_challenge, details) = self.proxy_polkit.CheckAuthorization(
                ('unix-process', {'pid': dbus.UInt32(sender_pid, variant_level=1),
                                  'start-time': dbus.UInt64(0, variant_level=1)}),
                 action_id, {'':''}, dbus.UInt32(1), 'cancel')
            if is_auth:
                return True
            else:
                return False
        except dbus.DBusException as error:
            self.proxy_polkit.CancelCheckAuthorization('cancel')
            raise

if __name__ == '__main__':
   
    DBusGMainLoop(set_as_default=True)
    bus = dbus.SystemBus()
    name = dbus.service.BusName('xyz.thiggy01.GDMBackground', bus)
    gdm_background_helper = GDMBackground(name, '/xyz/thiggy01/GDMBackground')
    GLib.MainLoop().run()

Después de eso, Ubuntu 21.10 ya no puede cargar la pantalla gráfica de inicio de sesión.

Hay un error en la pantalla: Monitoree la cara SAD con el mensaje "¡Oh, no! Algo salió mal". Ha ocurrido un problema y el sistema no puede recuperarse. Comuníquese con un administrador del sistema.

Intento solucionar el problema ejecutando Ubuntu 21.10 usando el modo de recuperación. Luego ve a la raíz y usando los comandos:

sudo apt install ubuntu-gnome-desktop
systemctl status gdm
systemctl start gdm

No funciona en absoluto.

Sospecho que el programa/script que ejecuto entra en conflicto con la configuración de GNOME 40 con Ubuntu 21.04. Ayúdenme a recuperar la configuración original de la pantalla de inicio de sesión de la GUI.

Intento iniciar sesión en Ubuntu 21.04 usando CTRL-SHIFT-F3. Luego escribo:

systemctl status gdm3

gdm.service is active (running)
Starting GNOME Display Manager.....

Pero hay un mensaje de error:

Gdm:  GdmDisplay:  Session never registered, failing
Gdm: Child process -2037 was already dead.

Respuesta1

Yo tuve el mismo problema. Primero deberá acceder a una consola raíz de recuperación. Presionar Mayús izquierda o Escape durante el arranque debería ser suficiente.https://wiki.ubuntu.com/RecoveryMode

¿Qué podría ser suficiente?

Instalé lightdm, pero no estoy seguro de si era necesario instalar lightdm y volver a gdm3. Esto podría funcionar:

sudo apt reinstall gdm3 gnome-shell yaru-theme-gnome-shell
sudo service gdm3 restart

Lo que hice

Primero ejecuté la opción de restauración para recuperar el archivo original. Sin efecto. Utilicé un script diferente con el indicador --restore, no el código Python que publicaste. Parece que ambos simplemente hacen esto:

mv /usr/share/gnome-shell/theme/Yaru/gnome-shell-theme.gresource~ \
/usr/share/gnome-shell/theme/Yaru/gnome-shell-theme.gresource

Luego instalé lightdm.

# Should install then show UI to switch from gdm3 to lightdm
sudo apt install lightdm

Reinicié y funcionó, pero la interfaz de usuario falló una vez que volví a iniciar sesión en Gnome. Por ejemplo: al presionar la tecla Super aparecía el cuadro de búsqueda de la aplicación, pero los íconos se dibujaban superpuestos y parpadeaban como un problema de framebuffer. Lightdm también mostró la versión 21.04 de Ubuntu en la esquina inferior izquierda. No creo que lightdm + gnome sea compatible correctamente en 21.10 todavía.

Finalmente, reinstalé gdm3, gnome-shell y el tema yaru y cambié de lightdm a gdm.

sudo apt reinstall gdm3 gnome-shell yaru-theme-gnome-shell
# Switch back to gdm3
sudo dpkg-reconfigure gdm3 

Se reinicia y todo funciona nuevamente, sigue siendo la misma imagen de fondo predeterminada para gdm3. Es más que tedioso que requiera piratería para cambiar una imagen de fondo, pero aquí estamos.

información relacionada