Ubuntu 15.04 Suspend 不运行“pm-suspend”

Ubuntu 15.04 Suspend 不运行“pm-suspend”

升级到 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/如下方式执行我的亮度控制脚本:

  1. /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
    
  2. /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

请参阅链接的文章了解更多详细信息。

相关内容