[gnome-session/wip/benzea/systemd-user-switch: 3/6] main: Enable systemd usage
- From: Benjamin Berg <bberg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-session/wip/benzea/systemd-user-switch: 3/6] main: Enable systemd usage
- Date: Mon, 29 Apr 2019 14:46:44 +0000 (UTC)
commit 261ebe53d8e8f28ca857543838665bf64e9339d1
Author: Benjamin Berg <bberg redhat com>
Date: Sat Apr 20 01:29:18 2019 +0200
main: Enable systemd usage
This flips the switch and enables systemd usage in gnome-session.
gnome-session/main.c | 37 +++++++++++++++++++++++++++++++++----
1 file changed, 33 insertions(+), 4 deletions(-)
---
diff --git a/gnome-session/main.c b/gnome-session/main.c
index b326df10..f5c40282 100644
--- a/gnome-session/main.c
+++ b/gnome-session/main.c
@@ -49,6 +49,7 @@
#define GSM_DBUS_NAME "org.gnome.SessionManager"
+static gboolean systemd = FALSE;
static gboolean failsafe = FALSE;
static gboolean show_version = FALSE;
static gboolean debug = FALSE;
@@ -139,7 +140,7 @@ create_manager (void)
GsmStore *client_store;
client_store = gsm_store_new ();
- manager = gsm_manager_new (client_store, failsafe, FALSE);
+ manager = gsm_manager_new (client_store, failsafe, systemd);
g_object_unref (client_store);
g_unix_signal_add (SIGTERM, term_or_int_signal_cb, manager);
@@ -384,6 +385,7 @@ main (int argc, char **argv)
guint name_owner_id;
GOptionContext *options;
static GOptionEntry entries[] = {
+ { "systemd", 0, 0, G_OPTION_ARG_NONE, &systemd, N_("Running as systemd service"), NULL },
{ "autostart", 'a', 0, G_OPTION_ARG_STRING_ARRAY, &override_autostart_dirs, N_("Override
standard autostart directories"), N_("AUTOSTART_DIR") },
{ "session", 0, 0, G_OPTION_ARG_STRING, &opt_session_name, N_("Session to use"),
N_("SESSION_NAME") },
{ "debug", 0, 0, G_OPTION_ARG_NONE, &debug, N_("Enable debugging code"), NULL },
@@ -452,7 +454,12 @@ main (int argc, char **argv)
gdm_log_init ();
gdm_log_set_debug (debug);
- if (disable_acceleration_check) {
+ if (systemd) {
+ /* XXX: This is an optimization, but we actually need to do
+ * it right now as the DISPLAY environment might leak
+ * into the new session from an old run. */
+ g_debug ("hardware acceleration already done if needed");
+ } else if (disable_acceleration_check) {
g_debug ("hardware acceleration check is disabled");
} else {
/* Check GL, if it doesn't work out then force software fallback */
@@ -494,8 +501,32 @@ main (int argc, char **argv)
gsm_util_export_activation_environment (NULL);
+ session_name = opt_session_name;
+
#ifdef HAVE_SYSTEMD
gsm_util_export_user_environment (NULL);
+ if (!systemd) {
+ g_autoptr(GError) error = NULL;
+ g_autofree gchar *gnome_session_target;
+
+ /* We really need to resolve the session name at this point,
+ * which requires talking to GSettings internally. */
+ if (IS_STRING_EMPTY (session_name)) {
+ session_name = _gsm_manager_get_default_session (NULL);
+ }
+
+ /* We don't escape the name (i.e. we leave any '-' intact). */
+ gnome_session_target = g_strdup_printf ("gnome-session@%s.target", session_name);
+ if (gsm_util_start_systemd_unit (gnome_session_target, "fail", &error)) {
+ /* We started the unit, open fifo and sleep forever. */
+ systemd_leader_run ();
+ exit(0);
+ }
+
+ /* We could not start the unit, fall back. */
+ g_warning ("Falling back to non-systemd startup procedure due to error: %s",
error->message);
+ systemd = FALSE;
+ }
#endif
{
@@ -531,8 +562,6 @@ main (int argc, char **argv)
gsm_util_set_autostart_dirs (override_autostart_dirs);
}
- session_name = opt_session_name;
-
/* Talk to logind before acquiring a name, since it does synchronous
* calls at initialization time that invoke a main loop and if we
* already owned a name, then we would service too early during
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]