summaryrefslogtreecommitdiff
path: root/daemon
diff options
context:
space:
mode:
Diffstat (limited to 'daemon')
-rw-r--r--daemon/gdm-manager.c11
-rw-r--r--daemon/gdm-session-record.c14
2 files changed, 19 insertions, 6 deletions
diff --git a/daemon/gdm-manager.c b/daemon/gdm-manager.c
index 1c8e5992..de3ac966 100644
--- a/daemon/gdm-manager.c
+++ b/daemon/gdm-manager.c
@@ -653,13 +653,14 @@ add_session_record (GdmManager *manager,
SessionRecord record)
{
const char *username;
- char *display_name, *hostname, *display_device;
+ char *display_name, *hostname, *display_device, *display_seat_id;
gboolean recorded = FALSE;
display_name = NULL;
username = NULL;
hostname = NULL;
display_device = NULL;
+ display_seat_id = NULL;
username = gdm_session_get_username (session);
@@ -671,10 +672,15 @@ add_session_record (GdmManager *manager,
"display-name", &display_name,
"display-hostname", &hostname,
"display-device", &display_device,
+ "display-seat-id", &display_seat_id,
NULL);
if (display_name == NULL && display_device == NULL) {
- goto out;
+ if (display_seat_id == NULL)
+ goto out;
+
+ display_name = g_strdup ("login screen");
+ display_device = g_strdup (display_seat_id);
}
switch (record) {
@@ -706,6 +712,7 @@ out:
g_free (display_name);
g_free (hostname);
g_free (display_device);
+ g_free (display_seat_id);
return recorded;
}
diff --git a/daemon/gdm-session-record.c b/daemon/gdm-session-record.c
index 3b41f9c1..ca2fc2bc 100644
--- a/daemon/gdm-session-record.c
+++ b/daemon/gdm-session-record.c
@@ -149,15 +149,21 @@ record_set_line (UTMP *u,
{
/*
* Set ut_line to the device name associated with this display
- * but remove the "/dev/" prefix. If no device, then use the
- * $DISPLAY value.
+ * but remove the "/dev/" prefix if there is one. Otherwise, if it
+ * seems like the display device is a seat id, just use it wholesale.
+ * If there's no device at all, but $DISPLAY is set, just fall back to
+ * using that.
*/
- if (display_device != NULL
- && g_str_has_prefix (display_device, "/dev/")) {
+ if (display_device != NULL && g_str_has_prefix (display_device, "/dev/")) {
memccpy (u->ut_line,
display_device + strlen ("/dev/"),
'\0',
sizeof (u->ut_line));
+ } else if (display_device != NULL && g_str_has_prefix (display_device, "seat")) {
+ memccpy (u->ut_line,
+ display_device,
+ '\0',
+ sizeof (u->ut_line));
} else if (x11_display_name != NULL) {
memccpy (u->ut_line,
x11_display_name,