Ejemplo n.º 1
0
int
main(int argc, char *argv[])
{
	bus_t bus;
	int i;
	if (argc < 2)
		return fprintf(stderr, "USAGE: %s daemon...", *argv), 2;
	t(bus_open(&bus, getenv("BUS_INIT"), BUS_WRONLY));

	for (i = 1; i < argc; i++) {
		sprintf(arg, "grep '^%s$' < \"${XDG_RUNTIME_DIR}/started-daemons\" >/dev/null", argv[i]);
		if (WEXITSTATUS(system(arg))) {
			sprintf(arg, "%ji require %s", (intmax_t)getppid(), argv[i]);
			t(bus_write(&bus, arg, 0));
		}
	}

	bus_close(&bus);
	return 0;

fail:
	perror("require");
	bus_close(&bus);
	return 1;
}
Ejemplo n.º 2
0
int main(int argc, char *argv[])
{
	GMainLoop *loop;
	guint bus;

	loop = g_main_loop_new(NULL, FALSE);

	bus = g_bus_own_name(G_BUS_TYPE_SYSTEM,
	                     "org.freedesktop.login1",
	                     G_BUS_NAME_OWNER_FLAGS_NONE,
	                     on_bus_acquired,
	                     on_name_acquired,
	                     on_name_lost,
	                     loop,
	                     NULL);

	/* create /run/systemd/seats, since that's how GDM checks whether logind is
	 * running - see LOGIND_RUNNING() */
	if (-1 == g_mkdir_with_parents("/run/systemd/seats", 0755))
		goto cleanup;

	g_log(G_LOG_DOMAIN, G_LOG_LEVEL_INFO, "entering the main loop");
	g_main_loop_run(loop);
	g_log(G_LOG_DOMAIN, G_LOG_LEVEL_INFO, "exited the main loop");

cleanup:
	signals_unsubscribe();
	bus_close();

	g_main_loop_unref(loop);

	g_bus_unown_name(bus);

	return 0;
}
Ejemplo n.º 3
0
Archivo: read.c Proyecto: maandree/bus
int
main()
{
	bus_t bus;
	struct timespec timeout;
	t(bus_open(&bus, "/tmp/example-bus", BUS_RDONLY));
	t(clock_gettime(CLOCK_MONOTONIC, &timeout));
	timeout.tv_sec += 10;
	t(bus_read_timed(&bus, callback, NULL, &timeout, CLOCK_MONOTONIC));
	bus_close(&bus);
	return 0;

fail:
	perror("poll");
	bus_poll_stop(&bus);
	bus_close(&bus);
	return 1;
}
Ejemplo n.º 4
0
int
main(int argc_, char *argv_[])
{
	bus_t bus;
	int i;

	argc = argc_;
	argv = argv_;

	if (argc < 2)
		return fprintf(stderr, "USAGE: %s daemon...", *argv), 2;
	t(bus_open(&bus, getenv("BUS_INIT"), BUS_RDONLY));
	started = calloc(argc, sizeof(char));
	t(started == NULL);

	started[0] = 1;
	for (i = 1; i < argc; i++) {
		sprintf(arg, "grep '^%s$' < \"${XDG_RUNTIME_DIR}/started-daemons\" >/dev/null", argv[i]);
		if (!WEXITSTATUS(system(arg))) {
			started[i] = 1;
		} else {
			sprintf(arg, "grep '^%s$' < \"${XDG_RUNTIME_DIR}/ready-daemons\" >/dev/null", argv[i]);
			if (!WEXITSTATUS(system(arg)))
				started[i] = 1;
			else
				remaining++;
		}
	}

	if (remaining)
		bus_read(&bus, callback, NULL);

	bus_close(&bus);
	free(started);
	return 0;

fail:
	perror("await-started");
	bus_close(&bus);
	free(started);
	return 1;
}
Ejemplo n.º 5
0
int main(int argc, char *argv[])
{
	bus_t bus;
	if (argc < 3)
		return fprintf(stderr, "USAGE: %s state daemon", *argv), 2;
	t(bus_open(&bus, getenv("BUS_INIT"), BUS_WRONLY));
	sprintf(arg, "%ji %s %s", (intmax_t)getppid(), argv[1], argv[2]);
	t(bus_write(&bus, arg));
	t(bus_close(&bus));
	return 0;

fail:
	perror("announce");
	return 1;
}
Ejemplo n.º 6
0
int main(int argc, char *argv[])
{
	GMainLoop *loop;
	guint bus;

	loop = g_main_loop_new(NULL, FALSE);

	bus = g_bus_own_name(G_BUS_TYPE_SYSTEM,
	                     "org.freedesktop.login1",
	                     G_BUS_NAME_OWNER_FLAGS_NONE,
	                     on_bus_acquired,
	                     on_name_acquired,
	                     on_name_lost,
	                     loop,
	                     NULL);

	/* create /run/systemd/seats, since that's how GDM checks whether logind is
	 * running - see LOGIND_RUNNING() */
	if (-1 == g_mkdir_with_parents("/run/systemd/seats", 0755))
		goto cleanup;
	if (-1 == g_mkdir_with_parents("/run/systemd/sessions", 0755))
		goto cleanup;

	/* normally, /run/systemd/multi-session-x contains a file for each session,
	 * but since ConsoleKit's session IDs are D-Bus object paths, they contain /
	 * characeters, so extra sub-directories are required to prevent failure of
	 * mkdir() in LoginKit clients */
	if (-1 == g_mkdir_with_parents(
	                  "/run/systemd/multi-session-x/org/freedesktop/ConsoleKit",
	                  0755))
		goto cleanup;

	g_log(G_LOG_DOMAIN, G_LOG_LEVEL_INFO, "entering the main loop");
	g_main_loop_run(loop);
	g_log(G_LOG_DOMAIN, G_LOG_LEVEL_INFO, "exited the main loop");

cleanup:
	signals_unsubscribe();
	bus_close();

	g_main_loop_unref(loop);

	g_bus_unown_name(bus);

	return 0;
}
Ejemplo n.º 7
0
static void
announce_wait(pid_t pid)
{
	bus_t bus;
	int i;
	t(bus_open(&bus, getenv("BUS_INIT"), BUS_WRONLY));
	for (i = 1; i < argc; i++) {
		if (!started[i]) {
			sprintf(arg, "%ji awaiting-started %s", (intmax_t)pid, argv[i]);
			t(bus_write(&bus, arg, 0));
		}
	}
	t(bus_close(&bus));
	return;

fail:
	perror("await-started");
}
Ejemplo n.º 8
0
static void on_dlclose(void)
{
	bus_close();
}