chiark / gitweb /
Prep v239: Add support for suspend-then-hibernate to loginctl.
authorSven Eden <yamakuzure@gmx.net>
Wed, 29 Aug 2018 15:55:22 +0000 (17:55 +0200)
committerSven Eden <yamakuzure@gmx.net>
Wed, 29 Aug 2018 16:02:35 +0000 (18:02 +0200)
cb/elogind.cbp
src/login/eloginctl.c
src/login/eloginctl.h
src/login/loginctl.c

index 1ace09eee25ee203f2e1c932f1fb54bed85463d2..f612e917610f023b3727f202191ada3c22aacaf8 100644 (file)
                        <Option target="all" />
                        <Option target="clean" />
                </Unit>
+               <Unit filename="../src/login/70-power-switch.rules" />
+               <Unit filename="../src/login/70-uaccess.rules" />
+               <Unit filename="../src/login/71-seat.rules.in" />
+               <Unit filename="../src/login/73-seat-late.rules.in" />
                <Unit filename="../src/login/eloginctl.c">
                        <Option compilerVar="CC" />
                </Unit>
                        <Option target="all" />
                        <Option target="clean" />
                </Unit>
+               <Unit filename="../src/login/org.freedesktop.login1.conf" />
+               <Unit filename="../src/login/org.freedesktop.login1.policy" />
                <Unit filename="../src/login/pam_elogind.c">
                        <Option compilerVar="CC" />
                </Unit>
index 111c770b5c9719751cfea881b22729b35bca1529..644686ad25173abe43ba93476b2fe46a2f89fd93 100644 (file)
@@ -48,13 +48,14 @@ static const struct {
         HandleAction action;
         const char*  verb;
 } action_table[_ACTION_MAX] = {
-        [ACTION_HALT]         = { HANDLE_HALT,         "halt"         },
-        [ACTION_POWEROFF]     = { HANDLE_POWEROFF,     "poweroff",    },
-        [ACTION_REBOOT]       = { HANDLE_REBOOT,       "reboot",      },
-        [ACTION_KEXEC]        = { HANDLE_KEXEC,        "kexec",       },
-        [ACTION_SUSPEND]      = { HANDLE_SUSPEND,      "suspend",     },
-        [ACTION_HIBERNATE]    = { HANDLE_HIBERNATE,    "hibernate",   },
-        [ACTION_HYBRID_SLEEP] = { HANDLE_HYBRID_SLEEP, "hybrid-sleep" }
+        [ACTION_HALT]                   = { HANDLE_HALT,                   "halt"         },
+        [ACTION_POWEROFF]               = { HANDLE_POWEROFF,               "poweroff",    },
+        [ACTION_REBOOT]                 = { HANDLE_REBOOT,                 "reboot",      },
+        [ACTION_KEXEC]                  = { HANDLE_KEXEC,                  "kexec",       },
+        [ACTION_SUSPEND]                = { HANDLE_SUSPEND,                "suspend",     },
+        [ACTION_HIBERNATE]              = { HANDLE_HIBERNATE,              "hibernate",   },
+        [ACTION_HYBRID_SLEEP]           = { HANDLE_HYBRID_SLEEP,           "hybrid-sleep" },
+        [ACTION_SUSPEND_THEN_HIBERNATE] = { HANDLE_SUSPEND_THEN_HIBERNATE, "suspend-then-hibernate" }
         /* ACTION_CANCEL_SHUTDOWN is handled differently */
 };
 
@@ -262,6 +263,12 @@ static void elogind_log_special(enum elogind_action a) {
                            "MESSAGE_ID=" SD_MESSAGE_SLEEP_START_STR,
                            NULL);
                 break;
+        case ACTION_SUSPEND_THEN_HIBERNATE:
+                log_struct(LOG_INFO,
+                           LOG_MESSAGE("Suspend-Then-Hibernate action called."),
+                           "MESSAGE_ID=" SD_MESSAGE_SLEEP_START_STR,
+                           NULL);
+                break;
         case ACTION_CANCEL_SHUTDOWN:
                 log_struct(LOG_INFO,
                            LOG_MESSAGE("Cancel Shutdown called."),
@@ -322,6 +329,11 @@ static int elogind_reboot(sd_bus *bus, enum elogind_action a) {
                 description = "put system into hybrid sleep";
                 break;
 
+        case ACTION_SUSPEND_THEN_HIBERNATE:
+                method = "SuspendThenHibernate";
+                description = "put system into suspend followed by hibernate";
+                break;
+
         default:
                 return -EINVAL;
         }
@@ -570,7 +582,8 @@ int start_special(int argc, char *argv[], void *userdata) {
                    ACTION_REBOOT,
                    ACTION_SUSPEND,
                    ACTION_HIBERNATE,
-                   ACTION_HYBRID_SLEEP)) {
+                   ACTION_HYBRID_SLEEP,
+                   ACTION_SUSPEND_THEN_HIBERNATE)) {
                 if (arg_when > 0)
                         return elogind_schedule_shutdown(bus, a);
                 else
index cf8ce83340bb47406f0d2b575136a500b3d74634..2c487a8802eb10946b8c1be30419035c65bf949c 100644 (file)
@@ -34,6 +34,7 @@ typedef enum elogind_action {
         ACTION_SUSPEND,
         ACTION_HIBERNATE,
         ACTION_HYBRID_SLEEP,
+        ACTION_SUSPEND_THEN_HIBERNATE,
         ACTION_CANCEL_SHUTDOWN,
         _ACTION_MAX
 } elogind_action;
index 9eef701b05dd96b1281c2922406a40013319bc69..f740943966c368b22ed60b9ded7cb0d371396b79 100644 (file)
@@ -1402,6 +1402,8 @@ static int help(int argc, char *argv[], void *userdata) {
                "  suspend                   Suspend the machine to memory\n"
                "  hibernate                 Suspend the machine to disk\n"
                "  hybrid-sleep              Suspend the machine to memory and disk\n"
+               "  suspend-then-hibernate    Suspend the system, wake after a period of\n"
+               "                            time and put it into hibernate\n"
 #endif // 0
                , program_invocation_short_name);
 
@@ -1627,6 +1629,7 @@ static int loginctl_main(int argc, char *argv[], sd_bus *bus) {
                 { "suspend",           VERB_ANY, 1,        0,            start_special     },
                 { "hibernate",         VERB_ANY, 1,        0,            start_special     },
                 { "hybrid-sleep",      VERB_ANY, 1,        0,            start_special     },
+                { "suspend-then-hibernate", VERB_ANY, 1,   0,            start_special     },
                 { "cancel-shutdown",   VERB_ANY, 1,        0,            start_special     },
 #endif // 1
                 {}