From 09ee6293bdc38d40c210d6f0bd5f811f99329086 Mon Sep 17 00:00:00 2001 From: ShiningLea <49339966+AnErrupTion@users.noreply.github.com> Date: Fri, 12 Aug 2022 21:27:06 +0200 Subject: [PATCH] Merge dev into master (closes #182) (#425) Merge dev into master branch Co-authored-by: AnErrupTion --- src/inputs.c | 26 +++++++++++++++++++++++--- src/inputs.h | 1 + src/login.c | 19 +++++++++---------- 3 files changed, 33 insertions(+), 13 deletions(-) diff --git a/src/inputs.c b/src/inputs.c index 69a7e9b..c9bda06 100644 --- a/src/inputs.c +++ b/src/inputs.c @@ -7,6 +7,7 @@ #include #include #include +#include void handle_desktop(void* input_struct, struct tb_event* event) { @@ -76,6 +77,7 @@ void handle_text(void* input_struct, struct tb_event* event) void input_desktop(struct desktop* target) { target->list = NULL; + target->list_simple = NULL; target->cmd = NULL; target->display_server = NULL; target->cur = 0; @@ -176,7 +178,8 @@ void input_desktop_add( { ++(target->len); target->list = realloc(target->list, target->len * (sizeof (char*))); - target->cmd = realloc(target->cmd, target->len * (sizeof (char*))); + target->list_simple = realloc(target->list_simple, target->len * (sizeof (char*))); + target->cmd = realloc(target->cmd, target->len * (sizeof (char*))); target->display_server = realloc( target->display_server, target->len * (sizeof (enum display_server))); @@ -190,8 +193,25 @@ void input_desktop_add( return; } - target->list[target->cur] = name; - target->cmd[target->cur] = cmd; + target->list[target->cur] = name; + + int name_len = strlen(name); + char* name_simple = malloc(name_len); + + memcpy(name_simple, name, name_len); + + if (strstr(name_simple, " ") != NULL) + { + name_simple = strtok(name_simple, " "); + } + + for (int i = 0; i < name_len; i++) + { + name_simple[i] = tolower(name_simple[i]); + } + + target->list_simple[target->cur] = name_simple; + target->cmd[target->cur] = cmd; target->display_server[target->cur] = display_server; } diff --git a/src/inputs.h b/src/inputs.h index 6ba1448..d0f0f61 100644 --- a/src/inputs.h +++ b/src/inputs.h @@ -23,6 +23,7 @@ struct text struct desktop { char** list; + char** list_simple; char** cmd; enum display_server* display_server; diff --git a/src/login.c b/src/login.c index e704022..0c63ad5 100644 --- a/src/login.c +++ b/src/login.c @@ -257,13 +257,14 @@ void env_xdg_session(const enum display_server display_server) } } -void env_xdg(const char* tty_id) +void env_xdg(const char* tty_id, const char* desktop_name) { char user[15]; snprintf(user, 15, "/run/user/%d", getuid()); setenv("XDG_RUNTIME_DIR", user, 0); setenv("XDG_SESSION_CLASS", "user", 0); setenv("XDG_SESSION_ID", "1", 0); + setenv("XDG_SESSION_DESKTOP", desktop_name, 0); setenv("XDG_SEAT", "seat0", 0); setenv("XDG_VTNR", tty_id, 0); } @@ -480,6 +481,13 @@ void auth( { int ok; + char tty_id [3]; + snprintf(tty_id, 3, "%d", config.tty); + + // Add XDG environment variables + env_xdg_session(desktop->display_server[desktop->cur]); + env_xdg(tty_id, desktop->list_simple[desktop->cur]); + // open pam session const char* creds[2] = {login->text, password->text}; struct pam_conv conv = {login_conv, creds}; @@ -487,9 +495,6 @@ void auth( ok = pam_start(config.service_name, NULL, &conv, &handle); - // Set XDG_SESSION_TYPE earlier to fix some bugs - env_xdg_session(desktop->display_server[desktop->cur]); - if (ok != PAM_SUCCESS) { pam_diagnose(ok, buf); @@ -590,10 +595,7 @@ void auth( } // get a display - char tty_id [3]; char vt[5]; - - snprintf(tty_id, 3, "%d", config.tty); snprintf(vt, 5, "vt%d", config.tty); // set env @@ -612,9 +614,6 @@ void auth( putenv(env[i]); } - // add xdg variables - env_xdg(tty_id); - // execute int ok = chdir(pwd->pw_dir);