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

#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.
}