Commit Graph
178 Commits
Author SHA1 Message Date
Mike Yuan 45df233e5f sleep: fix typo (sysupend -> suspend) 2024-03-08 01:10:10 +08:00
Adrian Vovk 0b958bb3ee sleep: Always freeze user.slice
Previously, we'd only freeze user.slice in the case of s2h, because we
didn't want the user session to resume while systemd was transitioning
from suspend to hibernate.

This commit extends this freezing behavior to all sleep modes.

We also have an environment variable to disable the freezing behavior
outright. This is a necessary workaround for someone that has hooks
in /usr/lib/systemd/system-sleep/ which communicate with some
process running under user.slice, or if someone is using the proprietary
NVIDIA driver which breaks when user.slice is frozen (issue #27559)

Fixes #27559
2024-03-05 12:12:35 -05:00
Mike Yuan 4f49512695 extract-word: modernize extract_many_words 2024-03-03 19:01:00 +08:00
Lennart Poettering e7be86519d sleep: upgrade fatal log message to LOG_ERR 2024-01-30 11:32:56 +01:00
Lennart Poettering 75d2752814 sleep: upgrade some unexpected errors to LOG_WARNING log messages 2024-01-30 11:32:41 +01:00
Lennart Poettering b782080b7a sleep: remove redundant debug log message 2024-01-30 11:31:56 +01:00
Lennart Poettering 032bf2da46 sleep: add mising error message 2024-01-30 11:31:36 +01:00
Mike Yuan fe33920c2a sleep: don't log duplicate error
write_resume_config() logs error on its own.
2023-12-27 22:38:43 +08:00
Mike Yuan e14348c616 sleep: connect to correct bus when locking homed-managed homes
Partially reverts 122f6f1eaa

Fixes https://github.com/systemd/systemd/issues/29938#issuecomment-1869508708
2023-12-26 18:53:03 +01:00
Yu Watanabe c01a5c0527 siphash24: introduce siphash24_compress_typesafe() macro
To prevent copy-and-paste mistake.

This also introduce in_addr_hash_func().

No functional change, just refactoring.
2023-12-25 15:38:59 +09:00
Mike Yuan 8ad973ed99 hibernate-util: de-duplicate clear_efi_hibernate_location 2023-12-10 14:08:46 +09:00
Mike Yuan 1fe536aa37 sleep: reduce the scope of hibernation_device 2023-12-05 16:52:19 +08:00
Mike Yuan cc1c8d129f sleep: make sure we clear HibernateLocation on all error paths
Also, let's say "sleep operation" rather than "sleep state",
the latter of which creates ambiguity with /sys/power/state.
2023-10-28 00:17:15 +08:00
Mike Yuan 122f6f1eaa sleep: minor modernization for lock_all_homes 2023-10-27 18:11:32 +08:00
Mike Yuan 78c21009bf sleep: rework write_state and write_mode 2023-10-27 18:11:29 +08:00
Mike Yuan 0374cbd668 sleep: update help text for suspend-then-hibernate 2023-10-27 17:57:03 +08:00
Mike Yuan 4706c3ec2b sleep: log about errno 2023-10-27 17:57:03 +08:00
Mike Yuan 37f80890b2 sleep: drop unneeded includes 2023-10-27 17:57:03 +08:00
Mike Yuan e024cdd270 sleep: introduce sleep_operation_is_hibernation 2023-10-27 17:57:03 +08:00
Mike Yuan 828ad30470 sleep-config: make hybrid sleep always use 'suspend' disk mode
If user requests hybrid sleep, we should always use 'suspend'
disk mode. If that's not supported, let's correctly report it
so they can choose plain hibernation instead. HybridSleepMode=
serves no purpose in this case and should be removed.

Addresses https://github.com/systemd/systemd/pull/29681#discussion_r1369812785
2023-10-24 19:07:03 +02:00
Mike Yuan 1f82c21dce sleep-config: remove HibernateState= & HybridSleepState=, restrict
SuspendState= not to include "disk"

I don't know why these existed in the first place, but as I
justified in the comments, it's simply not sensible to allow
HibernateState= or HybridSleepState= to take values other than
'disk'. So let's just remove those options. Also, SuspendState=
should not contain 'disk'.
2023-10-23 23:12:27 +08:00
Mike Yuan 596873c10c hibernate-util: rework find_hibernate_location
* "HibernateLocation" struct is renamed to HibernationDevice
  to avoid ambiguity with the EFI variable. Also, it no longer
  takes the reference to a SwapEntry object, since it's really
  unnecessary (only SwapEntry.path is used), but increases complexity.
* SwapEntry is no longer used externally.
* find_hibernate_location is split into read_swap_entries and
  find_suitable_hibernation_device. The former reads all swap entries
  into SwapEntries object for later use.
* Make use of btrfs_get_file_physical_offset_fd

Closes #25130
2023-10-20 23:22:54 +08:00
Franck Bui 6495361c7d meson: add build option for install path of main config files
This allows distros to install configuration file templates in /usr/lib/systemd
for example.

Currently we install "empty" config files in /etc/systemd/. They serve two
purposes:

- The file contains commented-out values that show the default settings.
- It is easier to edit the right file if it is already there, the user doesn't
  have to type in the path correctly, and the basic file structure is already in
  place so it's easier to edit.

Things that have happened since this approach was put in place:

- We started supporting drop-ins for config files, and drop-ins are the
  recommended way to create local configuration overrides.
- We have systemd-analyze cat-config which takes care of iterating over
  all possible locations (/etc, /run, /usr, /usr/local) and figuring out
  the right file.
- Because of the first two points, systemd-analyze cat-config is much better,
  because it takes care of finding all the drop-ins and figuring out the
  precedence. Looking at files manually is still possible of course, but not
  very convenient.

The disadvantages of the current approach with "empty" files in /etc:

- We clutter up /etc so it's harder to see what the local configuration actually is.
- If a user edits the file, package updates will not override the file (e.g.
  systemd.rpm uses %config(noreplace). This means that the "documented defaults"
  will become stale over time, if the user ever edits the main config file.

Thus, I think that it's reasonable to:

- Install the main config file to /usr/lib so that it serves as reference for
  syntax and option names and default values and is properly updated on package
  upgrades.
- Recommend to users to always use drop-ins for configuration and
  systemd-analyze cat-config to view the documentation.

This setting makes this change opt-in.

Fixes #18420.

[zjs: add more text to the description]
2023-10-17 18:57:45 +02:00
Zbigniew Jędrzejewski-Szmek ee691c802b Merge pull request #29242 from fbuihuu/update-main-config-file-headers
config files: update their header to reflect that they can be install…
2023-10-17 18:56:09 +02:00
Mike Yuan 087a25d2ca sleep-config: several cleanups
* Rename free_sleep_config to sleep_config_free
* Rearrange functions
* Make SleepConfig.modes and .states only contain
  operations that needs configuration
* Add missing assert
2023-09-27 21:48:39 +08:00
Mike Yuan f3afe9dc20 sleep/battery-capacity: rearrange functions 2023-09-27 21:48:39 +08:00
Mike Yuan 7f88eee935 sleep/battery-capacity: drop unused error-handling 2023-09-27 21:48:39 +08:00
Mike Yuan fbc1dbf296 sleep/battery-capacity: don't report we have trip alarm if no battery is found 2023-09-27 21:48:39 +08:00
Mike Yuan 54d7fcc6a3 sleep-util: split into sleep-config and hibernate-util 2023-09-27 21:48:39 +08:00
Mike Yuan 7d769198e0 sleep-util: split battery-capacity into sleep/
This is only used by sleep.c. Let's start shrinking down
the "mixed" sleep-util.
2023-09-27 21:48:39 +08:00
Mike Yuan 43309f14d9 sleep: rebreak lines in check_wakeup_type 2023-09-27 21:48:39 +08:00
Mike Yuan 1482feda01 sleep-util: move check_wakeup_type to sleep/sleep 2023-09-27 21:48:39 +08:00
Franck Bui c60801738c config files: update their header to reflect that they can be installed in /usr
Follow-up for c76f2fb0e5.
2023-09-21 18:54:39 +02:00
Franck Bui 58849483a4 config files: more recommendations of systemd-analyze cat-config
Follow-up for 3b0754b16c.
2023-09-19 17:47:57 +02:00
Mike Yuan 031a399d87 sleep: clear EFI HibernateLocation if writing kernel config fails
Follow-up for f1f331a252
2023-08-13 22:12:32 +01:00
Yu Watanabe 16b081d6ac meson: move declarations of ac-power, detect-virt, sysctl, and sleep 2023-08-01 15:54:45 +09:00
Franck Bui f1f331a252 sleep: don't init /sys/power/resume if 'resume=' option is missing and EFI is disabled
Otherwise in such case a first `systemctl hibernate` would fail but would still
initialize /sys/power/resume fooling a second `systemctl hibernate` into
believing that 'resume=' is correctly set and can be used by the resume process
to find the swap device to resume from.

Follow-up for #27330.
2023-07-27 12:30:40 +01:00
Luca Boccassi 03b70f060f sleep: fix unused variable warning
log_level_ignored is used only inside the ifdef, so declare it there too
2023-07-10 11:39:35 +01:00
Mike Yuan 7470b80763 sleep: refuse hibernation if there's no possible way to resume
Follow-up for 90efe8a6d4
Closes #19819
2023-06-26 17:23:36 +02:00
Mike Yuan 90efe8a6d4 sleep: write hibernate location to efivar HibernateLocation 2023-06-24 00:04:32 +08:00
Mike Yuan 1923373a64 sleep: always write resume_offset if possible
There's no need to conditionalize this.
Setting resume_offset=0 doesn't harm, and can even help
by overriding potentially existing half-written settings.
2023-06-23 23:57:49 +08:00
Lennart Poettering 4014172a8b sleep: rename sleep-config.[ch] → sleep-util.[ch]
The file long ceased to be exclusively about configuration of the sleep
operation. It contains many many calls for other purposes, hence give it
a more generic name.
2023-06-20 14:18:52 +02:00
Lennart Poettering 8601ecbc7c sleep-config: rename .device field to .path
This has been badly named given the path doesn't refer to a device quite
likely, but to a path to a regular file. Hence let's be more precise
with naming.

(.device kinda suggests this was an sd_device object of sorts, but it
really isn't.)
2023-06-20 13:21:28 +02:00
Lennart Poettering 1296b427a7 sleep-config: replace SwapEntry's .type field with a proper enum
Following our usual rule: let's parse this early into internal
representation, and stick to that. don't pass unparsed strings around
needlessly.
2023-06-20 13:14:06 +02:00
Lennart Poettering 319c46483e battery-util: move battery_is_discharging_and_low() to battery-util.[ch]
This moves a first batch of functions from sleep-config.[ch] over to
battery-util.[ch].

In the long run we should probably move even more stuff over, i.e.
anything that deals with the battery sysfs driver interface.

No code change.
2023-06-05 12:19:32 +02:00
David Tardon a29f13f296 sleep: convert a home1.Manager call to BusLocator 2023-05-24 08:33:22 +02:00
Lennart Poettering 4560d99e5e tre-wide: use FORMAT_DEVNUM() a bit more 2023-04-21 12:45:49 +02:00
Mike Yuan f05b4bb9a7 sleep: fix default values unmatched with manual 2023-03-18 02:28:22 +08:00
Mike Yuan e0b3a70fab sleep: check if we're on AC power before checking battery capacity
Before this commit, battery_is_low() returns
true if there's no battery on the system.
It's now modified to check if the system is
on AC power first, and returns false early
if that's the case.

Fixes #26492
2023-02-21 20:48:33 +01:00
Zbigniew Jędrzejewski-Szmek f274f8bf25 sleep: use shared constant for freeze timeout
Let's keep all the timeout definitions in one place.
2023-02-20 13:38:32 +01:00