电源管理

来自 ArchWiki

电源管理是一项功能,可以在不活动时关闭电源或将系统组件切换到低功耗状态。

在 Arch Linux 中,电源管理包含两个主要部分

  1. 与硬件交互的 Linux 内核配置
  2. 用户空间工具的配置,这些工具与内核交互并对其事件做出反应。许多用户空间工具还允许以“用户友好”的方式修改内核配置。有关选项,请参阅 #用户空间工具

用户空间工具

这些工具允许您更改许多设置,而无需手动编辑配置文件。为了避免可能的冲突,请仅运行其中一个工具,因为它们的工作方式或多或少相似。查看电源管理类别,以大致了解 Arch Linux 中存在的电源管理选项。

这些是更流行的旨在帮助节电的脚本和工具

控制台

  • acpid — 一个用于传递具有 netlink 支持的 ACPI 电源管理事件的守护进程。
https://sourceforge.net/projects/acpid2/ || acpid
  • Laptop Mode Tools — 用于配置笔记本电脑节电设置的实用程序,被许多人认为是事实上的节电实用程序,尽管可能需要一些配置。
https://github.com/rickysarraf/laptop-mode-tools || laptop-mode-toolsAUR
  • libsmbios — 用于与 Dell SMBIOS 表交互的库和工具。
https://github.com/dell/libsmbios || libsmbios
  • powertop — 一种用于诊断功耗和电源管理问题的工具,以帮助设置节电设置。
https://github.com/fenrus75/powertop || powertop
  • powerstat — 一种使用 ACPI 或 Intel RAPL 接口测量功耗的工具。
https://github.com/ColinIanKing/powerstat || powerstatAUR
  • systemd — 一个系统和服务管理器。
https://systemd.io/ || systemd
  • TLP — 适用于 Linux 的高级电源管理。
https://linrunner.de/tlp || tlp
  • TuneD — 一个守护进程,用于执行系统中设备的监控和自适应配置
https://tuned-project.org || tuned
  • UPower — 用于枚举电源设备、监听设备事件以及查询历史记录和统计信息的抽象层。
https://upower.freedesktop.org || upower
https://gitlab.freedesktop.org/upower/power-profiles-daemon || power-profiles-daemon

图形界面

  • batsignal — 轻量级电池监视器,使用 libnotify 警告低电量。
https://github.com/electrickite/batsignal || batsignal
  • cbatticon — 轻巧快速的电池图标,位于系统托盘中。
https://github.com/valr/cbatticon || cbatticon
  • GNOME Power Statistics — GNOME 的系统电源信息和统计数据。
https://gitlab.gnome.org/GNOME/gnome-power-manager || gnome-power-manager
  • KDE Power Devil — Plasma 的电源管理模块。
https://invent.kde.org/plasma/powerdevil || powerdevil
  • LXQt Power Management — LXQt 的电源管理模块。
https://github.com/lxqt/lxqt-powermanagement || lxqt-powermanagement
  • MATE Power Management — MATE 的电源管理工具。
https://github.com/mate-desktop/mate-power-manager || mate-power-manager
  • MATE Power Statistics — MATE 的系统电源信息和统计数据。
https://github.com/mate-desktop/mate-power-manager || mate-power-manager
  • poweralertd — 用于传递 UPower 通知的守护进程。
https://git.sr.ht/~kennylevinsen/poweralertd || poweralertdAUR
  • powerkit — 桌面独立的电源管理器。
https://github.com/rodlie/powerkit || powerkitAUR
  • Xfce Power Manager — Xfce 的电源管理器。
https://docs.xfce.org/xfce/xfce4-power-manager/start || xfce4-power-manager
  • vattery — 用 Vala 编写的电池监控应用程序,将在系统托盘中显示笔记本电脑电池的状态。
https://www.jezra.net/projects/vattery.html || vatteryAUR

ACPI 事件

