From de26335f84fa8e74b097684280ce836aa45c1389 Mon Sep 17 00:00:00 2001 From: Guido Falsi Date: Fri, 22 Dec 2023 22:42:35 +0100 Subject: [PATCH] Add "smart-xsession-errors" configuration This allows to choose the logic for .xsession-errors placement. --- common/configuration.c | 1 + data/lightdm.conf | 3 +++ src/lightdm.c | 2 ++ src/session.c | 12 +++++++++++- 4 files changed, 17 insertions(+), 1 deletion(-) diff --git a/common/configuration.c b/common/configuration.c index 30580ead..3db837fd 100644 --- a/common/configuration.c +++ b/common/configuration.c @@ -346,6 +346,7 @@ config_init (Configuration *config) g_hash_table_insert (config->priv->lightdm_keys, "greeters-directory", GINT_TO_POINTER (KEY_SUPPORTED)); g_hash_table_insert (config->priv->lightdm_keys, "backup-logs", GINT_TO_POINTER (KEY_SUPPORTED)); g_hash_table_insert (config->priv->lightdm_keys, "dbus-service", GINT_TO_POINTER (KEY_SUPPORTED)); + g_hash_table_insert (config->priv->lightdm_keys, "smart-xsession-errors", GINT_TO_POINTER (KEY_SUPPORTED)); g_hash_table_insert (config->priv->lightdm_keys, "logind-load-seats", GINT_TO_POINTER (KEY_DEPRECATED)); g_hash_table_insert (config->priv->seat_keys, "type", GINT_TO_POINTER (KEY_SUPPORTED)); diff --git a/data/lightdm.conf b/data/lightdm.conf index 60e3e8b4..bdc8110d 100644 --- a/data/lightdm.conf +++ b/data/lightdm.conf @@ -17,6 +17,8 @@ # greeters-directory = Directory to find greeters # backup-logs = True to move add a .old suffix to old log files when opening new ones # dbus-service = True if LightDM provides a D-Bus service to control it +# smart-xsession-errors = True to force .xsesion.errors file to be positioned according to XDG standards +# Default False, put it in ~/.xsession-errors # [LightDM] #start-default-seat=true @@ -35,6 +37,7 @@ #greeters-directory=$XDG_DATA_DIRS/lightdm/greeters:$XDG_DATA_DIRS/xgreeters #backup-logs=true #dbus-service=true +#smart-xsession-errors=false # # Seat configuration diff --git a/src/lightdm.c b/src/lightdm.c index 7fd77ed9..88b9c67f 100644 --- a/src/lightdm.c +++ b/src/lightdm.c @@ -771,6 +771,8 @@ main (int argc, char **argv) config_set_boolean (config_get_instance (), "LightDM", "backup-logs", TRUE); if (!config_has_key (config_get_instance (), "LightDM", "dbus-service")) config_set_boolean (config_get_instance (), "LightDM", "dbus-service", TRUE); + if (!config_has_key (config_get_instance (), "LightDM", "smart-xsession-errors")) + config_set_boolean (config_get_instance (), "LightDM", "smart-xsession-errors", FALSE); if (!config_has_key (config_get_instance (), "Seat:*", "type")) config_set_string (config_get_instance (), "Seat:*", "type", "local"); if (!config_has_key (config_get_instance (), "Seat:*", "pam-service")) diff --git a/src/session.c b/src/session.c index fce12a0b..15cd8430 100644 --- a/src/session.c +++ b/src/session.c @@ -981,7 +981,17 @@ session_init (Session *session) { SessionPrivate *priv = session_get_instance_private (session); - priv->log_filename = g_strdup (".xsession-errors"); + if(config_get_boolean (config_get_instance (), "LightDM", "smart-xsession-errors")) { + if (g_getenv ("XDG_STATE_HOME")) { + priv->log_filename = g_build_filename (g_getenv ("XDG_STATE_HOME"), ".xsession-errors", NULL); + } else if (g_getenv ("XDG_CACHE_HOME")) { + priv->log_filename = g_build_filename (g_getenv ("XDG_CACHE_HOME"), ".xsession-errors", NULL); + } else { + priv->log_filename = g_build_filename (".cache", ".xsession-errors", NULL); + } + } else { + priv->log_filename = g_strdup (".xsession-errors"); + } priv->log_mode = LOG_MODE_BACKUP_AND_TRUNCATE; priv->to_child_input = -1; priv->from_child_output = -1;