Ubuntu 21.10 – GDM-Problem – Anmeldebildschirm

Ubuntu 21.10 – GDM-Problem – Anmeldebildschirm

Ich habe gerade meinen Desktop von Ubuntu 21.04 auf 21.10 aktualisiert. Alles funktioniert einwandfrei! Ich war zufrieden.

Aber danach führe ich ein falsches Programm aus, das den Hintergrund des grafischen Anmeldebildschirms durch ein anderes Bild ändert.

Höchstwahrscheinlich das Skript, das ich ausführe: Ich habe am 21.04. das folgende Programm heruntergeladen, installiert und ausgeführt.

 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()

Danach kann Ubuntu 21.10 den grafischen Anmeldebildschirm nicht mehr laden.

Auf dem Bildschirm wird ein Fehler angezeigt: Monitor SAD Face mit der Meldung „Oh nein! Etwas ist schiefgelaufen.“ Es ist ein Problem aufgetreten und das System kann nicht wiederhergestellt werden. Bitte wenden Sie sich an einen Systemadministrator.

Ich versuche, das Problem zu beheben, indem ich Ubuntu 21.10 im Wiederherstellungsmodus ausführe. Gehen Sie dann zum Stammverzeichnis und verwenden Sie die folgenden Befehle:

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

Es funktioniert überhaupt nicht.

Ich vermute, dass das von mir ausgeführte Programm/Skript die Einrichtung von GNOME 40 mit Ubuntu 21.04 in Konflikt bringt. Bitte helfen Sie mir, die ursprüngliche Einstellung des GUI-Anmeldebildschirms wiederherzustellen.

Ich versuche, mich mit STRG-UMSCHALT-F3 bei Ubuntu 21.04 anzumelden. Dann gebe ich ein:

systemctl status gdm3

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

Aber es kommt eine Fehlermeldung:

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

Antwort1

Ich hatte das gleiche Problem. Zuerst müssen Sie zu einer Wiederherstellungs-Root-Konsole gelangen. Das Drücken der linken Umschalttaste oder der Escape-Taste während des Bootvorgangs sollte funktionieren.https://wiki.ubuntu.com/RecoveryMode

Was könnte ausreichen

Ich habe lightdm installiert, bin mir aber nicht sicher, ob die Installation von lightdm und die Umstellung zurück zu gdm3 erforderlich waren. Das hier könnte funktionieren:

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

Was ich getan habe

Zuerst habe ich die Wiederherstellungsoption ausgeführt, um die Originaldatei wiederherzustellen. Keine Wirkung. Ich habe ein anderes Skript mit einem Flag --restore verwendet, nicht den Python-Code, den Sie gepostet haben. Es sieht so aus, als würden beide einfach Folgendes tun:

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

Dann habe ich lightdm installiert.

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

Neustart und das hat funktioniert, aber die Benutzeroberfläche war fehlerhaft, als ich mich wieder bei Gnome anmeldete. Beispiel: Durch Drücken der Super-Taste wurde das App-Suchfeld angezeigt, aber die Symbole wurden überlappend und flackernd gezeichnet, wie bei einem Framebuffer-Problem. Außerdem zeigte Lightdm in der unteren linken Ecke Ubuntu Version 21.04 an. Ich glaube nicht, dass Lightdm + Gnome in 21.10 bereits richtig unterstützt werden.

Schließlich habe ich gdm3, Gnome-Shell und das Yaru-Design neu installiert und bin von Lightdm zurück zu Gdm gewechselt.

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

Neustart und alles funktioniert wieder, immer noch das gleiche Standard-Hintergrundbild für gdm3. Es ist mehr als mühsam, dass man zum Ändern eines Hintergrundbilds Hacking betreiben muss, aber so ist es nun einmal.

verwandte Informationen