systemd 处理一些与电源相关的 ACPI 事件,其操作可以在 /etc/systemd/logind.conf/etc/systemd/logind.conf.d/*.conf 中配置 — 请参阅 logind.conf(5)。在没有专用电源管理器的系统上,这可能会取代通常用于响应这些 ACPI 事件的 acpid 守护进程。

每个事件的指定操作可以是 ignorepoweroffreboothaltsuspendhibernatehybrid-sleepsuspend-then-hibernatelockkexec 之一。对于休眠和挂起,必须正确设置它们。如果未配置事件,systemd 将使用默认操作。

事件处理程序 描述 默认操作
HandlePowerKey 当按下电源键/按钮时触发。 poweroff
HandleSuspendKey 当按下挂起键/按钮时触发。 suspend
HandleHibernateKey 当按下休眠键/按钮时触发。 hibernate
HandleLidSwitch 当盖子关闭时触发,除非在以下情况下。 suspend
HandleLidSwitchDocked 如果系统插入坞站或连接了多个显示器,则在盖子关闭时触发。 ignore
HandleLidSwitchExternalPower 如果系统连接到外部电源,则在盖子关闭时触发。 为 HandleLidSwitch 设置的操作

要应用更改,请重新加载 systemd-logind.service

注意
  • systemd 无法处理 AC 和电池 ACPI 事件,因此如果您使用 Laptop Mode Tools 或其他类似工具,仍然需要 acpid
  • 当在短时间内连续执行盖子开关操作时,logind 会将挂起操作延迟最多 90 秒,以检测可能的坞站。 [1] 此延迟在 systemd v220 中变为可配置。 [2] 您可以在 logind.conf 或其 drop-in 文件中使用例如 HoldoffTimeoutSec=30s

电源管理器

一些 桌面环境 包含电源管理器,这些管理器会抑制(暂时关闭)部分或全部 systemd ACPI 设置。如果此类电源管理器正在运行,则 ACPI 事件的操作可以仅在电源管理器中配置。只有当您希望为电源管理器未抑制的特定事件配置行为时,才需要对 /etc/systemd/logind.conf/etc/systemd/logind.conf.d/*.conf 进行更改。

请注意,如果电源管理器没有针对适当的事件抑制 systemd,您最终可能会遇到 systemd 挂起您的系统,然后在系统唤醒时,另一个电源管理器再次挂起它的情况。GNOME、MATE、Plasma 和 Xfce 的电源管理器会发出必要的抑制命令。如果未发出抑制命令,例如在使用 acpid 或其他程序处理 ACPI 事件时,请将 Handle 选项设置为 ignore。另请参阅 systemd-inhibit(1)

xss-lock

xss-lock 订阅 systemd 事件 suspendhibernatelock-sessionunlock-session,并执行适当的操作(运行锁屏程序并等待用户解锁或杀死锁屏程序)。xss-lock 还会响应 DPMS 事件,并运行或杀死锁屏程序作为响应。

例如,自动启动以下程序

$ xss-lock -- i3lock -n -i background_image.png &

节电

注意: 有关特定于笔记本电脑的电源管理(如电池监控)的信息,请参阅 笔记本电脑#电源管理。另请参阅特定于您的 CPU 和 GPU 的页面(例如,RyzenAMDGPU)。

本节是创建自定义脚本和节电设置(例如通过 udev 规则)的参考。确保设置不由其他实用程序管理,以避免冲突。

无论计算机是否使用交流电或电池供电,此处列出的大多数功能都值得使用。大多数功能对性能的影响可以忽略不计,并且由于常见的硬件/驱动程序问题,默认情况下未启用。降低功耗意味着减少热量,由于动态超频,这甚至可以提高现代 Intel 或 AMD CPU 的性能。

打印电源设置

此脚本打印 USB 和 PCI 设备的电源设置和各种其他属性。请注意,需要 root 权限才能查看所有设置。

#!/bin/bash

for i in $(find /sys/devices/ -name "bMaxPower")
do
	busdir=${i%/*}
	busnum=$(<$busdir/busnum)
	devnum=$(<$busdir/devnum)
	title=$(lsusb -s $busnum:$devnum)

	printf "\n\n+++ %s\n  -%s\n" "$title" "$busdir"

	for ff in $(find $busdir/power/ -type f ! -empty 2>/dev/null)
	do
		v=$(cat $ff 2>/dev/null|tr -d "\n")
		[[ ${#v} -gt 0 ]] && echo -e " ${ff##*/}=$v";
		v=;
	done | sort -g;
