diff options
Diffstat (limited to 'zen/shutdown.cpp')
-rwxr-xr-x | zen/shutdown.cpp | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/zen/shutdown.cpp b/zen/shutdown.cpp new file mode 100755 index 00000000..b21ab8db --- /dev/null +++ b/zen/shutdown.cpp @@ -0,0 +1,62 @@ +// ***************************************************************************** +// * This file is part of the FreeFileSync project. It is distributed under * +// * GNU General Public License: http://www.gnu.org/licenses/gpl-3.0 * +// * Copyright (C) Zenju (zenju AT freefilesync DOT org) - All Rights Reserved * +// ***************************************************************************** + +#include "shutdown.h" + #include <zen/shell_execute.h> + + +using namespace zen; + + + + +void zen::shutdownSystem() //throw FileError +{ + //https://linux.die.net/man/2/reboot => needs admin rights! + + //should work without admin rights: + shellExecute("sleep 1; systemctl poweroff", EXEC_TYPE_ASYNC); //throw FileError + //sleep 1: give FFS some time to properly shut down! + //Linux: main thread will wait on detached threads! + warn_static("get rid of shellExecute's thread implementation!") + +} + + +void zen::suspendSystem() //throw FileError +{ + //should work without admin rights: + shellExecute("systemctl suspend", EXEC_TYPE_ASYNC); //throw FileError + +} + +/* +Command line alternatives: + +#ifdef ZEN_WIN +#ifdef ZEN_WIN_VISTA_AND_LATER + Shut down: shutdown /s /t 60 + Sleep: rundll32.exe powrprof.dll,SetSuspendState Sleep + Log off: shutdown /l +#else //XP + Shut down: shutdown -s -t 60 + Standby: rundll32.exe powrprof.dll,SetSuspendState //this triggers standby OR hibernate, depending on whether hibernate setting is active! no suspend on XP? + Log off: shutdown -l +#endif + +#elif defined ZEN_LINUX + Shut down: systemctl poweroff //alternative requiring admin: sudo shutdown -h 1 + Sleep: systemctl suspend //alternative requiring admin: sudo pm-suspend + Log off: gnome-session-quit --no-prompt + //alternative requiring admin: sudo killall Xorg + //alternative without admin: dbus-send --session --print-reply --dest=org.gnome.SessionManager /org/gnome/SessionManager org.gnome.SessionManager.Logout uint32:1 + +#elif defined ZEN_MAC + Shut down: osascript -e 'tell application "System Events" to shut down' + Sleep: osascript -e 'tell application "System Events" to sleep' + Log off: osascript -e 'tell application "System Events" to log out' +#endif +*/ |