升级到 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
答案1
更新:找到了一种更好的解决方案,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
Ubuntu 16.04 注意事项:目标背光设备名称应以“backlight:”为前缀(例如backlight:acpi_video0
)。
通过执行以下命令启用:(或任何您称之为的命令)。请注意,acpi_video0 是用于控制显示亮度的systemctl enable suspend-save-backlight.service
背光符号链接的名称,在不同的系统上可能会有所不同。/sys/class/backlight
上面使用 systemd 的systemd-backlight
可执行文件分别保存和加载挂起前和恢复后的亮度(灵感来自于在重启/启动时保存/加载亮度)。/lib/systemd/system/[email protected]
旧解决方案(将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
/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
然后运行以下命令来启用这些服务:
systemctl enable root-suspend.service
systemctl enable root-resume.service
请参阅链接的文章了解更多详细信息。