done;

printf "\n\n\n+++ %s\n" "Kernel Modules"
for mod in $(lspci -k | sed -n '/in use:/s,^.*: ,,p' | sort -u)
do
	echo "+ $mod";
	systool -v -m $mod 2> /dev/null | sed -n "/Parameters:/,/^$/p";
done

支持 Intel 硬件 P 状态的处理器

本文或本节是与 CPU 频率调节合并的候选对象。

注意: 更多上下文请参见主文章。(在 Talk:Power management 中讨论)

支持 Intel 硬件 P 状态 (HWP) 的处理器的可用能源偏好设置为 defaultperformancebalance_performancebalance_powerpower

可以通过运行以下命令进行验证

$ cat /sys/devices/system/cpu/cpufreq/policy*/energy_performance_available_preferences

为了节省更多能源,您可以通过创建以下文件来编辑配置

/etc/tmpfiles.d/energy_performance_preference.conf
w /sys/devices/system/cpu/cpufreq/policy*/energy_performance_preference - - - - balance_power

有关 Intel 处理器中能源-性能策略的更多详细信息,请参阅 x86_energy_perf_policy(8) 手册页。另请参阅 systemd-tmpfiles(8)tmpfiles.d(5) 手册页,了解临时文件/目录的详细信息。

音频

默认情况下是否启用节电取决于给定的驱动程序,例如,HD Audio 默认启用节电。 确定正在使用的模块,然后运行

$ modinfo --field=parm module_name | column --separator=':' --table --table-columns-limit=2

并查找调整或禁用节电功能的内核模块参数(如 power_save)。

注意: 节电功能可能会导致可听见的咔嗒声(爆音)和其他问题。有关相关解决方案,请参阅专用页面

背光

参见 背光

蓝牙

要完全禁用蓝牙,请将 btusbbluetooth 模块列入黑名单

或者,创建以下 udev 规则

/etc/udev/rules.d/50-bluetooth.rules
# disable bluetooth
SUBSYSTEM=="rfkill", ATTR{type}=="bluetooth", ATTR{state}="0"

要仅临时关闭蓝牙,请使用 rfkill(8)

# rfkill block bluetooth

网络摄像头

如果您不使用集成网络摄像头,则将 uvcvideo 模块列入黑名单

内核参数

本节使用 /etc/sysctl.d/ 中的配置,它是“内核 sysctl 参数的 drop-in 目录。” 有关更多信息,请参阅 The New Configuration Files 和更具体的 sysctl.d(5)

禁用 NMI 监视器

本文或本节需要扩充。

原因: 提供关于多少中断是大量中断的指导。(在 Talk:Power management 中讨论)

NMI 监视器是一种调试功能,用于捕获导致内核崩溃的硬件挂起。在某些系统上,它可能会生成大量中断,导致功耗显着增加。要列出自上次启动以来每个 CPU 核心的这些中断,您可以使用

$ grep NMI /proc/interrupts
NMI:     22     58     24     23     24     39     22     30   Non-maskable interrupts

要关闭硬锁死检测器,请使用

/etc/sysctl.d/disable_watchdog.conf
kernel.nmi_watchdog = 0

或将 nmi_watchdog=0 添加到内核行

或者,将 nowatchdog 添加到内核行以禁用硬锁死和软锁死检测器。请参阅 [3]

回写时间

增加虚拟内存脏数据回写时间有助于将磁盘 I/O 聚合在一起,从而减少跨磁盘写入,并提高节电效果。要将值设置为 60 秒(默认值为 5 秒)

/etc/sysctl.d/dirty.conf
vm.dirty_writeback_centisecs = 6000

