Sir*_*_FZ 6 suspend backlight pm-utils systemd 15.04
升级到 Ubuntu GNOME 15.04(从 14.10 开始)后,我注意到我的pm-utils钩子在/etc/pm/sleep.d挂起/恢复时不再运行。
我有一个自定义脚本,它在暂停前保存亮度并在恢复后恢复它。如果我手动运行sudo pm-suspend钩子执行,但如果我关闭笔记本电脑的盖子(暂停 Ubuntu),则不会执行脚本。我错过了什么吗?
/etc/pm/sleep.d 中的亮度脚本是(适用于 14.04 和 14.10):
#!/bin/bash
case "$1" in
suspend|suspend_hybrid|hibernate)
cat /sys/class/backlight/acpi_video0/brightness > /tmp/.brightness_level
# modprobe -r nvidiabl
;;
resume|thaw)
# modprobe nvidiabl
cat /tmp/.brightness_level > /sys/class/backlight/acpi_video0/brightness
rm /tmp/.brightness_level
;;
esac
Run Code Online (Sandbox Code Playgroud)
更新:找到了一个更好的解决方案systemd,无需外部脚本。创建并启用以下服务:
[Unit]
Description=Save brightness on suspend
DefaultDependencies=no
RequiresMountsFor=/var/lib/systemd/backlight
Before=sleep.target
StopWhenUnneeded=yes
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/lib/systemd/systemd-backlight save acpi_video0
ExecStop=/lib/systemd/systemd-backlight load acpi_video0
TimeoutSec=90s
[Install]
WantedBy=sleep.target
Run Code Online (Sandbox Code Playgroud)
Ubuntu 16.04 注意:目标背光设备名称应以“backlight:”为前缀(例如backlight:acpi_video0)。
通过执行启用:(systemctl enable suspend-save-backlight.service或任何您称之为的)。请注意,acpi_video0 是/sys/class/backlight用于控制显示亮度的背光符号链接的名称,可能因系统而异。
以上使用 systemd 的systemd-backlight可执行文件分别在挂起前和恢复后保存和加载亮度(灵感来自/lib/systemd/system/systemd-backlight@.service在重启/启动时保存/加载亮度)。
旧解决方案(将systemd服务链接到我的 pm-utils 挂起钩子)
发现问题了。根据这篇 ArchWiki 文章:
systemd 在使用 systemctl suspend、systemctl hibernate 或 systemctl hybrid-sleep 时不使用 pm-utils 使机器进入睡眠状态;pm-utils 钩子,包括任何自定义钩子,将不会运行。但是,systemd 提供了两种类似的机制来对这些事件运行自定义脚本。
因此,正确的做法systemd(在 15.04 中默认使用)是创建以下服务文件,这些文件执行我的亮度控制脚本,/etc/pm/sleep.d/如下所示:
/etc/systemd/system/root-suspend.service:
[Unit]
Description=Local system suspend actions
Before=sleep.target
[Service]
Type=simple
ExecStart=-/etc/pm/sleep.d/nvidiabl_brightness suspend
[Install]
WantedBy=sleep.target
Run Code Online (Sandbox Code Playgroud)/etc/systemd/system/root-resume.service:
[Unit]
Description=Local system resume actions
After=suspend.target
[Service]
Type=simple
ExecStart=-/etc/pm/sleep.d/nvidiabl_brightness resume
[Install]
WantedBy=suspend.target
Run Code Online (Sandbox Code Playgroud)然后运行以下命令来启用这些服务:
systemctl enable root-suspend.service
systemctl enable root-resume.service
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息,请参阅链接的文章。