跳至內容

電源管理

出自 Arch Linux 中文维基

電源管理這個功能可以在系統組件不工作時切斷其電源或將其切換到低耗電模式。

Arch 中的電源管理包含兩個主要部分:

  1. 配置與硬體交互的 Linux 內核
  2. 配置用戶空間工具,這些工具與內核交互並對其事件作出反應。許多用戶空間工具還允許以「用戶友好」的方式修改內核配置。有關選項,參見#用戶空間工具

用戶空間工具

[編輯 | 編輯原始碼]

這些工具允許你更改許多設置,而無需手動編輯配置文件。請勿同時運行多個程序,以避免衝突,因為它們的工作方式基本類似。更多電源管理選項請參考電源管理分類

下面是一些比較流行的節能工具:

命令行工具

[編輯 | 編輯原始碼]
  • 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 tables 交互的庫和工具.
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 設置的操作

要應用更改,請 reload 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 掛起系統,然後在系統喚醒時,另一個電源管理器再次掛起它的情況。GNOMEMATEPlasmaXfce 的電源管理器會發出必要的 inhibited 命令。如果沒有發出 inhibited 命令,例如在使用 acpid 或其他工具處理 ACPI 事件時,請將 Handle 選項設置為 ignore。另見 systemd-inhibit(1)

xss-lock

[編輯 | 編輯原始碼]

xss-lock 訂閱 systemd 事件 suspendhibernatelock-sessionunlock-session,並執行適當的操作(運行鎖屏程序並等待用戶解鎖或終止鎖屏程序)。xss-lock 還會響應 DPMS 事件,並根據需要運行或終止鎖屏程序。

例如,Autostart 以下內容:

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

節能

[編輯 | 編輯原始碼]
注意:參見 筆記本電腦#電源管理 了解特定於筆記本電腦的電源管理,如電池監控。另見特定於 CPU 和 GPU 的頁面(例如,Ryzen, AMDGPU)。

本節是創建自定義腳本和節能設置(如 udev 規則)的參考資料。確保設置不由其他實用程序管理,以避免衝突。

這裡列出的幾乎所有特性都值得使用,無論計算機使用交流電還是電池電源。其中大多數對性能的影響可以忽略不計,只是由於通常的硬體/驅動程序故障而在默認情況下沒有啟用。減少能源使用意味著減少熱量,由於動態超頻,在現代英特爾或 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" "內核模塊"
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 HWP (Intel Hardware P-state) 的處理器

[編輯 | 編輯原始碼]

本文或本章節可能需要合併到CPU frequency scaling

附註: More context in the main article.(在 Talk:電源管理 中討論)

支持 HWP 的處理器的可用能源首選項有 default, performance, balance_performance, balance_power, power

這可以通過運行

$ 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

參見 x86_energy_perf_policy(8) 手冊頁獲取關於 Intel 處理器能源性能策略的更多信息。另見 systemd-tmpfiles(8)tmpfiles.d(5) 手冊頁獲取臨時文件/目錄的詳細信息。

音頻

[編輯 | 編輯原始碼]

默認情況下,音頻節能功能是否開啟取決於驅動程序,例如 HD Audio 默認開啟。識別正在使用的模塊,然後運行

$ modinfo --field=parm 模块名称 | column --separator=':' --table --table-columns-limit=2

並查找調整或禁用節能功能的內核模塊參數(如 power_save)。

背光

[編輯 | 編輯原始碼]

背光

藍牙

[編輯 | 編輯原始碼]

要完全禁用藍牙,請將 btusbbluetooth 模塊列入黑名單

或者,創建以下 udev 規則:

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

要僅暫時關閉藍牙,使用 rfkill(8)

# rfkill block bluetooth

網絡攝像頭

[編輯 | 編輯原始碼]

如果你不使用集成的網絡攝像頭,將 uvcvideo 模塊加入黑名單

內核參數

[編輯 | 編輯原始碼]

本節使用 /etc/sysctl.d/ 中的配置,它是「內核 sysctl 參數的插入式目錄」。有關更多信息,參見 The New Configuration Files 和更具體的 sysctl.d(5)

禁用 NMI 看門狗

[編輯 | 編輯原始碼]

這篇文章的某些內容需要擴充。

原因:提供關於多少中斷算是大量中斷的指導。 (在 Talk:電源管理 中討論)

NMI(不可屏蔽中斷)看門狗是一個調試特性,用於捕捉導致內核 panic 的硬體中斷。在某些系統上,它會產生大量的中斷,導致用電量明顯增加。要列出自上次啟動以來每個 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
注意:此設置主要與自旋磁碟驅動器有關。

網絡接口

[編輯 | 編輯原始碼]

