Commit 5449174a authored by Ray Strode's avatar Ray Strode

autostart-app: give ever app its own journal id

Right now all session output gets attributed to
gnome-session which isn't very useful.

This commit makes sure launched apps each get
their own journal identifier.

https://bugzilla.gnome.org/show_bug.cgi?id=757571
parent 4ab09c39
......@@ -32,6 +32,11 @@
#include <gconf/gconf-client.h>
#endif
#ifdef HAVE_SYSTEMD
#include <systemd/sd-journal.h>
#include <systemd/sd-daemon.h>
#endif
#include "gsm-autostart-app.h"
#include "gsm-util.h"
......@@ -1014,6 +1019,34 @@ app_launched (GAppLaunchContext *ctx,
app->priv->startup_id = sn_id;
}
#ifdef HAVE_SYSTEMD
static void
on_child_setup (GsmAutostartApp *app)
{
int standard_output, standard_error;
/* The FALSE means programs aren't expected to prefix each
* line with <n> prefix to specify priority.
*/
standard_output = sd_journal_stream_fd (app->priv->desktop_id,
LOG_INFO,
FALSE);
standard_error = sd_journal_stream_fd (app->priv->desktop_id,
LOG_WARNING,
FALSE);
if (standard_output >= 0) {
dup2 (standard_output, STDOUT_FILENO);
close (standard_output);
}
if (standard_error >= 0) {
dup2 (standard_error, STDERR_FILENO);
close (standard_error);
}
}
#endif
static gboolean
autostart_app_start_spawn (GsmAutostartApp *app,
GError **error)
......@@ -1022,6 +1055,8 @@ autostart_app_start_spawn (GsmAutostartApp *app,
GError *local_error;
const char *startup_id;
GAppLaunchContext *ctx;
GSpawnChildSetupFunc child_setup_func = NULL;
gpointer child_setup_data = NULL;
guint handler;
startup_id = gsm_app_peek_startup_id (GSM_APP (app));
......@@ -1041,12 +1076,19 @@ autostart_app_start_spawn (GsmAutostartApp *app,
g_app_launch_context_setenv (ctx, "DESKTOP_AUTOSTART_ID", startup_id);
}
#ifdef HAVE_SYSTEMD
if (sd_booted () > 0) {
child_setup_func = (GSpawnChildSetupFunc) on_child_setup;
child_setup_data = app;
}
#endif
handler = g_signal_connect (ctx, "launched", G_CALLBACK (app_launched), app);
success = g_desktop_app_info_launch_uris_as_manager (app->priv->app_info,
NULL,
ctx,
G_SPAWN_DO_NOT_REAP_CHILD | G_SPAWN_SEARCH_PATH,
NULL, NULL,
child_setup_func, child_setup_data,
NULL, NULL,
&local_error);
g_signal_handler_disconnect (ctx, handler);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment