Fork gdm for now, SLFO needs another fix in gdm.pre #6

Merged
maxlin_factory merged 1 commits from maxlin_factory/Leap:leap-16.0 into leap-16.0 2025-08-29 12:43:39 +02:00
32 changed files with 8287 additions and 0 deletions

23
gdm/.gitattributes vendored Normal file
View File

@@ -0,0 +1,23 @@
## Default LFS
*.7z filter=lfs diff=lfs merge=lfs -text
*.bsp filter=lfs diff=lfs merge=lfs -text
*.bz2 filter=lfs diff=lfs merge=lfs -text
*.gem filter=lfs diff=lfs merge=lfs -text
*.gz filter=lfs diff=lfs merge=lfs -text
*.jar filter=lfs diff=lfs merge=lfs -text
*.lz filter=lfs diff=lfs merge=lfs -text
*.lzma filter=lfs diff=lfs merge=lfs -text
*.obscpio filter=lfs diff=lfs merge=lfs -text
*.oxt filter=lfs diff=lfs merge=lfs -text
*.pdf filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text
*.rpm filter=lfs diff=lfs merge=lfs -text
*.tbz filter=lfs diff=lfs merge=lfs -text
*.tbz2 filter=lfs diff=lfs merge=lfs -text
*.tgz filter=lfs diff=lfs merge=lfs -text
*.ttf filter=lfs diff=lfs merge=lfs -text
*.txz filter=lfs diff=lfs merge=lfs -text
*.whl filter=lfs diff=lfs merge=lfs -text
*.xz filter=lfs diff=lfs merge=lfs -text
*.zip filter=lfs diff=lfs merge=lfs -text
*.zst filter=lfs diff=lfs merge=lfs -text

1
gdm/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
.osc

View File

@@ -0,0 +1,12 @@
gdm_vars() {
case "${DISPLAYMANAGER##*/}" in
gdm|GDM|Gnome|GNOME)
RELOADSIGNAL="-USR1"
DISPLAYMANAGER=/usr/sbin/gdm
PIDFILE=/run/gdm/gdm.pid
return 0 ;;
*) return 1 ;;
esac
return 1
}

19
gdm/_service Normal file
View File

@@ -0,0 +1,19 @@
<?xml version="1.0"?>
<services>
<service name="obs_scm" mode="manual">
<param name="scm">git</param>
<param name="url">https://gitlab.gnome.org/GNOME/gdm.git</param>
<param name="revision">48.0</param>
<param name="versionformat">@PARENT_TAG@+@TAG_OFFSET@</param>
<param name="versionrewrite-pattern">(.*)\+0</param>
<param name="versionrewrite-replacement">\1</param>
<!-- <param name="changesgenerate">enable</param> -->
</service>
<service name="tar" mode="buildtime"/>
<service name="recompress" mode="buildtime">
<param name="file">*.tar</param>
<param name="compression">zst</param>
</service>
<service name="set_version" mode="manual" />
</services>

25
gdm/default.pa Normal file
View File

@@ -0,0 +1,25 @@
load-module module-device-restore
load-module module-card-restore
load-module module-udev-detect
load-module module-native-protocol-unix
load-module module-default-device-restore
load-module module-always-sink
load-module module-intended-roles
load-module module-suspend-on-idle
load-module module-console-kit
load-module module-position-event-sounds
### unload driver modules for Bluetooth hardware
### this ensure Bluetooth headset are not stolen by gdm pulseaudio instance
.nofail
.ifexists module-bluetooth-policy.so
unload-module module-bluetooth-policy
.endif
.ifexists module-bluetooth-discover.so
unload-module module-bluetooth-discover
.endif
.fail

View File

@@ -0,0 +1,11 @@
#%PAM-1.0
# GDM PAM configuration for autologin
auth requisite pam_nologin.so
auth required pam_permit.so
auth optional pam_gdm.so
auth optional pam_gnome_keyring.so
account include common-account
password include common-password
session required pam_loginuid.so
session optional pam_keyinit.so force revoke
session include common-session

14
gdm/gdm-autologin.pamd Normal file
View File

@@ -0,0 +1,14 @@
#%PAM-1.0
# GDM PAM configuration for autologin
auth requisite pam_nologin.so
auth required pam_permit.so
auth optional pam_gdm.so
auth optional pam_gnome_keyring.so
account substack common-account
account include postlogin-account
password substack common-password
password include postlogin-password
session required pam_loginuid.so
session optional pam_keyinit.so force revoke
session substack common-session
session include postlogin-session

View File

@@ -0,0 +1,31 @@
Index: gdm-45.0.1/daemon/gdm-display.c
===================================================================
--- gdm-45.0.1.orig/daemon/gdm-display.c
+++ gdm-45.0.1/daemon/gdm-display.c
@@ -1622,6 +1622,9 @@ wants_initial_setup (GdmDisplay *self)
gboolean enabled = FALSE;
gboolean forced = FALSE;
+ g_autofree gchar *release_name = NULL;
+ release_name = g_get_os_info (G_OS_INFO_KEY_NAME);
+
priv = gdm_display_get_instance_private (self);
if (already_done_initial_setup ()) {
@@ -1658,6 +1661,16 @@ wants_initial_setup (GdmDisplay *self)
return FALSE;
}
+ if (release_name == NULL) {
+ g_error ("GdmDisplay: Failed to parse os-release");
+ return enabled;
+ }
+
+ if (g_str_has_prefix (release_name, "SLE")) {
+ g_debug ("GdmDisplay: Disable gnome-initial-setup on SLE");
+ return FALSE;
+ }
+
return enabled;
}

View File

@@ -0,0 +1,16 @@
#%PAM-1.0
auth required pam_shells.so
auth requisite pam_nologin.so
auth requisite pam_faillock.so preauth
auth required pam_fprintd.so
auth optional pam_permit.so
auth [success=ok default=1] pam_gdm.so
auth optional pam_gnome_keyring.so
account include common-account
password required pam_deny.so
session include common-session
session optional pam_gnome_keyring.so auto_start

18
gdm/gdm-fingerprint.pamd Normal file
View File

@@ -0,0 +1,18 @@
#%PAM-1.0
auth required pam_shells.so
auth requisite pam_nologin.so
auth requisite pam_faillock.so preauth
auth required pam_fprintd.so
auth optional pam_permit.so
auth [success=ok default=1] pam_gdm.so
auth optional pam_gnome_keyring.so
account substack common-account
account include postlogin-account
password required pam_deny.so
session substack common-session
session include postlogin-session
session optional pam_gnome_keyring.so auto_start