網絡喚醒英語Wake-on-LAN可能是一個有用的功能,但如果你不使用它,那麼在掛起時等待魔術包只會消耗額外的電量。您可以調整網絡喚醒#udev英語Wake-on-LAN#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 中使用持久設備名稱,在設備重命名為持久名稱(例如,wlan0 重命名為 wlp3s0,將應用上述網絡規則(以 80-net-setup-link.rules 的字典命名)。請注意,在處理完所有規則之後,將執行 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 可能會導致功耗增加。此外,它可能會導致系統凍結或內核 panic,因此請確保如果該選項不合適,您有辦法撤消它。
  • 強制啟用 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"
SUBSYSTEM=="ata_port", KERNEL=="ata*", ATTR{device/power/control}="auto"

上述規則會關閉所有未使用的設備。

某些設備不會再次喚醒。要僅對已知可以工作的設備進行運行時電源管理,請使用對應供應商和設備ID的簡單匹配(使用 lspci -nn 獲取這些值):

/etc/udev/rules.d/pci_pm.rules
# PCI 自動掛起的白名單
SUBSYSTEM=="pci", ATTR{vendor}=="0x1234", ATTR{device}=="0x1234", ATTR{power/control}="auto"

或者,將不能使用 PCI 運行時電源管理的設備列入黑名單,並為所有其他設備啟用:

/etc/udev/rules.d/pci_pm.rules
# PCI 運行時電源管理的黑名單
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 自動掛起

[編輯 | 編輯原始碼]

當 USB 設備不使用時,Linux 內核可以自動掛起它們。這有時可以節省相當多的電量,但某些 USB 設備與 USB 節能不兼容,並開始出現錯誤行為(USB 滑鼠/鍵盤常見)。基於白名單或黑名單過濾的 udev 規則可以幫助緩解問題。

以下示例為所有 USB 設備啟用自動掛起,但鍵盤和滑鼠除外:

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

要僅允許已知可以工作的設備進行自動掛起,請使用對應供應商和產品 ID 的簡單匹配(使用 lsusb 獲取這些值):

/etc/udev/rules.d/50-usb_power_save.rules
# USB 自動掛起的白名單
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
# USB 自動掛起的黑名單
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"

參見 Linux 內核文檔獲取關於 USB 電源管理的更多信息。

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 中基於 Intel 的筆記本電腦的默認設置 [5]。在 Linux 6.11 中,它成為默認設置 [6]
  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,Intel 7 系列晶片組控制器在訪問 Crucial M550 SSD(固件 MU02)時會出現超時和鏈路退化。
    • 截至 linux-6.9.6,AMD 600 系列晶片組 SATA 控制器與 HL-DT-ST BDDVDRW GGC-H20L 光碟驅動器一起使用時,會產生令人討厭的效果,即每隔幾分鐘就會重新初始化光碟驅動器。
在這種情況下,使用 medium_power 設置可以解決問題。

硬碟驅動器

[編輯 | 編輯原始碼]

有關可以設置的驅動器參數,請參見hdparm#電源管理配置

當有太多程序頻繁寫入硬碟時,節能效果不佳。跟蹤所有程序,獲取它們如何以及何時寫入硬碟以限制磁碟使用。使用 iotop 查看哪些程序經常使用磁碟。有關其他提示,請參見性能優化#存儲設備

諸如設置 noatime 選項之類的小事情也會有所幫助。如果有足夠的 RAM 可用,請考慮禁用或限制交換值,因為它可能會限制大量的磁碟寫操作。

對於具有 PowerChoice 技術的希捷驅動器,通過 hdparm 設置 APM 的技巧將不起作用,因為 EPC(擴展電源條件)功能。與其設置 APM,您可以 安裝 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

Zeroes in the first column confirm that parking and spindown were disabled successfully

工具和腳本

[編輯 | 編輯原始碼]

本文或本章節的語言、語法或風格需要改進。參考:幫助:風格

原因:Merged from Power saving, needs reorganization to fit into this page.(在Talk:電源管理討論)

使用腳本和 udev 規則

[編輯 | 編輯原始碼]

本文或本章節可能需要合併到Laptop#Power management

附註: 可能更適合放在筆記本電腦專用頁面。(在 Talk:電源管理 中討論)

由於 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 可能與您的筆記本電腦不同,如果是這樣,請更改它。

允許用戶關機

[編輯 | 編輯原始碼]

本文或本章節的語言、語法或風格需要改進。參考:幫助:風格

原因:Merged from Allow users to shutdown, needs reorganization to fit into this page.(在Talk:電源管理討論)

按鈕和筆記本蓋事件

[編輯 | 編輯原始碼]

按掛起、關機、休眠按鈕以及筆記本蓋關閉事件由 logind 處理,請參考 #ACPI events

使用 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 poweroff, sudo systemctl reboot, sudo 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: 標籤。

另見

[編輯 | 編輯原始碼]