static th_pipe_t dbus_pipe;
static pthread_mutex_t dbus_lock;
static int dbus_running;
+static int dbus_session;
/**
*
dbus_error_init(&err);
- conn = dbus_bus_get_private(DBUS_BUS_SESSION, &err);
+ conn = dbus_bus_get_private(dbus_session ? DBUS_BUS_SESSION : DBUS_BUS_SYSTEM, &err);
if (dbus_error_is_set(&err)) {
tvherror("dbus", "Connection error: %s", err.message);
dbus_error_free(&err);
if (dbus_error_is_set(&err)) {
tvherror("dbus", "Name error: %s", err.message);
dbus_error_free(&err);
+ dbus_connection_close(conn);
dbus_connection_unref(conn);
return NULL;
}
if (DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER != ret) {
tvherror("dbus", "Not primary owner");
+ dbus_connection_close(conn);
dbus_connection_unref(conn);
return NULL;
}
pthread_t dbus_tid;
void
-dbus_server_init(void)
+dbus_server_init(int session)
{
+ dbus_session = session;
pthread_mutex_init(&dbus_lock, NULL);
TAILQ_INIT(&dbus_signals);
LIST_INIT(&dbus_rpcs);
dbus_register_rpc_str(const char *call_name, void *opaque,
char *(*fcn)(void *, const char *, char *));
-void dbus_server_init(void);
+void dbus_server_init(int session);
void dbus_server_start(void);
void dbus_server_done(void);
dbus_register_rpc_str(const char *call_name, void *opaque,
char *(*fcn)(void *, const char *, char *)) { }
-static inline void dbus_server_init(void) { }
+static inline void dbus_server_init(int session) { }
static inline void dbus_server_start(void) { }
static inline void dbus_server_done(void) { }
opt_ipv6 = 0,
opt_tsfile_tuner = 0,
opt_dump = 0,
- opt_xspf = 0;
+ opt_xspf = 0,
+ opt_dbus_session = 0;
const char *opt_config = NULL,
*opt_user = NULL,
*opt_group = NULL,
"to your Tvheadend installation until you edit\n"
"the access-control from within the Tvheadend UI",
OPT_BOOL, &opt_firstrun },
+#if ENABLE_DBUS_1
+ { 'e', "dbus_session", "DBus - use the session message bus instead system one",
+ OPT_BOOL, &opt_dbus_session },
+#endif
#if ENABLE_LINUXDVB
{ 'a', "adapters", "Only use specified DVB adapters (comma separated)",
OPT_STR, &opt_dvb_adapters },
* Initialize subsystems
*/
- dbus_server_init();
+ dbus_server_init(opt_dbus_session);
intlconv_init();