Na starém Pentiu III mi běží skladiště fotek, které se mi již nevejdou do notebooku, na diskovém poli. Druhá hlavní služba, kterou poskytuje je stream televizních kanálů do domácí sítě. V minulosti jsem používal vlastní řešení v podobě getstream, ale obsluha byla zbytečně složitá a nahrávání pomocí gnome-dvb-daemon stálo za houby. Pak jsem objevil XBMC a TVheadend. Vše funguje, jen bych rád, aby se počítač sám zapínal před nahráváním nočních pořadů. Bohužel suspend na něm nefunguje korektně, zato má v BIOS Wake on Alarm. S tím už jsem jednou koketoval a nefungovalo to, protože bylo třeba zaškrtnou i Wake on PME, pak se rozběhlo i WoL. Teď skriptování.
Tady máme pěkný návod, který se ale věnuje uspávání, to se mě nehodí, zkoušel jsem různé nejapné nápady a nakonec se poučil na odkazu k MythTV z výše zmíněné stránky a utvořil hybrid mezi oběma. Nuže:
nano /etc/init.d/wakeup
pojmenujte libovolně nekonfliktně, já jsem to ponechal, abych nemusel měnit celý skript.
Vložte řádky:
#!/bin/sh ### BEGIN INIT INFO # Provides: wakeup # Required-Start: # Required-Stop: # Default-Start: # Default-Stop: 0 1 6 # Short-Description: Start NTP daemon ### END INIT INFO PATH=/sbin:/bin:/usr/sbin:/usr/bin . /lib/lsb/init-functions NAME=wakeup case $1 in stop) # Make it wakeup from ethernet ethtool -s eth0 wol g echo PCI0 >/proc/acpi/wakeup echo 1 > /timer # bootup system 60 sec. before timer safe_margin=240 # modyfy 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 ","` # check for outdated timer if [ $((tmp_stop)) -gt $((current_date)) -a $((tmp_start)) -gt $((current_date)) ]; then # take lower value (tmp_start or start_date) if [ $((start_date)) -eq 0 -o $((tmp_start)) -lt $((start_date)) ]; then start_date=$tmp_start stop_date=$tmp_stop fi fi done wake_date=$((start_date-safe_margin)) echo $start_date >> /timer echo $wake_date >> /timer # set up waleup alarm if [ $((start_date)) -ne 0 ]; then echo 2 >> /timer echo 0 > /sys/class/rtc/rtc0/wakealarm echo $wake_date > /sys/class/rtc/rtc0/wakealarm fi exit 0 ;; *) echo "Usage: $0 {stop}" exit 2 ;; esac
Spusťte: chmod 755 /etc/init.d/wakeup
a update-rc.d wakeup defaults
Nyní se před každým vypnutím a restartem (a přihlášení jediného uživatele, když jsem tam dal i jedničku) zapíše do nvram čas probuzení počítače.
Po každé nahrávce má počítač nařízeno vypnout, ale to někdy jistě nebude rozumné, pojistíme se:
nano ~hts/shutdown.sh
Obsahuje znovu ten ověřovací kód, lehce pozměněný konec:
#!/bin/sh # Here you can invoke your script for recording's post-processing #exec <your_script.sh> sleep 20 safe_margin=240 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 ","` # check for recording now if [ $((tmp_stop)) -gt $((current_date)) -a $((tmp_start)) -lt $((current_date)) ]; then exit 0 fi # check for outdated timer if [ $((tmp_stop)) -gt $((current_date)) -a $((tmp_start)) -gt $((current_date)) ]; then # take lower value (tmp_start or start_date) if [ $((start_date)) -eq 0 -o $((tmp_start)) -lt $((start_date)) ]; then start_date=$tmp_start stop_date=$tmp_stop fi fi done wake_date=$((start_date-safe_margin)) idle=$((current_date+1200)) # >0 is when no recording is planned, wake_date is sub zero value if [ $((wake_date)) -lt $((idle)) - $((wake_date)) -gt 0]; then exit 0 fi #sudo /usr/sbin/pm-suspend & sudo /sbin/shutdown -h now &
Tento soubor musí být spustitelný uživatelem hts, resp. tím, který spouští tvheadend a zařadíte jej ve webovém rozhraní do postprocessingu. Zajistí, že se počítač nevypne, pokud se právě nahrává, či další nahrávka bude začínat do dvaceti minut.