web-dev-qa-db-ja.com

Ubuntu 15.04サスペンドは `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
6
Sir_FZ

Update:外部スクリプトを使用せずに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)。

実行して有効にします:systemctl enable suspend-save-backlight.service(またはあなたがそれを呼ぶもの)。 acpi_video0は/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は、これらのイベントでカスタムスクリプトを実行するための2つの類似したメカニズムを提供します。

そのため、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

詳細については、リンクされた記事を参照してください。

8
Sir_FZ