要对受支持文件系统(例如 ext4、btrfs...)上的日志提交执行相同的操作,请在 fstab 中使用 commit=60 作为选项。

请注意,此值是作为以下笔记本电脑模式设置的副作用而修改的。另请参阅 sysctl#虚拟内存,了解影响 I/O 性能和节电的其他参数。

笔记本模式

请参阅内核文档中关于笔记本电脑模式“旋钮”的说明 - “旋钮的合理值为 5 秒”。

/etc/sysctl.d/laptop.conf
vm.laptop_mode = 5
注意: 此设置主要与旋转磁盘驱动器相关。

网络接口

网络唤醒可能是一项有用的功能,但如果您不使用它,那么它只是在挂起时等待魔术包而消耗额外的电量。您可以调整 网络唤醒#udev 规则以禁用所有以太网接口的功能。要在所有无线接口上使用 iw 启用节电

/etc/udev/rules.d/81-wifi-powersave.rules
ACTION=="add", SUBSYSTEM=="net", KERNEL=="wl*", RUN+="/usr/bin/iw dev $name set power_save on"

配置文件的名称很重要。通过在 systemd 中使用持久设备名称,上述网络规则(按字典顺序在 80-net-setup-link.rules 之后命名)在设备使用持久名称重命名后应用,例如 wlan0 重命名为 wlp3s0。请注意,RUN 命令在所有规则都已处理后执行,并且无论如何都必须使用持久名称,该名称在匹配设备的 $name 中可用。

Intel 无线网卡 (iwlwifi)

可以通过将正确的参数传递给内核模块来启用带有 iwlwifi 驱动程序的 Intel 无线网卡的附加节电功能。可以通过将以下行添加到 /etc/modprobe.d/iwlwifi.conf 文件来实现持久化

options iwlwifi power_save=1

此选项可能会增加您的中位数延迟

options iwlwifi uapsd_disable=0

在内核 < 5.4 上,您可以使用此选项,但它可能会降低您的最大吞吐量

options iwlwifi d0i3_disable=0

根据您的无线网卡,将应用这两个选项之一。

options iwlmvm power_scheme=3
options iwldvm force_cam=0

您可以通过检查正在运行的模块来检查哪个模块是相关的,方法是使用

# lsmod | grep '^iwl.vm'

请记住,这些节电选项是实验性的,可能会导致系统不稳定。

总线电源管理

主动状态电源管理

来自维基百科

主动状态电源管理 (ASPM) 是一种用于 PCI Express 设备的电源管理机制,旨在在设备处于完全活动状态时节省电能。主要通过主动状态链路电源管理来实现;即,当 PCI Express 串行链路没有流量时,它会被断电。它通常用于笔记本电脑和其他移动互联网设备,以延长电池寿命。

在启动时,BIOS 会根据硬件支持启用或禁用 ASPM。要检查是否支持

# lspci -vv | grep 'ASPM.*abled;'

使用以下命令获取可用的 ASPM 策略和当前系统默认值

$ cat /sys/module/pcie_aspm/parameters/policy
[default] performance powersave powersupersave

ASPM 可能因以下原因被禁用 [4]

  1. BIOS 确定需要这样做。
  2. PCIE 需要 ASPM,但 L0s 是可选的,因此您可能禁用了 L0s 而仅启用了 L1。
  3. 您的 BIOS 有缺陷。
  4. 您没有 BIOS,并且您的系统程序员尚未处理 ASPM。

如果您认为您的硬件支持 ASPM,尽管有上述情况,也可以强制启用它,以便内核使用 pcie_aspm=force 内核参数进行处理。

警告
  • 在不支持的系统上强制启用 ASPM 可能会导致功耗增加。此外,它可能会导致系统冻结或内核崩溃,因此请确保您有一种方法可以在不合适时撤消该选项。
  • 强制 ASPM 在内核中进行,因此它可能仍然在硬件中禁用并且无法工作。要检查是否是这种情况,请以 root 身份运行 dmesg | grep ASPM。如果可能,请查阅特定于您的硬件的 Wiki 文章以获取更多信息。

