Use system directory as fallback location for environment and autostart

This commit is contained in:
Simon Long 2024-01-09 08:00:05 +00:00
parent 351d0a30ad
commit 91f8889785
4 changed files with 45 additions and 27 deletions

View file

@ -4,17 +4,15 @@
/** /**
* session_environment_init - set enrivonment variables based on <key>=<value> * session_environment_init - set enrivonment variables based on <key>=<value>
* @dir: path to config directory
* pairs in `${XDG_CONFIG_DIRS:-/etc/xdg}/lawbc/environment` with user override * pairs in `${XDG_CONFIG_DIRS:-/etc/xdg}/lawbc/environment` with user override
* in `${XDG_CONFIG_HOME:-$HOME/.config}` * in `${XDG_CONFIG_HOME:-$HOME/.config}`
*/ */
void session_environment_init(const char *dir); void session_environment_init(void);
/** /**
* session_autostart_init - run autostart file as shell script * session_autostart_init - run autostart file as shell script
* @dir: path to config directory
* Note: Same as `sh ~/.config/labwc/autostart` (or equivalent XDG config dir) * Note: Same as `sh ~/.config/labwc/autostart` (or equivalent XDG config dir)
*/ */
void session_autostart_init(const char *dir); void session_autostart_init(void);
#endif /* LABWC_SESSION_H */ #endif /* LABWC_SESSION_H */

View file

@ -7,6 +7,7 @@
#include <sys/stat.h> #include <sys/stat.h>
#include <wlr/util/log.h> #include <wlr/util/log.h>
#include "common/buf.h" #include "common/buf.h"
#include "common/dir.h"
#include "common/file-helpers.h" #include "common/file-helpers.h"
#include "common/spawn.h" #include "common/spawn.h"
#include "common/string-helpers.h" #include "common/string-helpers.h"
@ -45,14 +46,14 @@ error:
free(value.buf); free(value.buf);
} }
static void static bool
read_environment_file(const char *filename) read_environment_file(const char *filename)
{ {
char *line = NULL; char *line = NULL;
size_t len = 0; size_t len = 0;
FILE *stream = fopen(filename, "r"); FILE *stream = fopen(filename, "r");
if (!stream) { if (!stream) {
return; return false;
} }
wlr_log(WLR_INFO, "read environment file %s", filename); wlr_log(WLR_INFO, "read environment file %s", filename);
while (getline(&line, &len, stream) != -1) { while (getline(&line, &len, stream) != -1) {
@ -64,6 +65,7 @@ read_environment_file(const char *filename)
} }
free(line); free(line);
fclose(stream); fclose(stream);
return true;
} }
static char * static char *
@ -96,7 +98,7 @@ update_activation_env(const char *env_keys)
} }
void void
session_environment_init(const char *dir) session_environment_init(void)
{ {
/* /*
* Set default for XDG_CURRENT_DESKTOP so xdg-desktop-portal-wlr is happy. * Set default for XDG_CURRENT_DESKTOP so xdg-desktop-portal-wlr is happy.
@ -114,32 +116,50 @@ session_environment_init(const char *dir)
*/ */
setenv("_JAVA_AWT_WM_NONREPARENTING", "1", 0); setenv("_JAVA_AWT_WM_NONREPARENTING", "1", 0);
char *environment = build_path(dir, "environment"); int i;
if (!environment) { bool read = false;
return; char *environment;
for (i = 0; i < 2; i++)
{
environment = build_path(i ? sys_config_dir() : user_config_dir(), "environment");
if (environment) {
read = read_environment_file(environment);
free(environment);
}
if (read) {
return;
}
} }
read_environment_file(environment);
free(environment);
} }
void void
session_autostart_init(const char *dir) session_autostart_init(void)
{ {
/* Update dbus and systemd user environment, each may fail gracefully */ /* Update dbus and systemd user environment, each may fail gracefully */
update_activation_env("DISPLAY WAYLAND_DISPLAY XDG_CURRENT_DESKTOP"); update_activation_env("DISPLAY WAYLAND_DISPLAY XDG_CURRENT_DESKTOP");
char *autostart = build_path(dir, "autostart"); int i;
if (!autostart) { char *autostart;
return; for (i = 0; i < 2; i++)
{
autostart = build_path(i ? sys_config_dir() : user_config_dir(), "autostart");
if (autostart) {
if (file_exists(autostart)) {
break;
}
free(autostart);
autostart = NULL;
}
} }
if (!file_exists(autostart)) {
if (autostart) {
wlr_log(WLR_INFO, "run autostart file %s", autostart);
char *cmd = strdup_printf("sh %s", autostart);
spawn_async_no_shell(cmd);
free(cmd);
free(autostart);
} else {
wlr_log(WLR_ERROR, "no autostart file"); wlr_log(WLR_ERROR, "no autostart file");
goto out;
} }
wlr_log(WLR_INFO, "run autostart file %s", autostart);
char *cmd = strdup_printf("sh %s", autostart);
spawn_async_no_shell(cmd);
free(cmd);
out:
free(autostart);
} }

View file

@ -150,7 +150,7 @@ main(int argc, char *argv[])
} }
wlr_log(WLR_INFO, "using config dir (%s)\n", rc.config_dir); wlr_log(WLR_INFO, "using config dir (%s)\n", rc.config_dir);
session_environment_init(rc.config_dir); session_environment_init();
rcxml_read(config_file); rcxml_read(config_file);
/* /*
@ -184,7 +184,7 @@ main(int argc, char *argv[])
menu_init(&server); menu_init(&server);
session_autostart_init(rc.config_dir); session_autostart_init();
if (startup_cmd) { if (startup_cmd) {
spawn_async_no_shell(startup_cmd); spawn_async_no_shell(startup_cmd);
} }

View file

@ -67,7 +67,7 @@ reload_config_and_theme(void)
static int static int
handle_sighup(int signal, void *data) handle_sighup(int signal, void *data)
{ {
session_environment_init(rc.config_dir); session_environment_init();
reload_config_and_theme(); reload_config_and_theme();
return 0; return 0;
} }