You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
134 lines
3.8 KiB
134 lines
3.8 KiB
#include "e_system.h" |
|
|
|
char *_cmd_halt = NULL; |
|
char *_cmd_reboot = NULL; |
|
char *_cmd_suspend = NULL; |
|
char *_cmd_hibernate = NULL; |
|
|
|
static void |
|
_cb_power_halt(void *data EINA_UNUSED, const char *params EINA_UNUSED) |
|
{ |
|
if (_cmd_halt) ecore_exe_run(_cmd_halt, NULL); |
|
} |
|
|
|
static void |
|
_cb_power_reboot(void *data EINA_UNUSED, const char *params EINA_UNUSED) |
|
{ |
|
if (_cmd_reboot) ecore_exe_run(_cmd_reboot, NULL); |
|
} |
|
|
|
static void |
|
_cb_power_suspend(void *data EINA_UNUSED, const char *params EINA_UNUSED) |
|
{ |
|
if (_cmd_suspend) ecore_exe_run(_cmd_suspend, NULL); |
|
} |
|
|
|
static void |
|
_cb_power_hibernate(void *data EINA_UNUSED, const char *params EINA_UNUSED) |
|
{ |
|
if (_cmd_hibernate) ecore_exe_run(_cmd_hibernate, NULL); |
|
} |
|
|
|
static void |
|
_power_halt_init(void) |
|
{ |
|
#if defined (__FreeBSD__) || defined (__OpenBSD__) |
|
_cmd_halt = strdup("shutdown -p now"); |
|
#else |
|
if (ecore_file_app_installed("systemctl")) |
|
_cmd_halt = strdup("systemctl poweroff"); |
|
else |
|
_cmd_halt = strdup("shutdown -h now"); |
|
#endif |
|
// linux systemd: PATH/systemctl poweroff |
|
// bsd: /sbin/shutdown -p no |
|
// * : /sbin/shutdown -h now |
|
} |
|
|
|
static void |
|
_power_reboot_init(void) |
|
{ |
|
#if defined (__FreeBSD__) || defined (__OpenBSD__) |
|
_cmd_reboot = strdup("shutdown -r now"); |
|
#else |
|
if (ecore_file_app_installed("systemctl")) |
|
_cmd_reboot = strdup("systemctl reboot"); |
|
else |
|
_cmd_reboot = strdup("shutdown -r now"); |
|
#endif |
|
// linux systemd: PATH/systemctl reboot |
|
// *: /sbin/shutdown -r now |
|
} |
|
|
|
static void |
|
_power_suspend_init(void) |
|
{ |
|
#if defined (__FreeBSD__) || defined (__OpenBSD__) |
|
if (ecore_file_app_installed("zzz")) |
|
_cmd_suspend = strdup("zzz"); |
|
#else |
|
if (ecore_file_app_installed("systemctl")) |
|
_cmd_suspend = strdup("systemctl suspend"); |
|
else if (ecore_file_app_installed("sleep.sh")) |
|
_cmd_suspend = strdup("sleep.sh"); |
|
else if (ecore_file_can_exec("/etc/acpi/sleep.sh")) |
|
_cmd_suspend = strdup("/etc/acpi/sleep.sh force"); |
|
else if (ecore_file_app_installed("pm-suspend")) |
|
_cmd_suspend = strdup("pm-suspend"); |
|
else if (ecore_file_can_exec("/etc/acpi/pm-suspend")) |
|
_cmd_suspend = strdup("/etc/acpi/pm-suspend"); |
|
#endif |
|
// linux systemd: PATH/systemctl suspend |
|
// bsd: /usr/sbin/zzz |
|
// *: |
|
// PATH/sleep.sh |
|
// /etc/acpi/sleep.sh force |
|
// PATH/pm-suspend |
|
// /etc/acpi/pm-suspend |
|
} |
|
|
|
static void |
|
_power_hibernate_init(void) |
|
{ |
|
#if defined (__FreeBSD__) || defined (__OpenBSD__) |
|
if (ecore_file_app_installed("acpiconf")) |
|
_cmd_hibernate = strdup("acpiconf -s4"); |
|
#else |
|
if (ecore_file_app_installed("systemctl")) |
|
_cmd_hibernate = strdup("systemctl hibernate"); |
|
else if (ecore_file_app_installed("hibernate.sh")) |
|
_cmd_hibernate = strdup("hibernate.sh"); |
|
else if (ecore_file_can_exec("/etc/acpi/hibernate.sh")) |
|
_cmd_hibernate = strdup("/etc/acpi/hibernate.sh force"); |
|
else if (ecore_file_app_installed("pm-hibernate")) |
|
_cmd_hibernate = strdup("pm-hibernate"); |
|
else if (ecore_file_can_exec("/etc/acpi/pm-hibernate")) |
|
_cmd_hibernate = strdup("/etc/acpi/pm-hibernate"); |
|
#endif |
|
// linux systemd: PATH/systemctl hibernate |
|
// bsd: acpiconf -s4 |
|
// if exist: |
|
// PATH/hibernate.sh |
|
// /etc/acpi/hibernate.sh force |
|
// PATH/pm-hibernate |
|
// /etc/acpi/pm-hibernate |
|
} |
|
|
|
void |
|
e_system_power_init(void) |
|
{ |
|
_power_halt_init(); |
|
_power_reboot_init(); |
|
_power_suspend_init(); |
|
_power_hibernate_init(); |
|
e_system_inout_command_register("power-halt", _cb_power_halt, NULL); |
|
e_system_inout_command_register("power-reboot", _cb_power_reboot, NULL); |
|
e_system_inout_command_register("power-suspend", _cb_power_suspend, NULL); |
|
e_system_inout_command_register("power-hibernate", _cb_power_hibernate, NULL); |
|
} |
|
|
|
void |
|
e_system_power_shutdown(void) |
|
{ |
|
// only shutdown things we really have to - no need to free mem etc. |
|
}
|
|
|