只要 ASPM 受支持且已启用,就可以为当前会话选择所需的策略。例如,通过执行以下操作将当前会话切换到 powersupersave

# echo powersupersave > /sys/module/pcie_aspm/parameters/policy

要配置在系统启动时启用的特定 ASPM 状态(以 powersupersave 为例),请添加 pcie_aspm.policy=powersupersave 作为内核参数

PCI 运行时电源管理

/etc/udev/rules.d/pci_pm.rules
SUBSYSTEM=="pci", ATTR{power/control}="auto"

上面的规则关闭了所有未使用的设备,但某些设备将无法再次唤醒。为了仅允许对已知可以工作的设备进行运行时电源管理,请使用针对供应商和设备 ID 的简单匹配(使用 lspci -nn 获取这些值)

/etc/udev/rules.d/pci_pm.rules
# whitelist for pci autosuspend
SUBSYSTEM=="pci", ATTR{vendor}=="0x1234", ATTR{device}=="0x1234", ATTR{power/control}="auto"

或者,要将无法使用 PCI 运行时电源管理的设备列入黑名单,并为所有其他设备启用它

/etc/udev/rules.d/pci_pm.rules
# blacklist for pci runtime power management
SUBSYSTEM=="pci", ATTR{vendor}=="0x1234", ATTR{device}=="0x1234", ATTR{power/control}="on", GOTO="pci_pm_end"

SUBSYSTEM=="pci", ATTR{power/control}="auto"
LABEL="pci_pm_end"

USB 自动挂起

Linux 内核可以在 USB 设备不使用时自动挂起它们。这有时可以节省相当多的电量,但是某些 USB 设备与 USB 节电不兼容,并开始出现异常行为(USB 鼠标/键盘常见)。基于白名单或黑名单过滤的 udev 规则可以帮助缓解此问题。

最简单且可能无用的示例是为所有 USB 设备启用自动挂起

/etc/udev/rules.d/50-usb_power_save.rules
ACTION=="add", SUBSYSTEM=="usb", TEST=="power/control", ATTR{power/control}="auto"

要仅允许对已知可以工作的设备进行自动挂起,请使用针对供应商和产品 ID 的简单匹配(使用 lsusb 获取这些值)

/etc/udev/rules.d/50-usb_power_save.rules
# whitelist for usb autosuspend
ACTION=="add", SUBSYSTEM=="usb", TEST=="power/control", ATTR{idVendor}=="05c6", ATTR{idProduct}=="9205", ATTR{power/control}="auto"

或者,要将无法使用 USB 自动挂起的设备列入黑名单,并为所有其他设备启用它

/etc/udev/rules.d/50-usb_power_save.rules
# blacklist for usb autosuspend
ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="05c6", ATTR{idProduct}=="9205", GOTO="power_usb_rules_end"

ACTION=="add", SUBSYSTEM=="usb", TEST=="power/control", ATTR{power/control}="auto"
LABEL="power_usb_rules_end"

默认的自动挂起空闲延迟时间由 usbcore 内置内核模块autosuspend 参数控制。要将延迟设置为 5 秒而不是默认的 2 秒,请为您的引导加载程序添加以下内核参数

usbcore.autosuspend=5

power/control 类似,可以通过设置 power/autosuspend 属性来微调每个设备的延迟时间。这意味着,或者,可以通过将 power/autosuspend 设置为 -1(即,永不自动挂起)来禁用自动挂起

/etc/udev/rules.d/50-usb_power_save.rules
ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="05c6", ATTR{idProduct}=="9205", ATTR{power/autosuspend}="-1"

有关 USB 电源管理的更多信息,请参阅 Linux 内核文档

SATA 主动链路电源管理

可以从 /sys/class/scsi_host/host*/link_power_management_policy 读取或写入当前设置,如下所示

