Ubuntu 21.10 - GDM 문제 - 로그인 화면

Ubuntu 21.10 - GDM 문제 - 로그인 화면

방금 데스크탑을 Ubuntu 21.04에서 21.10으로 업그레이드했습니다. 모든 것이 잘 작동합니다! 난 행복했다.

그런데 그 후에 그래픽 로그인 화면의 배경을 다른 그림으로 바꾸는 잘못된 프로그램을 실행했습니다.

제가 실행하는 스크립트일 가능성이 높습니다. 21.04 동안 다음 프로그램을 다운로드하여 설치하고 실행했습니다.

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

그 후 Ubuntu 21.10은 더 이상 그래픽 로그인 화면을 로드할 수 없습니다.

화면에 오류가 있습니다. "안돼! 문제가 발생했습니다."라는 메시지와 함께 SAD 얼굴을 모니터링하세요. 문제가 발생하여 시스템을 복구할 수 없습니다. 시스템 관리자에게 문의하세요.

복구 모드를 사용하여 Ubuntu 21.10을 실행하여 문제를 해결해 봅니다. 그런 다음 루트로 이동하여 다음 명령을 사용하십시오.

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

전혀 작동하지 않습니다.

내가 실행하는 프로그램/스크립트가 GNOME 40 설정과 Ubuntu 21.04의 설정과 충돌하는 것 같습니다. 원래 GUI 로그인 화면 설정을 되돌리도록 도와주세요.

CTRL-SHIFT-F3을 사용하여 Ubuntu 21.04에 로그인하려고 합니다. 그런 다음 다음을 입력합니다.

systemctl status gdm3

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

하지만 오류 메시지가 있습니다:

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

답변1

나는 같은 문제가 있었다. 먼저 복구 루트 콘솔에 접속해야 합니다. 부팅하는 동안 왼쪽 Shift 또는 Esc 키를 누르면 됩니다.https://wiki.ubuntu.com/RecoveryMode

무엇이면 충분할까요?

lightdm을 설치했지만 lightdm을 설치하고 gdm3으로 다시 전환해야 하는지 잘 모르겠습니다. 이것은 효과가 있을 수 있습니다:

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

제가 한

먼저 원본 파일을 다시 저장하기 위해 복원 옵션을 실행했습니다. 효과가 없습니다. 게시한 Python 코드가 아닌 --restore 플래그와 함께 다른 스크립트를 사용했습니다. 둘 다 다음과 같이 하는 것 같습니다.

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

그런 다음 lightdm을 설치했습니다.

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

재부팅하고 작동했지만 Gnome에 다시 로그인하면 UI에 결함이 발생했습니다. 예를 들어 슈퍼 키를 누르면 앱 검색 상자가 표시되지만 프레임 버퍼 문제처럼 아이콘이 겹쳐지고 깜박이는 현상이 발생했습니다. 또한 lightdm은 왼쪽 하단에 Ubuntu 버전 21.04를 표시했습니다. 아직 21.10에서는 lightdm + gnome이 제대로 지원되지 않는 것 같습니다.

마지막으로 gdm3, gnome-shell 및 yaru 테마를 다시 설치하고 lightdm에서 다시 gdm으로 전환했습니다.

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

재부팅하면 모든 것이 다시 작동하지만 여전히 gdm3의 기본 배경 이미지는 동일합니다. 배경 이미지를 변경하려면 해킹이 필요하다는 것은 지루할 수 없는 일이지만, 여기까지입니다.

관련 정보