View File

@@ -0,0 +1,42 @@
From bf711cfd86536971404974a48c4db7298bda0e06 Mon Sep 17 00:00:00 2001
From: Alynx Zhou <alynx.zhou@gmail.com>
Date: Tue, 1 Apr 2025 11:18:05 +0800
Subject: [PATCH] gdm-config: Add missing "/" when building dconf paths
Closes #978
---
meson.build | 2 +-
utils/gdm-config.c | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/meson.build b/meson.build
index eaa93a652..63be01011 100644
--- a/meson.build
+++ b/meson.build
@@ -222,7 +222,7 @@ endif
# dconf paths, we should fix dconf.pc to provide us more real data though
if dconf_dep.found()
dconf_prefix = dconf_dep.get_variable(pkgconfig: 'prefix')
- dconf_sysconfig = (dconf_prefix == '/usr') ? '/etc' : dconf_prefix + '/etc/'
+ dconf_sysconfig = (dconf_prefix == '/usr') ? '/etc' : dconf_prefix + '/etc'
dconf_datadir = dconf_prefix / 'share'
else
dconf_sysconfig = gdm_prefix / get_option('sysconfdir')
diff --git a/utils/gdm-config.c b/utils/gdm-config.c
index 70d5d4de9..82051a1b1 100644
--- a/utils/gdm-config.c
+++ b/utils/gdm-config.c
@@ -34,8 +34,8 @@
#include "gdm-common.h"
-#define DCONF_SYSCONFIG_PROFILES_PATH DCONF_SYSCONFIG "dconf/profile"
-#define DCONF_SYSCONFIG_DB_PATH DCONF_SYSCONFIG "dconf/db"
+#define DCONF_SYSCONFIG_PROFILES_PATH DCONF_SYSCONFIG "/dconf/profile"
+#define DCONF_SYSCONFIG_DB_PATH DCONF_SYSCONFIG "/dconf/db"
#define DCONF_SYSTEM_DB_PREFIX "system-db:"
#define DCONF_SYSTEM_DB_DEFAULT_NAME "gdm_auth_config"
--
GitLab

View File

