From a6acc7b31b49b65ee0717b970ae54980fbfca18b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Andr=C3=A9=20Santoni?= Date: Mon, 25 Apr 2016 15:49:25 +0700 Subject: [PATCH] (Lakka) Control systemd services. Touching the files was not enough. --- menu/menu_setting.c | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/menu/menu_setting.c b/menu/menu_setting.c index 66611385fd..b25fbb0cfb 100644 --- a/menu/menu_setting.c +++ b/menu/menu_setting.c @@ -57,6 +57,11 @@ #include "../tasks/tasks_internal.h" +#ifdef _WIN32 +#include +#else +#include +#endif struct rarch_setting_info { @@ -3068,34 +3073,44 @@ static void overlay_enable_toggle_change_handler(void *data) #endif #ifdef HAVE_LAKKA - -void lakka_service_toggle(const char *path, bool enable) +void lakka_service_toggle(const char *path, char *unit, bool enable) { + int pid = fork(); + char* args[] = {"systemctl", NULL, NULL, NULL}; + + args[1] = enable ? "start" : "stop"; + args[2] = unit; + if (enable) fclose(fopen(path, "w")); else remove(path); + + if (pid == 0) { + execvp(args[0], args); + } + return; } static void ssh_enable_toggle_change_handler(void *data) { settings_t *settings = config_get_ptr(); - lakka_service_toggle(LAKKA_SSH_PATH, + lakka_service_toggle(LAKKA_SSH_PATH, "sshd.service", settings && settings->ssh_enable); return; } static void samba_enable_toggle_change_handler(void *data) { settings_t *settings = config_get_ptr(); - lakka_service_toggle(LAKKA_SAMBA_PATH, + lakka_service_toggle(LAKKA_SAMBA_PATH, "smbd.service", settings && settings->samba_enable); return; } static void bluetooth_enable_toggle_change_handler(void *data) { settings_t *settings = config_get_ptr(); - lakka_service_toggle(LAKKA_BLUETOOTH_PATH, + lakka_service_toggle(LAKKA_BLUETOOTH_PATH, "bluetooth.service", settings && settings->bluetooth_enable); return; }