睡眠脚本:未通过 pm-hibernate 执行

睡眠脚本:未通过 pm-hibernate 执行

我编写了一个脚本,该脚本应在固定 PC(无笔记本)上休眠之前和之后执行(见下文)。 该脚本卸载并重新加载 DVB 和网络模块,并放置在 中/lib/systemd/system-sleep/40_devb_reload.sh 如果我通过已安装的 Kubuntu 19.04 系统的 GUI 启动休眠,则此脚本会起作用。 但是,如果我sudo pm-hibernate在终端中执行命令或 python 脚本正在执行此命令(check_output("sudo pm-hibernate", shell=True)),则不会执行休眠脚本(通过脚本正在写入的日志文件验证)但休眠本身会起作用。 第一种方法是在休眠之前执行脚本。 但是我使用的 python 脚本没有 root 权限,因此必须由系统启动执行。 注意(我不知道这是否相关):我允许特定用户“media”sudo pm-hibernate通过 中的条目执行,而无需输入 root 密码etc/sudoers.d/

现在的问题是:bash/python 脚本如何通过执行睡眠脚本进入休眠状态?

#!/bin/bash
export DISPLAY=:0
timestamp=$(date +"%Y-%m-%d_%H-%M-%S")


echo "$timestamp: DVB suspend script started." >> /home/media/Profile/Scripts/suspend.log
case "$1" in  
    pre)
        /etc/init.d/tvheadend stop
        rmmod ddbridge
        rmmod cxd2841er 
        rmmod dvb_core

        echo "$timestamp: Modules unloaded." >> /home/media/Profile/Scripts/suspend.log
        ;;
    post)
        #restart network driver due hibernate issue on ubuntu 19
        rmmod e1000e
        modprobe e1000e
        modprobe dvb_core
        modprobe cxd2841er
        modprobe ddbridge
        /etc/init.d/tvheadend start
        echo "$timestamp: Modules reloaded." >> /home/media/Profile/Scripts/suspend.log
        ;;
esac

答案1

经过一些测试,我找到了一个解决方案:与调用相比sudo pm-hibernate,使用sudo systemctl hibernate似乎会触发所有副作用,包括执行脚本,/lib/systemd/system-sleep/ 这在终端以及上面的 python 调用中都有效。

相关内容