我编写了一个脚本,该脚本应在固定 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 调用中都有效。