@@ -0,0 +1,95 @@
Index: gdm-46.2/daemon/gdm-display.c
===================================================================
--- gdm-46.2.orig/daemon/gdm-display.c
+++ gdm-46.2/daemon/gdm-display.c
@@ -1538,12 +1538,12 @@ can_create_environment (const char *sess
return session_exists;
}
-#define ALREADY_RAN_INITIAL_SETUP_ON_THIS_BOOT GDM_RUN_DIR "/gdm.ran-initial-setup"
+#define BLOCK_INITIAL_SETUP LOCALSTATEDIR "/lib/gdm/block-initial-setup"
static gboolean
-already_done_initial_setup_on_this_boot (void)
+already_done_initial_setup (void)
{
- if (g_file_test (ALREADY_RAN_INITIAL_SETUP_ON_THIS_BOOT, G_FILE_TEST_EXISTS))
+ if (g_file_test (BLOCK_INITIAL_SETUP, G_FILE_TEST_EXISTS))
return TRUE;
return FALSE;
@@ -1625,7 +1625,7 @@ wants_initial_setup (GdmDisplay *self)
priv = gdm_display_get_instance_private (self);
- if (already_done_initial_setup_on_this_boot ()) {
+ if (already_done_initial_setup ()) {
return FALSE;
}
Index: gdm-46.2/daemon/gdm-manager.c
===================================================================
--- gdm-46.2.orig/daemon/gdm-manager.c
+++ gdm-46.2/daemon/gdm-manager.c
@@ -62,7 +62,7 @@
#define GDM_MANAGER_DISPLAYS_PATH GDM_DBUS_PATH "/Displays"
#define INITIAL_SETUP_USERNAME "gnome-initial-setup"
-#define ALREADY_RAN_INITIAL_SETUP_ON_THIS_BOOT GDM_RUN_DIR "/gdm.ran-initial-setup"
+#define BLOCK_INITIAL_SETUP LOCALSTATEDIR "/lib/gdm/block-initial-setup"
typedef struct
{
@@ -1847,6 +1847,7 @@ on_start_user_session (StartUserSessionO
gboolean fail_if_already_switched = TRUE;
GdmDisplay *display;
const char *session_id;
+ int fd = -1;
g_debug ("GdmManager: start or jump to session");
@@ -1889,22 +1890,21 @@ on_start_user_session (StartUserSessionO
"doing-initial-setup", &doing_initial_setup,
NULL);
+ fd = open(BLOCK_INITIAL_SETUP, O_RDONLY|O_CREAT|O_EXCL|O_NOFOLLOW|O_CLOEXEC, 0644);
+ if (fd == -1 && errno != EEXIST) {
+ g_warning ("GdmDisplay: Could not write initial-setup-done marker to %s: %s",
+ BLOCK_INITIAL_SETUP,
+ strerror(errno));
+ }
+ else {
+ close(fd);
+ }
+
g_object_ref (display);
if (doing_initial_setup) {
- g_autoptr(GError) error = NULL;
g_debug ("GdmManager: closing down initial setup display in background");
g_object_set (G_OBJECT (display), "status", GDM_DISPLAY_WAITING_TO_FINISH, NULL);
-
- if (!g_file_set_contents (ALREADY_RAN_INITIAL_SETUP_ON_THIS_BOOT,
- "1",
- 1,
- &error)) {
- g_warning ("GdmDisplay: Could not write initial-setup-done marker to %s: %s",
- ALREADY_RAN_INITIAL_SETUP_ON_THIS_BOOT,
- error->message);
- g_clear_error (&error);
- }
} else {
g_debug ("GdmManager: session has its display server, reusing our server for another login screen");
}
Index: gdm-46.2/daemon/meson.build
===================================================================
--- gdm-46.2.orig/daemon/meson.build
+++ gdm-46.2/daemon/meson.build
@@ -227,6 +227,7 @@ endif
gdm_daemon = executable('gdm',
[ gdm_daemon_sources, gdm_daemon_gen_sources ],
+ c_args: '-DLOCALSTATEDIR="'+get_option('localstatedir')+'"',
dependencies: gdm_daemon_deps,
include_directories: config_h_dir,
install: true,

View File

@@ -0,0 +1,7 @@
#%PAM-1.0
# GDM PAM configuration used only for the greeter session
auth required pam_permit.so
account required pam_permit.so
password include common-password
session optional pam_keyinit.so force revoke
session include common-session

View File

@@ -0,0 +1,13 @@
diff --git a/data/meson.build b/data/meson.build
index de8edd6..7a24d30 100644
--- a/data/meson.build
+++ b/data/meson.build
@@ -158,7 +158,7 @@ service_config.set('sbindir', gdm_prefix / get_option('sbindir'))
service_config.set('GDM_INITIAL_VT', get_option('initial-vt'))
service_config.set('LANG_CONFIG_FILE', lang_config_file)
if plymouth_dep.found()
- service_config.set('PLYMOUTH_QUIT_SERVICE', 'plymouth-quit.service')
+ service_config.set('PLYMOUTH_QUIT_SERVICE', 'plymouth-quit.service plymouth-quit-wait.service')
else
service_config.set('PLYMOUTH_QUIT_SERVICE', '')
endif

2
gdm/gdm-rpmlintrc Normal file
View File

@@ -0,0 +1,2 @@
setBadness('polkit-file-unauthorized', 100)
setBadness('dbus-file-digest-mismatch', 100)

View File

@@ -0,0 +1,10 @@
--- a/data/meson.build
+++ b/data/meson.build
@@ -77,7 +77,6 @@ gdm_gnome_session_required_components =
'org.gnome.SettingsDaemon.Sharing',
'org.gnome.SettingsDaemon.Smartcard',
'org.gnome.SettingsDaemon.Sound',
- 'org.gnome.SettingsDaemon.Wacom',
]
gdm_gnome_user_session_wanted_components = gdm_gnome_session_required_components

View File

@@ -0,0 +1,52 @@
From a5f9f274c9c902519336a489cfed0548206d2bca Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
Date: Mon, 27 Jan 2025 14:01:23 +0100
Subject: [PATCH] gdm-settings-utils: rename variable to fix build with gcc 15
In GNU23 C++, bool is a keyword. Rename the variable to avoid syntax error.
---
common/gdm-settings-utils.c | 8 ++++----
common/gdm-settings-utils.h | 2 +-
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/common/gdm-settings-utils.c b/common/gdm-settings-utils.c
index 636be3a9e..da4c7aefb 100644
--- a/common/gdm-settings-utils.c
+++ b/common/gdm-settings-utils.c
@@ -287,16 +287,16 @@ gdm_settings_parse_boolean_as_value (gboolean boolval)
/* adapted from GKeyFile */
gboolean
gdm_settings_parse_value_as_boolean (const char *value,
- gboolean *bool)
+ gboolean *boolval)
{
g_return_val_if_fail (value != NULL, FALSE);
- g_return_val_if_fail (bool != NULL, FALSE);
+ g_return_val_if_fail (boolval != NULL, FALSE);
if (g_ascii_strcasecmp (value, "true") == 0 || strcmp (value, "1") == 0) {
- *bool = TRUE;
+ *boolval = TRUE;
return TRUE;
} else if (g_ascii_strcasecmp (value, "false") == 0 || strcmp (value, "0") == 0) {
- *bool = FALSE;
+ *boolval = FALSE;
return TRUE;
} else {
return FALSE;
diff --git a/common/gdm-settings-utils.h b/common/gdm-settings-utils.h
index 4f2362ce7..734d625c7 100644
--- a/common/gdm-settings-utils.h
+++ b/common/gdm-settings-utils.h
@@ -44,7 +44,7 @@ gboolean gdm_settings_parse_schemas (const char *fil
GSList **list);
gboolean gdm_settings_parse_value_as_boolean (const char *value,
- gboolean *bool);
+ gboolean *boolval);
gboolean gdm_settings_parse_value_as_integer (const char *value,
int *intval);
gboolean gdm_settings_parse_value_as_double (const char *value,
--
GitLab

9
gdm/gdm-sle.pamd Normal file
View File

@@ -0,0 +1,9 @@
#%PAM-1.0
# GDM PAM standard configuration (with passwords)
auth requisite pam_nologin.so
auth include common-auth
account include common-account
password include common-password
session required pam_loginuid.so
session optional pam_keyinit.so force revoke
session include common-session

View File

@@ -0,0 +1,16 @@
#%PAM-1.0
auth requisite pam_faillock.so preauth
auth required pam_pkcs11.so wait_for_card card_only
auth required pam_shells.so
auth requisite pam_nologin.so
auth optional pam_permit.so
auth [success=ok default=1] pam_gdm.so
auth optional pam_gnome_keyring.so
account include common-account
password required pam_deny.so
session include common-session
session optional pam_gnome_keyring.so auto_start

18
gdm/gdm-smartcard.pamd Normal file
View File

@@ -0,0 +1,18 @@
#%PAM-1.0
auth requisite pam_faillock.so preauth
auth required pam_pkcs11.so wait_for_card card_only
auth required pam_shells.so
auth requisite pam_nologin.so
auth optional pam_permit.so
auth [success=ok default=1] pam_gdm.so
auth optional pam_gnome_keyring.so
account substack common-account
account include postlogin-account
password required pam_deny.so
session substack common-session
session include postlogin-session
session optional pam_gnome_keyring.so auto_start

View File

@@ -0,0 +1,61 @@
diff --git a/data/Init.in b/data/Init.in
index ec6fd395..4b8ed8ce 100644
--- a/data/Init.in
+++ b/data/Init.in
@@ -1,4 +1,11 @@
#!/bin/sh
+
+if test -x /etc/X11/xdm/Xsetup; then
+ exec /etc/X11/xdm/Xsetup
+elif test -x /usr/etc/X11/xdm/Xsetup; then
+ exec /usr/etc/X11/xdm/Xsetup
+fi
+
# Stolen from the debian kdm setup, aren't I sneaky
# Plus a lot of fun stuff added
# -George
diff --git a/data/PostSession.in b/data/PostSession.in
index c52d3c26..4d94b3e7 100755
--- a/data/PostSession.in
+++ b/data/PostSession.in
@@ -1,3 +1,9 @@
#!/bin/sh
+if test -x /etc/X11/xdm/Xreset; then
+ exec /etc/X11/xdm/Xreset
+elif test -x /usr/etc/X11/xdm/Xreset; then
+ exec /usr/etc/X11/xdm/Xreset
+fi
+
exit 0
diff --git a/data/PreSession.in b/data/PreSession.in
index cfabee75..306a905e 100755
--- a/data/PreSession.in
+++ b/data/PreSession.in
@@ -6,4 +6,10 @@
#
# Note that output goes into the .xsession-errors file for easy debugging
#
+if test -x /etc/X11/xdm/Xstartup; then
+ exec /etc/X11/xdm/Xstartup
+elif test -x /usr/etc/X11/xdm/Xstartup; then
+ exec /usr/etc/X11/xdm/Xstartup
+fi
+
PATH="@X_PATH@:$PATH"
diff --git a/data/Xsession.in b/data/Xsession.in
index 9d79558c..bcefdd73 100755
--- a/data/Xsession.in
+++ b/data/Xsession.in
@@ -1,4 +1,11 @@
#!@XSESSION_SHELL@
+
+if test -x /etc/X11/xdm/Xsession; then
+ exec /etc/X11/xdm/Xsession $1 $GDM_LANG
+elif test -x /usr/etc/X11/xdm/Xsession; then
+ exec /usr/etc/X11/xdm/Xsession $1 $GDM_LANG
+fi
+
#
# This is SORT OF LIKE an X session, but not quite. You get a command as the
# first argument (it could be multiple words, so run it with "eval"). As a

View File

@@ -0,0 +1,66 @@
--- a/daemon/main.c
+++ b/daemon/main.c
@@ -61,6 +61,31 @@ static GdmSettings *settings =
static uid_t gdm_uid = -1;
static gid_t gdm_gid = -1;
+#define SHELLSCRIPT "\
+/bin/bash -c \
+\'PROCESS=\"X Xwayland plymouth\";\
+R=$(pidof $PROCESS);\
+while [ $? == 0 ];\
+do sleep 1;\
+ R=$(pidof $PROCESS);\
+done;\
+systemd-cat echo Switch to tty1 Successfully;\
+/usr/bin/chvt 1\'\
+"
+
+static void
+jump_to_tty1 ()
+{
+ g_autoptr(GError) error = NULL;
+
+ g_debug ("Spawn jump to tty1 process");
+ g_spawn_command_line_async (SHELLSCRIPT,
+ &error);
+
+ if (error != NULL)
+ g_warning ("Error chvt to tty1: %s", error->message);
+}
+
static gboolean
timed_exit_cb (GMainLoop *loop)
{
@@ -263,6 +288,12 @@ on_shutdown_signal_cb (gpointer user_dat
return FALSE;
}
+static void
+on_signal_term_cb (int signal)
+{
+ g_debug ("Received SIGTERM again");
+}
+
static gboolean
on_sighup_cb (gpointer user_data)
{
@@ -387,6 +418,7 @@ main (int argc,
g_main_loop_run (main_loop);
g_debug ("GDM finished, cleaning up...");
+ signal (SIGTERM, on_signal_term_cb);
g_clear_object (&manager);
g_clear_object (&settings);
@@ -394,6 +426,10 @@ main (int argc,
gdm_settings_direct_shutdown ();
gdm_log_shutdown ();
+ jump_to_tty1 ();
+
+ g_debug ("GDM finished");
+
g_main_loop_unref (main_loop);
return EXIT_SUCCESS;

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,96 @@
diff --git a/common/gdm-common.c b/common/gdm-common.c
index 4f56a05..019971a 100644
--- a/common/gdm-common.c
+++ b/common/gdm-common.c
@@ -655,6 +655,8 @@ gdm_get_script_environment (const char *username,
if (display_hostname) {
g_hash_table_insert (hash, g_strdup ("REMOTE_HOST"), g_strdup (display_hostname));
+ } else {
+ g_hash_table_insert (hash, g_strdup ("XAUTHLOCALHOSTNAME"), gdm_gethostname ());
}
/* Runs as root */
@@ -1120,3 +1122,14 @@ gdm_load_env_d (GdmLoadEnvVarFunc load_env_func,
gdm_load_env_dir (dir, load_env_func, expand_func, user_data);
g_object_unref (dir);
}
+
+char *
+gdm_gethostname (void)
+{
+ char localhost[HOST_NAME_MAX + 1] = "";
+ if (gethostname (localhost, HOST_NAME_MAX) == 0) {
+ return g_strdup (localhost);
+ } else {
+ return g_strdup ("localhost");
+ }
+}
diff --git a/common/gdm-common.h b/common/gdm-common.h
index cffefe1..b769021 100644
--- a/common/gdm-common.h
+++ b/common/gdm-common.h
@@ -70,6 +70,7 @@ char *gdm_generate_random_bytes (gsize size,
gboolean gdm_get_login_window_session_id (const char *seat_id,
char **session_id);
+char *gdm_gethostname (void);
gboolean gdm_goto_login_session (GCancellable *cancellable,
GError **error);
diff --git a/daemon/gdm-display-access-file.c b/daemon/gdm-display-access-file.c
index 291c163..9a4ed4a 100644
--- a/daemon/gdm-display-access-file.c
+++ b/daemon/gdm-display-access-file.c
@@ -432,13 +432,10 @@ _get_auth_info_for_display (GdmDisplayAccessFile *file,
*
* https://bugs.freedesktop.org/show_bug.cgi?id=43425
*/
- char localhost[_POSIX_HOST_NAME_MAX + 1] = "";
*family = FamilyLocal;
- if (gethostname (localhost, _POSIX_HOST_NAME_MAX) == 0) {
- *address = g_strdup (localhost);
- } else {
- *address = g_strdup ("localhost");
- }
+ /* using the new function we create in the patch, to detect
+ * changes here, in the original code */
+ *address = gdm_gethostname ();
} else {
*family = FamilyWild;
gdm_display_get_remote_hostname (display, address, NULL);
diff --git a/daemon/gdm-launch-environment.c b/daemon/gdm-launch-environment.c
index bea2f93..18f8f5a 100644
--- a/daemon/gdm-launch-environment.c
+++ b/daemon/gdm-launch-environment.c
@@ -221,6 +221,11 @@ build_launch_environment (GdmLaunchEnvironment *launch_environment,
g_hash_table_insert (hash, g_strdup ("GDM_SEAT_ID"), g_strdup (seat_id));
}
+ if (launch_environment->x11_display_is_local) {
+ g_hash_table_remove (hash, "XAUTHLOCALHOSTNAME");
+ g_hash_table_insert (hash, g_strdup ("XAUTHLOCALHOSTNAME"), gdm_gethostname ());
+ }
+
g_hash_table_insert (hash, g_strdup ("RUNNING_UNDER_GDM"), g_strdup ("true"));
/* Now populate XDG_DATA_DIRS from env.d if we're running initial setup; this allows
diff --git a/daemon/gdm-session.c b/daemon/gdm-session.c
index 33dee76..e5a228e 100644
--- a/daemon/gdm-session.c
+++ b/daemon/gdm-session.c
@@ -2956,6 +2956,14 @@ set_up_session_environment (GdmSession *self)
}
}
+ if (self->display_is_local) {
+ char *hostname = gdm_gethostname ();
+ gdm_session_set_environment_variable (self,
+ "XAUTHLOCALHOSTNAME",
+ hostname);
+ g_free (hostname);
+ }
+
if (g_getenv ("WINDOWPATH") != NULL) {
gdm_session_set_environment_variable (self,
"WINDOWPATH",

6038
gdm/gdm.changes Normal file

File diff suppressed because it is too large Load Diff

4
gdm/gdm.obsinfo Normal file
View File

@@ -0,0 +1,4 @@
name: gdm
version: 48.0
mtime: 1742227635
commit: 2397f037d9075a6f98f43c6c2cbaacf923e82b6b

13
gdm/gdm.pamd Normal file
View File

@@ -0,0 +1,13 @@
#%PAM-1.0
# GDM PAM standard configuration (with passwords)
auth requisite pam_nologin.so
auth substack common-auth
auth include postlogin-auth
account substack common-account
account include postlogin-account
password substack common-password
password include postlogin-password
session required pam_loginuid.so
session optional pam_keyinit.so force revoke
session substack common-session
session include postlogin-session

505
gdm/gdm.spec Normal file
View File

@@ -0,0 +1,505 @@
#
# spec file for package gdm
#
# Copyright (c) 2025 SUSE LLC and contributors
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
# Please submit bugfixes or comments via https://bugs.opensuse.org/
#
%define enable_split_authentication 1
# special hack for SLE15/Leap 15: it does not yet know /usr/etc, and files in /etc should be %%config
%if 0%{?suse_version} >= 1550
%define _config_norepl %nil
%else
%define _pam_vendordir %{_sysconfdir}/pam.d
%define _config_norepl %config(noreplace)
%endif
Name: gdm
Version: 48.0
Release: 0
Summary: The GNOME Display Manager
License: GPL-2.0-or-later
Group: System/GUI/GNOME
URL: https://wiki.gnome.org/Projects/GDM
Source0: %{name}-%{version}.tar.zst
Source1: gdm.pamd
Source2: gdm-autologin.pamd
Source3: gdm-launch-environment.pamd
Source4: gdm-fingerprint.pamd
Source5: gdm-smartcard.pamd
# gdmflexiserver wrapper, to enable other display managers to abuse the gdmflexiserver namespace (like lightdm)
Source6: gdmflexiserver-wrapper
# /etc/xinit.d/xdm integration script
Source7: X11-displaymanager-gdm
# Use tmpfiles to create directories under /var to support transactional updates
Source9: gdm.tmpfiles
# Use reserveVT.conf to make autologin user session not to select tty1
Source10: reserveVT.conf
# Use sysusers to create gdm system user
Source11: gdm.sysusers
# PAM configuration files for SLE15 and older
Source12: gdm-sle.pamd
Source13: gdm-autologin-sle.pamd
Source14: gdm-fingerprint-sle.pamd
Source15: gdm-smartcard-sle.pamd
# Configuration for pulseaudio
Source20: default.pa
Source99: gdm-rpmlintrc
# WARNING: do not remove/significantly change patch0 without updating the relevant patch in accountsservice too
# PATCH-FIX-OPENSUSE gdm-s390-not-require-g-s-d_wacom.patch bsc#1129412 yfjiang@suse.com -- Remove the runtime requirement of g-s-d Wacom plugin
Patch0: gdm-s390-not-require-g-s-d_wacom.patch
# PATCH-FIX-OPENSUSE gdm-sysconfig-settings.patch bnc432360 bsc#919723 hpj@novell.com -- Read autologin options from /etc/sysconfig/displaymanager; note that accountsservice has a similar patch (accountsservice-sysconfig.patch)
Patch1: gdm-sysconfig-settings.patch
# PATCH-FIX-OPENSUSE gdm-suse-xsession.patch vuntz@novell.com -- Use the /etc/X11/xdm/* scripts
Patch2: gdm-suse-xsession.patch
# PATCH-FIX-OPENSUSE gdm-xauthlocalhostname.patch bnc#538064 vuntz@novell.com -- Set XAUTHLOCALHOSTNAME to current hostname when we authenticate, for local logins, to avoid issues in the session in case the hostname changes later one. See comment 24 in the bug.
Patch4: gdm-xauthlocalhostname.patch
# PATCH-FIX-OPENSUSE gdm-switch-to-tty1.patch bsc#1113700 xwang@suse.com -- switch to tty1 when stopping gdm service
Patch5: gdm-switch-to-tty1.patch
# PATCH-FIX-OPENSUSE gdm-initial-setup-hardening.patch boo#1140851, glgo#GNOME/gnome-initial-setup#76 fezhang@suse.com -- Prevent gnome-initial-setup running if any regular user has perviously logged into the system
Patch6: gdm-initial-setup-hardening.patch
# PATCH-FIX-UPSTREAM gdm-settings-utils_rename-variable.patch -- Rename variable to fix build with gcc 15
Patch7: gdm-settings-utils_rename-variable.patch
# PATCH-FIX-UPSTREAM gdm-fix-wrong-path-gdm-config.patch bsc#1232669, glgo#GNOME/gdm!282 alynx.zhou@suse.com -- Add missing slash when gdm-config building dconf database path
Patch8: gdm-fix-wrong-path-gdm-config.patch
# PATCH-FIX-UPSTREAM gdm-plymouth-quit-wait.patch bsc#1243439 xwang@suse.com -- Disable plymouth-quit-wait.service
Patch9: gdm-plymouth-quit-wait.patch
### NOTE: Keep please SLE-only patches at bottom (starting on 1000).
# PATCH-FIX-SLE gdm-disable-gnome-initial-setup.patch bnc#1067976 qzhao@suse.com -- Disable gnome-initial-setup runs before gdm, g-i-s will only serve for CJK people to choose the input-method after login.
Patch1000: gdm-disable-gnome-initial-setup.patch
BuildRequires: /usr/bin/dbus-run-session
BuildRequires: check-devel
# dconf and gnome-session-core are needed for directory ownership
BuildRequires: dconf
BuildRequires: fdupes
BuildRequires: gnome-session-core
BuildRequires: itstool
BuildRequires: meson >= 0.57
BuildRequires: pam-devel
BuildRequires: pkgconfig
BuildRequires: sysuser-shadow
BuildRequires: sysuser-tools
BuildRequires: tcpd-devel
BuildRequires: xorg-x11-server
BuildRequires: xorg-x11-server-extra
BuildRequires: pkgconfig(accountsservice) >= 0.6.35
BuildRequires: pkgconfig(audit)
BuildRequires: pkgconfig(check)
BuildRequires: pkgconfig(gio-2.0) >= 2.56.0
BuildRequires: pkgconfig(gio-unix-2.0) >= 2.56.0
BuildRequires: pkgconfig(glib-2.0) >= 2.56.0
BuildRequires: pkgconfig(gobject-2.0) >= 2.56.0
BuildRequires: pkgconfig(gobject-introspection-1.0) >= 0.9.12
BuildRequires: pkgconfig(gthread-2.0)
BuildRequires: pkgconfig(gtk+-3.0) >= 2.91.1
BuildRequires: pkgconfig(gudev-1.0) >= 232
BuildRequires: pkgconfig(iso-codes)
BuildRequires: pkgconfig(json-glib-1.0)
BuildRequires: pkgconfig(libkeyutils)
BuildRequires: pkgconfig(libsystemd)
BuildRequires: pkgconfig(ply-boot-client)
BuildRequires: pkgconfig(x11)
BuildRequires: pkgconfig(xau)
BuildRequires: pkgconfig(xcb)
BuildRequires: pkgconfig(xdmcp)
BuildRequires: pkgconfig(xi)
BuildRequires: pkgconfig(xinerama)
BuildRequires: pkgconfig(xrandr)
Requires: %{_bindir}/dbus-run-session
Requires: %{name}-branding = %{version}
Requires: gdmflexiserver
Requires: gnome-session-core
Requires: gnome-settings-daemon
Requires: gnome-shell
# xdm package ships systemd display-manager service and other common scripts
# between display managers (bsc#1084655)
Requires: (gdm-xdm-integration or gdm-systemd)
%if !0%{?is_opensuse} || 0%{?suse_version} <= 1600
Suggests: gdm-systemd
%else
Suggests: gdm-xdm-integration
%endif
Requires(post): dconf
Requires(pre): group(video)
Recommends: iso-codes
# accessibility
Recommends: orca
# smartcard login
Recommends: pam_pkcs11
DocDir: %{_defaultdocdir}
%ifnarch s390 s390x
BuildRequires: pkgconfig(xorg-server)
%endif
%sysusers_requires
%description
The GNOME Display Manager is a system service that is responsible for
providing graphical log-ins and managing local and remote displays.
%package -n libgdm1
Summary: Client Library for Communicating with GDM Greeter Server
Group: System/Libraries
Requires: %{name}-schema
Recommends: gdm
%description -n libgdm1
The GNOME Display Manager is a system service that is responsible for
providing graphical log-ins and managing local and remote displays.
%package -n typelib-1_0-Gdm-1_0
Summary: Introspection bindings for gdm
Group: System/Libraries
%description -n typelib-1_0-Gdm-1_0
The GNOME Display Manager is a system service that is responsible for
providing graphical log-ins and managing local and remote displays.
This package provides the GObject Introspection bindings for
communicating with the GDM greeter server.
%package schema
Summary: Config schema for GDM
Group: System/Libraries
BuildArch: noarch
%description schema
The GNOME Display Manager is a system service that is responsible for
providing graphical log-ins and managing local and remote displays.
%package devel
Summary: Libraries for GDM -- Development Files
Group: Development/Libraries/GNOME
Requires: libgdm1 = %{version}
Requires: typelib-1_0-Gdm-1_0 = %{version}
%description devel
The GNOME Display Manager is a system service that is responsible for
providing graphical log-ins and managing local and remote displays.
%package branding-upstream
Summary: The GNOME Display Manager -- Upstream default configuration
Group: System/GUI/GNOME
Requires: %{name} = %{version}
Supplements: (%{name} and branding-upstream)
Conflicts: %{name}-branding
Provides: %{name}-branding = %{version}
BuildArch: noarch
#BRAND: Provide one file:
#BRAND: /etc/gdm/custom.conf
#BRAND: Default configuration of gdm
%description branding-upstream
The GNOME Display Manager is a system service that is responsible for
providing graphical log-ins and managing local and remote displays.
This package provides the upstream default configuration for gdm.
%package xdm-integration
Summary: GDM integration into the xdm wrapper script
Group: System/GUI/GNOME
Requires: gdm
Requires: xdm
Requires(post): update-alternatives
Requires(postun): update-alternatives
BuildArch: noarch
%description xdm-integration
GDM's XDM wrapper integration
By default openSUSE uses xdm which enables the DM based on sysconfig.
%package systemd
Summary: Systemd gdm.service file
Group: System/GUI/GNOME
Requires: gdm
# Upgrade xdm first if installed - to run systemd DM migration
Requires(pre): (xdm >= 1.1.17 if xdm)
BuildArch: noarch
%description systemd
GDM's systemd service file.
By default openSUSE uses xdm which enables the DM based on sysconfig.
This package is only needed if the system administrator wishes to use
'systemctl' instead of openSUSE's default 'update-alternatives' method.
%package -n gdmflexiserver
Summary: Compatibility Wrapper for Display Managers
Group: System/GUI/GNOME
Suggests: gdm
BuildArch: noarch
%description -n gdmflexiserver
The GDMFlexiServer tool interacts with the display manager to
enable fast user switching. This package contains a wrapper that
selects the correct Gdmflexiserver implementation, based on the
running display manager.
%lang_package
%prep
%autosetup -N
### NON-SLE patches start from 0 to 999
%autopatch -p1 -m 1 -M 999
%ifarch s390 s390x
%patch -P 0 -p1
%endif
### SLE and Leap only patches start at 1000
%if !0%{?is_opensuse} || 0%{?suse_version} <= 1600
## Use this when there's no need to skip patches.
%autopatch -p1 -m 1000
%endif
%build
%meson \
--libexecdir=%{_libexecdir}/gdm \
-Dat-spi-registryd-dir=%{_libexecdir}/at-spi \
-Dgdm-xsession=true \
-Dgnome-settings-daemon-dir=%{_libexecdir}/gnome-settings-daemon-3.0 \
-Dinitial-vt=7 \
-Dipv6=true \
-Dpam-mod-dir=%{_pam_moduledir} \
-Ddbus-sys=%{_datadir}/dbus-1/system.d \
-Ddistro=generic \
-Dplymouth=enabled \
-Drun-dir=/run/gdm \
%if %{enable_split_authentication}
-Dsplit-authentication=true \
%else
-Dsplit-authentication=false \
%endif
-Dudev-dir=%{_udevrulesdir} \
-Dwayland-support=true \
%if !0%{?is_opensuse} || 0%{?suse_version} <= 1600
-Dx11-support=false \
%endif
%nil
%meson_build
%sysusers_generate_pre %{SOURCE11} gdm gdm.conf
%install
%meson_install
## Install PAM files.
mkdir -p %{buildroot}%{_pam_vendordir}
# Pam config for the greeter session
cp %{SOURCE3} %{buildroot}%{_pam_vendordir}/gdm-launch-environment
%if 0%{?suse_version} >= 1550
# Generic pam config
cp %{SOURCE1} %{buildroot}%{_pam_vendordir}/gdm
# Pam config for autologin
cp %{SOURCE2} %{buildroot}%{_pam_vendordir}/gdm-autologin
%if %{enable_split_authentication}
# Pam config for fingerprint authentication
cp %{SOURCE4} %{buildroot}%{_pam_vendordir}/gdm-fingerprint
# Pam config for smartcard authentication
cp %{SOURCE5} %{buildroot}%{_pam_vendordir}/gdm-smartcard
%endif
%else
# Generic pam config
cp %{SOURCE12} %{buildroot}%{_pam_vendordir}/gdm
# Pam config for autologin
cp %{SOURCE13} %{buildroot}%{_pam_vendordir}/gdm-autologin
%if %{enable_split_authentication}
# Pam config for fingerprint authentication
cp %{SOURCE14} %{buildroot}%{_pam_vendordir}/gdm-fingerprint
# Pam config for smartcard authentication
cp %{SOURCE15} %{buildroot}%{_pam_vendordir}/gdm-smartcard
%endif
%endif
# The default gdm pam configuration is the one to be used as pam-password too
ln -s gdm %{buildroot}%{_pam_vendordir}/gdm-password
## Install other files
# Install PostLogin script.
mv %{buildroot}%{_sysconfdir}/gdm/PostLogin/Default.sample %{buildroot}%{_sysconfdir}/gdm/PostLogin/Default
# Move gdmflexiserver to libexecdir and replace it with the compatibility wrapper
mv %{buildroot}%{_bindir}/gdmflexiserver %{buildroot}%{_libexecdir}/gdm/gdmflexiserver
install -m 755 %{SOURCE6} %{buildroot}%{_bindir}/gdmflexiserver
sed -e 's-@LIBEXECDIR@-%{_libexecdir}-g' -i %{buildroot}%{_bindir}/gdmflexiserver
#Install /etc/xinit.d/xdm integration script
install -D -m 644 %{SOURCE7} %{buildroot}%{_prefix}/lib/X11/displaymanagers/gdm
mkdir -p %{buildroot}%{_sysconfdir}/alternatives
touch %{buildroot}%{_sysconfdir}/alternatives/default-displaymanager
ln -s %{_sysconfdir}/alternatives/default-displaymanager %{buildroot}%{_prefix}/lib/X11/displaymanagers/default-displaymanager
# Install other files
mkdir -p %{buildroot}/run/gdm
mkdir -p %{buildroot}%{_bindir}
ln -s ../sbin/gdm %{buildroot}%{_bindir}/gdm
mkdir -p %{buildroot}%{_tmpfilesdir}
install -m 644 %{SOURCE9} %{buildroot}%{_tmpfilesdir}/gdm.conf
%if !0%{?is_opensuse} || 0%{?suse_version} <= 1600
sed -e '#/var/lib/gdm/\.pulse#d' -i %{buildroot}%{_tmpfilesdir}/gdm.conf
%endif
mkdir -p %{buildroot}%{_prefix}/lib/systemd/logind.conf.d
install -m 644 %{SOURCE10} %{buildroot}%{_prefix}/lib/systemd/logind.conf.d/reserveVT.conf
mkdir -p %{buildroot}%{_sysusersdir}
install -m 644 %{SOURCE11} %{buildroot}%{_sysusersdir}/gdm.conf
%if 0%{?is_opensuse} && 0%{?suse_version} > 1600
install -D -m 644 %{SOURCE20} %{buildroot}%{_prefix}/share/factory/var/lib/gdm/.pulse/default.pa
%endif
%find_lang %{name} %{?no_lang_C}
%fdupes -s %{buildroot}%{_datadir}/help
%check
%meson_test
%pre -f gdm.pre
if [ $1 -gt 1 ]; then
if [ "$(systemctl is-enabled display-manager-legacy)" = "enabled" -a -x /usr/sbin/update-alternatives ]; then
if [ "$(update-alternatives --query default-displaymanager | awk '/Value:/ {print $2}')" = "/usr/lib/X11/displaymanagers/gdm" ]; then
touch /var/tmp/migrate_to_gdm
fi
fi
fi
%post
%tmpfiles_create gdm.conf
%post xdm-integration
%{_sbindir}/update-alternatives --install %{_prefix}/lib/X11/displaymanagers/default-displaymanager \
default-displaymanager %{_prefix}/lib/X11/displaymanagers/gdm 25
%posttrans
# Create dconf database for gdm, to lockdown the gdm session
dconf update
%postun xdm-integration
[ -f %{_prefix}/lib/X11/displaymanagers/gdm ] || %{_sbindir}/update-alternatives \
--remove default-displaymanager %{_prefix}/lib/X11/displaymanagers/gdm
%pre systemd
%service_add_pre gdm.service
%post systemd
%service_add_post gdm.service
%preun systemd
%service_del_preun gdm.service
%postun systemd
%dnl do not restart gdm.service, as we might lose the graphical session we're in
%service_del_postun_without_restart gdm.service
%posttrans systemd
%dnl migrate a system that still uses xdm abstraction as display manager to gdm
%dnl part of https://en.opensuse.org/openSUSE:DisplayManagerRework
if [ "$(systemctl is-enabled display-manager-legacy)" = "enabled" ]; then
# display-manager is currently 'legacy mode' - if migration has already occured
# the above command would return 'disabled'
if [ -x /usr/sbin/update-alternatives ]; then
if [ "$(update-alternatives --query default-displaymanager | awk '/Value:/ {print $2}')" = "/usr/lib/X11/displaymanagers/gdm" ] || [ -f /var/tmp/migrate_to_gdm ]; then
# the display-manager started by xdm is currently gdm - let's switch to the native service
# this only force-enables gdm whenever xdm was enabled AND it was uses as wrapper to start gdm
systemctl enable --force gdm.service
unlink /var/tmp/migrate_to_gdm
fi
fi
fi
%ldconfig_scriptlets -n libgdm1
%files
%license COPYING
%doc AUTHORS NEWS README.md
%doc %{_datadir}/help/C/%{name}/
%dir %config %{_sysconfdir}/gdm
%config %{_sysconfdir}/gdm/[IPXl]*
%{_sbindir}/gdm
%{_bindir}/gdm
%{_bindir}/gdm-config
%dir %{_datadir}/dconf
%dir %{_datadir}/dconf/profile
%{_datadir}/dconf/profile/gdm
%if 0%{?is_opensuse} && 0%{?suse_version} > 1600
%dir %{_datadir}/factory/var
%dir %{_datadir}/factory/var/lib
%{_datadir}/factory/var/lib/gdm
%endif
%{_datadir}/gdm/
%{_datadir}/gnome-session/sessions/gnome-login.session
%{_pam_moduledir}/pam_gdm.so
%dir %{_libexecdir}/gdm
%{_libexecdir}/gdm/gdm-*
%{_libexecdir}/gdm/gdmflexiserver
%ghost %attr(750,gdm,gdm) %dir %{_localstatedir}/lib/gdm
%if 0%{?is_opensuse} && 0%{?suse_version} > 1600
%attr(0700, gdm, gdm) %ghost %dir %{_localstatedir}/lib/gdm/.pulse
%attr(0600, gdm, gdm) %ghost %{_localstatedir}/lib/gdm/.pulse/default.pa
%endif
%ghost %attr(711,root,gdm) %dir %{_localstatedir}/log/gdm
%ghost %attr(1755,root,root) /var/cache/gdm
%ghost %attr(711,root,gdm) %dir /run/gdm
%_config_norepl %{_pam_vendordir}/gdm
%_config_norepl %{_pam_vendordir}/gdm-autologin
%if %{enable_split_authentication}
%_config_norepl %{_pam_vendordir}/gdm-fingerprint
%_config_norepl %{_pam_vendordir}/gdm-smartcard
%endif
%_config_norepl %{_pam_vendordir}/gdm-password
%_config_norepl %{_pam_vendordir}/gdm-launch-environment
%{_datadir}/dbus-1/system.d/gdm.conf
%if 0%{?is_opensuse} && 0%{?suse_version} > 1600
%{_udevrulesdir}/61-gdm.rules
%endif
%{_datadir}/polkit-1/rules.d/20-gdm.rules
%{_tmpfilesdir}/gdm.conf
%{_sysusersdir}/gdm.conf
%dir %{_prefix}/lib/systemd/logind.conf.d
%{_prefix}/lib/systemd/logind.conf.d/reserveVT.conf
%dir %{_userunitdir}/gnome-session@gnome-login.target.d
%{_userunitdir}/gnome-session@gnome-login.target.d/session.conf
%files xdm-integration
# /etc/xinit.d/xdm integration
%dir %{_prefix}/lib/X11/displaymanagers
%{_prefix}/lib/X11/displaymanagers/default-displaymanager
%{_prefix}/lib/X11/displaymanagers/gdm
%ghost %{_sysconfdir}/alternatives/default-displaymanager
%files -n libgdm1
%{_libdir}/libgdm.so.*
%files -n typelib-1_0-Gdm-1_0
%{_libdir}/girepository-1.0/Gdm-1.0.typelib
%files schema
%{_datadir}/glib-2.0/schemas/org.gnome.login-screen.gschema.xml
%files devel
%{_includedir}/gdm/
%{_libdir}/libgdm.so
%{_libdir}/pkgconfig/gdm.pc
%{_libdir}/pkgconfig/gdm-pam-extensions.pc
%{_datadir}/gir-1.0/Gdm-1.0.gir
%files branding-upstream
%config(noreplace) %{_sysconfdir}/gdm/custom.conf
%files systemd
%{_unitdir}/gdm.service
%files -n gdmflexiserver
%{_bindir}/gdmflexiserver
%files lang -f %{name}.lang
%changelog

3
gdm/gdm.sysusers Normal file
View File

@@ -0,0 +1,3 @@
# Type Name ID GECOS Home
u gdm - "Gnome Display Manager daemon" /var/lib/gdm
m gdm video

6
gdm/gdm.tmpfiles Normal file
View File

@@ -0,0 +1,6 @@
d /var/lib/gdm 0750 gdm gdm -
d /var/lib/gdm/.pulse 0700 gdm gdm -
C /var/lib/gdm/.pulse/default.pa 0600 gdm gdm - /usr/share/factory/var/lib/gdm/.pulse/default.pa
d /var/log/gdm 0711 root gdm -
d /var/cache/gdm 1755 root root -
d /run/gdm 0711 root gdm -

View File

@@ -0,0 +1,8 @@
#!/bin/sh
if test ! -x "${GDMFLEXISERVER:-@LIBEXECDIR@/gdm/gdmflexiserver}"; then
echo "No gdmflexiserver implementation found. Maybe install gdm?" >&2
exit 1
else
exec "${GDMFLEXISERVER:-@LIBEXECDIR@/gdm/gdmflexiserver}"
fi

2
gdm/reserveVT.conf Normal file
View File

@@ -0,0 +1,2 @@
[Login]
ReserveVT=1