无法将 sleep hook 适配到 systemd

use*_*377 5 suspend wakeup systemd 15.04

出于某种原因,我的机器出现暂停问题,具体来说,它在暂停后立即恢复。经过一些研究,我能够通过使用以下循环在 14.04 上解决这个问题,根据这个答案:https : //askubuntu.com/a/268172

#!/bin/bash
case $1 in
    hibernate)
            echo "Going to suspend to disk!"
            ;;
    suspend)
            echo "Fixing acpi settings."
            for usb in 'XHC' 'EHC1' 'EHC2';
            do
                    state=`cat /proc/acpi/wakeup | grep $usb | cut -f3 | cut -d' ' -f1 | tr -d '*'`
                    echo "device = $usb, state = $state"
                    if [ "$state" == "enabled" ]
                    then
                            echo $usb > /proc/acpi/wakeup
                    fi
            done
            echo "Suspending to RAM."
            ;;
    thaw)
            echo "Suspend to disk is now over!"
            ;;
    resume)
            echo "We are now resuming."
            ;;
    *)
            echo "Somebody is callin me totally wrong."
            ;;
esac
Run Code Online (Sandbox Code Playgroud)

但是,使用新的 systemd,此解决方案不再起作用,我设法在 /usr/lib/systemd/system-sleep/ 上创建并放置了相同的脚本,但是这不起作用,因为它不执行,这是我日志的输出:

may 22 22:59:43 waiobook systemd[1]: Starting Suspend...
may 22 22:59:43 waiobook systemd-sleep[1372]: Suspending system...
may 22 22:59:49 waiobook systemd-sleep[1372]: System resumed.
may 22 22:59:49 waiobook systemd[1]: Started Suspend.
may 22 20:09:03 waiobook systemd[1]: Starting Suspend...
may 22 20:09:03 waiobook systemd-sleep[2674]: Suspending system...
may 22 20:09:07 waiobook systemd-sleep[2674]: System resumed.
may 22 20:09:07 waiobook systemd[1]: Started Suspend.
Run Code Online (Sandbox Code Playgroud)

所以我猜我在脚本上做错了什么?

任何帮助都值得赞赏。

Mar*_*ton 1

脚本参数以及目录都已更改。$1是在简历/解冻上“后”,否则是“前”。$2在这两种情况下都包含“挂起”、“休眠”或“混合睡眠”。修改你的例子:

#!/bin/bash
case $1 in
pre) case $2 in
    hibernate)
            echo "Going to suspend to disk!"
            ;;
    hybrid-sleep)
            echo "Going to suspend to disk and ram!"
            ;;
    suspend)
            echo "Fixing acpi settings."
            for usb in 'XHC' 'EHC1' 'EHC2';
            do
                    state=`cat /proc/acpi/wakeup | grep $usb | cut -f3 | cut -d' ' -f1 | tr -d '*'`
                    echo "device = $usb, state = $state"
                    if [ "$state" == "enabled" ]
                    then
                            echo $usb > /proc/acpi/wakeup
                    fi
            done
            echo "Suspending to RAM."
            ;;
    *)
            echo "Somebody is callin me totally wrong."
            ;;
    esac ;;

post)
        echo "We are now resuming from $2."
        ;;
*)
        echo "Somebody is callin me totally wrong."
        ;;
esac
Run Code Online (Sandbox Code Playgroud)