$ grep . /sys/class/scsi_host/host*/link_power_management_policy
$ echo "med_power_with_dipm" >/sys/class/scsi_host/hostN/link_power_management_policy
可用的 ALPM 设置
设置 描述 节电
max_performance 当前默认值
medium_power - ~1.0 瓦
med_power_with_dipm 推荐设置1 ~1.5 瓦
min_power 警告:可能的数据丢失2 ~1.5 瓦
  1. 自 Linux 4.15 起,有一个名为 med_power_with_dipm 的设置,它与 Windows IRST 驱动程序设置的行为相匹配,并且不应导致最近的 SSD 或 HDD 数据丢失。节电效果可能很显着,范围从 1.0 到 1.5 瓦(空闲时)。它已成为 Linux 4.16 [5] 中基于 Intel 的笔记本电脑的默认设置。
  2. 警告: min_power SATA 主动链路电源管理设置可能导致某些设备上的数据丢失。除非您有频繁的备份,否则不要启用此设置。

您可以通过添加 udev 规则文件来持久配置 link_power_management_policy 设置,例如

/etc/udev/rules.d/hd_power_save.rules
ACTION=="add", SUBSYSTEM=="scsi_host", KERNEL=="host*", ATTR{link_power_management_policy}="med_power_with_dipm"
注意
  • 这会在访问空闲驱动器时增加延迟,因此它是少数可能值得根据您是否使用交流电源来切换的设置之一。
  • 并非所有 SATA 主机控制器和存储设备的组合都与默认的 med_power_with_dipm 设置配合良好。例如
    • 截至 linux-6.8.1 版本,当访问 Crucial M550 固态硬盘(固件版本 MU02)时,Intel 7 系列芯片组控制器会出现超时和链路降级问题。
    • 截至 linux-6.9.6 版本,搭配 HL-DT-ST BDDVDRW GGC-H20L 光盘驱动器的 AMD 600 系列芯片组 SATA 控制器存在一个恼人的问题,即 ROM 驱动器会每隔几分钟发出噪音并重新初始化。
在这种情况下,使用 medium_power 设置可以解决问题。

硬盘驱动器

参阅 hdparm#电源管理配置 以了解可以设置的驱动器参数。

当太多程序频繁写入磁盘时,节能效果不佳。跟踪所有程序及其写入磁盘的方式和时间是限制磁盘使用率的方法。使用 iotop 查看哪些程序频繁使用磁盘。参阅 改善性能#存储设备 以获取其他技巧。

诸如设置 noatime 选项这样的小调整也有帮助。如果可用 RAM 足够,请考虑禁用或限制 swappiness,因为它有可能限制大量的磁盘写入。

对于使用 PowerChoice 技术的希捷硬盘,通过 hdparm 设置 APM 的技巧由于 EPC(扩展电源条件)功能而不起作用。您可以 安装 openseachestAUR 并完全禁用 EPC,如下所示(将 X 替换为实际驱动器盘符)

# openSeaChest_PowerControl --scan
# openSeaChest_PowerControl -d /dev/sdX -i
# openSeaChest_PowerControl -d /dev/sdX --showEPCSettings
# openSeaChest_PowerControl -d /dev/sdX --EPCfeature disable
# openSeaChest_PowerControl -d /dev/sdX --showEPCSettings

最后一次调用将给出以下摘要

==========================================================================================
 openSeaChest_PowerControl - openSeaChest drive utilities - NVMe Enabled
 Copyright (c) 2014-2023 Seagate Technology LLC and/or its Affiliates, All Rights Reserved
 openSeaChest_PowerControl Version: 3.3.1-4_1_1 X86_64
 Build Date: Jul  4 2023
 Today: Tue Jul  4 17:49:36 2023        User: root
==========================================================================================

/dev/sdX - ST1000NM0008-2F2100 - ZFA19JG2 - SN02 - ATA


===EPC Settings===
        * = timer is enabled
        C column = Changeable
        S column = Savable
        All times are in 100 milliseconds

Name       Current Timer Default Timer Saved Timer   Recovery Time C S
Idle A      0            *10           *10           1             Y Y
Idle B      0            *1200         *1200         3             Y Y
Idle C      0             6000          6000         16            Y Y
Standby Z   0             9000          9000         46            Y Y

