135 lines
3.8 KiB
C
135 lines
3.8 KiB
C
#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) e_system_run(_cmd_halt);
|
|
}
|
|
|
|
static void
|
|
_cb_power_reboot(void *data EINA_UNUSED, const char *params EINA_UNUSED)
|
|
{
|
|
if (_cmd_reboot) e_system_run(_cmd_reboot);
|
|
}
|
|
|
|
static void
|
|
_cb_power_suspend(void *data EINA_UNUSED, const char *params EINA_UNUSED)
|
|
{
|
|
if (_cmd_suspend) e_system_run(_cmd_suspend);
|
|
}
|
|
|
|
static void
|
|
_cb_power_hibernate(void *data EINA_UNUSED, const char *params EINA_UNUSED)
|
|
{
|
|
if (_cmd_hibernate) e_system_run(_cmd_hibernate);
|
|
}
|
|
|
|
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.
|
|
}
|