我正在寻找一种方法来防止 tvheadend(或 vdr)正在录制时关机/待机。
我目前发现的情况:
rsnapshot 运行时防止关机:我不喜欢它,因为它要求 tvheadend 具有 root 权限,并且引用的链接似乎提供了不再起作用的变体。
电视头端唤醒:设置唤醒时间没问题。但是 pm-suspend 不会检查 KDE 会话是否处于活动状态,而是会立即暂停。
我怎样才能使关机不需要管理员密码?:仅适用于非常特殊的情况:检查用户是否登录
我看到两种解决方案:
- TVHeadend 脚本调用一些 KDE 函数来询问 KDE 状态(屏幕锁定、用户登录等)并发出关机/暂停调用,如上例所示。
- 或者修改 KDE 的关机行为,以便它检查任何 TVH 录制当前是否处于活动状态。
我找不到有关这两个变体的任何文档。
答案1
找到了一个非常简单的解决方案!
创建一个文件/etc/pm/sleep.d/70-check-recordings
。
在此文件中检查当前是否有录音。如果是,则返回exit 1
。就是这样。暂停将被中止。
我的脚本如下所示,它基于这是 tvheadend。
$ cat /etc/pm/sleep.d/00-check-recordings
#!/bin/bash
#
# this script sets ACPI Wakeup alarm and stops standby if a recording is active
# safe_margin - minutes to start up system before the earliest timer
# bootup system x sec. before timer
safe_margin=60
# modify if different location for tvheadend dvr/log path
cd ~hts/.hts/tvheadend/dvr/log
######################
start_date=0
stop_date=0
current_date=`date +%s`
for i in $( ls ); do
tmp_start=`cat $i | grep '"start":' | cut -f 2 -d " " | cut -f 1 -d ","`
tmp_stop=`cat $i | grep '"stop":' | cut -f 2 -d " " | cut -f 1 -d ","`
# logger "$0: $i from $(date -d @$tmp_start) to $(date -d @$tmp_stop)"
start_extra=`cat $i | grep '"start_extra":' | cut -f 2 -d " " | cut -f 1 -d ","`
stop_extra=`cat $i | grep '"stop_extra":' | cut -f 2 -d " " | cut -f 1 -d ","`
let tmp_start=$tmp_start-$start_extra*60
let tmp_stop=$tmp_stop+$stop_extra*60
# logger "$0: $i from $(date -d @$tmp_start) to $(date -d @$tmp_stop)"
# if recording is active, immediately stop suspend
# tmp_stop > now and tmp_start < now
if [ $((tmp_stop)) -gt $((current_date)) -a $((tmp_start)) -lt $((current_date)) ]; then
name=`grep -h -A 1 title $i | grep -v title | sed 's/.*: "\(.*\)"$/\1/'`
logger "$0: Currently RECORDING $name. No Suspend until $(date -d @$tmp_stop!)"
exit 1;
fi
# only check future recordings
# tmp_stop > now and tmp_start > now
if [ $((tmp_stop)) -gt $((current_date)) -a $((tmp_start)) -gt $((current_date)) ]; then
# take lower value (tmp_start or start_date)
# (start_date = 0) or (tmp_start < start_date)
if [ $((start_date)) -eq 0 -o $((tmp_start)) -lt $((start_date)) ]; then
start_date=$tmp_start
stop_date=$tmp_stop
name=`grep -h -A 1 title $i | grep -v title | sed 's/.*: "\(.*\)"$/\1/'`
fi
fi
done
wake_date=$((start_date-safe_margin))
# set up wakeup alarm
if [ $((start_date)) -ne 0 ]; then
logger "$0: Set Wakealarm for $name to $(date -d @$wake_date)"
echo 0 > /sys/class/rtc/rtc0/wakealarm
echo $wake_date > /sys/class/rtc/rtc0/wakealarm
fi
现在设置 KDE 以处理超时后的待机。如果正在录制,则上述脚本将中止 KDE 待机。
也可以看看MythTV 文档中有此内容。
答案2
使用咖啡因。这是一个应用程序,可防止在某些应用程序运行时触发电源管理操作。然后您可以进入system settings
->power management
并将该应用程序添加到列表中。
答案3
我编写了一个脚本,根据 Tvheadend 活动关闭和唤醒系统。当 Tvheadend 处于活动状态时,它不会暂停您的系统。您可以在GitHub。