第一列中的零确认已成功禁用磁头停靠和停止转动

工具和脚本

本文或本节需要改进语言、wiki 语法或风格。请参阅 Help:Style 以获取参考。

原因:电源节省 合并而来,需要重新组织以适应此页面。(在 Talk:Power management 中讨论)

使用脚本和 udev 规则

本文或本节是与 Laptop#电源管理 合并的候选对象。

注意: 也许更适合特定于笔记本电脑的页面。(在 Talk:Power management 中讨论)

由于 systemd 用户可以通过 systemctl suspendsystemctl hibernate 来挂起和休眠,并通过 /etc/systemd/logind.conf 处理 acpi 事件,因此移除 pm-utilsacpid 可能会很有趣。systemd 无法做到一件事(截至 systemd-204):根据系统是在交流电还是电池供电的情况下进行电源管理。为了填补这个空白,您可以创建一个单独的 udev 规则,在交流适配器插入和拔出时运行脚本

/etc/udev/rules.d/powersave.rules
SUBSYSTEM=="power_supply", ATTR{online}=="0", RUN+="/path/to/your/script true"
SUBSYSTEM=="power_supply", ATTR{online}=="1", RUN+="/path/to/your/script false"
注意: 您可以使用 pm-powersave 使用的相同脚本。您只需要使其可执行并将其放置在其他位置(例如 /usr/local/bin/)。

节能脚本示例

上面的 udev 规则应该按预期工作,但如果您的电源设置在挂起或休眠周期后未更新,您应该在 /usr/lib/systemd/system-sleep/ 中添加一个包含以下内容的脚本

/usr/lib/systemd/system-sleep/00powersave
#!/bin/sh

case $1 in
    pre) /path/to/your/script false ;;
    post)
	if cat /sys/class/power_supply/AC0/online | grep 0 > /dev/null 2>&1
	then
    		/path/to/your/script true
	else
    		/path/to/your/script false
	fi
    ;;
esac
exit 0

不要忘记使其可执行!

注意: 请注意,您的笔记本电脑的 AC0 可能不同,如果情况如此,请更改它。

允许用户关机

本文或本节需要改进语言、wiki 语法或风格。请参阅 Help:Style 以获取参考。

原因:允许用户关机 合并而来,需要重新组织以适应此页面。(在 Talk:Power management 中讨论)

按钮和盖子事件

挂起、关机和休眠按钮按下以及盖子关闭事件由 logind 处理,如 #ACPI 事件 中所述。

使用 systemd-logind

如果您正在使用 polkit,则具有非远程会话的用户只要 会话未中断,就可以发出与电源相关的命令。

检查您的会话是否处于活动状态

$ loginctl show-session $XDG_SESSION_ID --property=Active

然后,用户可以在命令行中使用 systemctl 命令,或将其添加到菜单中

$ systemctl poweroff
$ systemctl reboot

也可以使用其他命令,包括 systemctl suspendsystemctl hibernate。请参阅 systemctl(1) 中的系统命令部分。

使用 sudo

安装 sudo,并授予用户 sudo 权限。然后,用户将能够使用 sudo systemctl 命令(例如 sudo systemctl poweroffsudo systemctl rebootsudo systemctl suspendsudo systemctl hibernate)。请参阅 systemctl(1) 中的系统命令部分

没有 sudo 权限的用户

如果只应允许用户使用关机命令,但不具有其他 sudo 权限,则以 root 身份使用 visudo 命令将以下内容添加到 /etc/sudoers 的末尾。将 user 替换为您的用户名,将 hostname 替换为机器的主机名。

user hostname =NOPASSWD: /usr/bin/systemctl poweroff,/usr/bin/systemctl halt,/usr/bin/systemctl reboot

现在您的用户可以使用 sudo systemctl poweroff 关机,并使用 sudo systemctl reboot 重启。希望关闭系统的用户也可以使用 sudo systemctl halt。仅当您不想被提示输入密码时才使用 NOPASSWD: 标签。

另请参阅