aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data/50-arctica-greeter.conf.in1
-rw-r--r--debian/control1
-rwxr-xr-xlightdm-arctica-greeter-session4
-rw-r--r--src/arctica-greeter.vala84
4 files changed, 38 insertions, 52 deletions
diff --git a/data/50-arctica-greeter.conf.in b/data/50-arctica-greeter.conf.in
index d19ed15..cac4c59 100644
--- a/data/50-arctica-greeter.conf.in
+++ b/data/50-arctica-greeter.conf.in
@@ -1,2 +1,3 @@
[Seat:*]
greeter-session=arctica-greeter
+greeter-wrapper=@pkglibexecdir@/lightdm-arctica-greeter-session
diff --git a/debian/control b/debian/control
index 9fe25eb..0f80e04 100644
--- a/debian/control
+++ b/debian/control
@@ -5,7 +5,6 @@ Maintainer: Mike Gabriel <mike.gabriel@das-netzwerkteam.de>
Standards-Version: 4.1.1
Build-Depends: adwaita-icon-theme,
at-spi2-core,
- dbus-x11,
debhelper (>= 9),
dh-autoreconf,
fonts-droid-fallback | fonts-droid,
diff --git a/lightdm-arctica-greeter-session b/lightdm-arctica-greeter-session
index 536e0ae..6b34ff0 100755
--- a/lightdm-arctica-greeter-session
+++ b/lightdm-arctica-greeter-session
@@ -28,9 +28,7 @@ cleanup()
exit 0
}
-eval `dbus-launch --sh-syntax`
-
-exec $@ &
+exec dbus-run-session $@ &
CMD_PID=$!
wait $CMD_PID
CMD_PID=
diff --git a/src/arctica-greeter.vala b/src/arctica-greeter.vala
index 94e58d9..2ede4c5 100644
--- a/src/arctica-greeter.vala
+++ b/src/arctica-greeter.vala
@@ -1083,9 +1083,6 @@ public class ArcticaGreeter : Object
var greeter = new ArcticaGreeter (do_test_mode, do_test_highcontrast, do_test_bigfont);
greeter.go();
- string systemd_stderr;
- int systemd_exitcode = 0;
-
Pid nmapplet_pid = 0;
var indicator_list = AGSettings.get_strv(AGSettings.KEY_INDICATORS);
@@ -1103,7 +1100,7 @@ public class ArcticaGreeter : Object
if (update_indicator_list)
AGSettings.set_strv(AGSettings.KEY_INDICATORS, indicator_list);
- var launched_indicator_services = new List<string>();
+ var launched_indicator_service_pids = new List<Pid>();
if (!do_test_mode)
{
@@ -1118,6 +1115,8 @@ public class ArcticaGreeter : Object
var indicator_service = "";
foreach (unowned string indicator in indicator_list)
{
+ Pid indicator_service_pid = 0;
+
if ("ug-" in indicator && ! ("." in indicator))
continue;
@@ -1132,28 +1131,27 @@ public class ArcticaGreeter : Object
/* Start the indicator service */
string[] argv;
- Shell.parse_argv ("systemctl --user start %s".printf(indicator_service), out argv);
- Process.spawn_sync (null,
- argv,
- null,
- SpawnFlags.SEARCH_PATH,
- null,
- null,
- out systemd_stderr,
- out systemd_exitcode);
-
- if (systemd_exitcode == 0)
- {
- launched_indicator_services.append(indicator_service);
- debug ("Successfully started Indicator Service '%s'", indicator_service);
- }
- else {
- warning ("Systemd failed to start Indicator Service '%s': %s", indicator_service, systemd_stderr);
- }
+ /* FIXME: This path is rather hard-coded here.
+ * If it pops up, we need to handle this in
+ * some path detection fashion similar to
+ * how we find at-spi-bus-launcher on the file
+ * system.
+ */
+ Shell.parse_argv ("/usr/libexec/%s/%s-service".printf(indicator_service, indicator_service), out argv);
+ Process.spawn_async (null,
+ argv,
+ null,
+ SpawnFlags.SEARCH_PATH,
+ null,
+ out indicator_service_pid);
+ launched_indicator_service_pids.append(indicator_service_pid);
+ debug ("Successfully started Ayatana Indicator Service '%s' [%d]", indicator_service, indicator_service_pid);
}
- catch (Error e) {
+ catch (Error e)
+ {
warning ("Error starting Indicator Service '%s': %s", indicator_service, e.message);
}
+
}
/* Make nm-applet hide items the user does not have permissions to interact with */
@@ -1196,33 +1194,23 @@ public class ArcticaGreeter : Object
if (!do_test_mode)
{
- foreach (unowned string indicator_service in launched_indicator_services)
+ foreach (unowned Pid indicator_service_pid in launched_indicator_service_pids)
{
+ if (indicator_service_pid != 0)
+ {
+#if VALA_0_40
+ Posix.kill (indicator_service_pid, Posix.Signal.TERM);
+#else
+ Posix.kill (indicator_service_pid, Posix.SIGTERM);
+#endif
- try {
- /* Stop this indicator service */
- string[] argv;
-
- Shell.parse_argv ("systemctl --user stop %s".printf(indicator_service), out argv);
- Process.spawn_sync (null,
- argv,
- null,
- SpawnFlags.SEARCH_PATH,
- null,
- null,
- out systemd_stderr,
- out systemd_exitcode);
-
- if (systemd_exitcode == 0)
- {
- debug ("Successfully stopped Indicator Service '%s' via systemd", indicator_service);
- }
- else {
- warning ("Systemd failed to stop Indicator Service '%s': %s", indicator_service, systemd_stderr);
- }
- }
- catch (Error e) {
- warning ("Error stopping Indicator Service '%s': %s", indicator_service, e.message);
+ int status;
+ Posix.waitpid (indicator_service_pid, out status, 0);
+ if (Process.if_exited (status))
+ debug ("Indicator Service process [%d] exited with return value %d", indicator_service_pid, Process.exit_status (status));
+ else
+ debug ("Indicator Service process [%d] terminated with signal %d", indicator_service_pid, Process.term_sig (status));
+ indicator_service_pid = 0;
}
}