Strohfestbilder
Entenrennenbilder
Karneval in Thüringen
Datenschutz © 2007-2024 Wolfram Pienkoss - Alle Rechte vorbehalten. Alle Angaben ohne Gewähr. Keine Vervielfältigung, Verbreitung oder Nutzung für kommerzielle Zwecke. |
Video Disk RecorderDie folgenden Scripts ermöglichen den programmierten Start des VDR-Rechners aus dem Standby mittels ACPI auch dann, wenn der nächste Timer Event mehr als 24 Stunden in der Zukunft liegt. In solchen Fällen wird der Rechner um 0.00 Uhr Lokalzeit gestartet und sofort wieder heruntergefahren. Voraussetzung: Anregungen: Nutzungslizenz: #!/bin/sh # # /etc/init.d/vdr # # starts and stops the video disk recorder. # # vdr specific parts: # Copyright (C) Wolfram Pienkoss At Holzland Thur de # PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin DAEMON=/usr/local/src/vdr/STUFF/vdr.sh NAME=vdr DESC="video disk recorder" test -x $DAEMON || exit 0 set -e case "$1" in start) echo -n "Starting $DESC: $NAME" $DAEMON start "power on" echo "." ;; stop) echo -n "Stopping $DESC: $NAME" $DAEMON stop "power off" echo "." ;; restart|force-reload) echo -n "Restarting $DESC: $NAME" $DAEMON restart echo "." ;; *) N=/etc/init.d/$NAME echo "Usage: $N {start|stop|restart|force-reload}" >&2 exit 1 ;; esac exit 0
#!/bin/bash # # /usr/local/src/vdr/STUFF/vdr.sh # # start stop script for the video disk recorder # # copyright (C) 2004 Wolfram Pienkoss At Holzland Thur de # export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11 export VDR_LOAD_PID_FILE=/var/run/run-vdr.pid export VDR_START_STOP_CMD=$0 modules_unload () { for mod in dvb-ttpci bttv ivtv snd-via82xx evdev tvaudio \ ves1820 saa7115 msp3400 tuner; do rmmod -r $mod done } modules_load () { modules_unload &>/dev/null for mod in evdev snd-via82xx ivtv bttv dvb-ttpci; do modprobe $mod done } eth_config () { ethtool -s eth0 wol g } sounddev_config () { amixer sset Aux,0 96%,96% unmute &>/dev/null amixer sset Master,0 96%,96% unmute &>/dev/null } lircd_unload () { local PID_FILE=/var/run/lircd.pid test -e $PID_FILE && kill $(< $PID_FILE) } lircd_load () { lircd_unload lircd } nxtvepg_unload () { su vdr -c "/usr/local/bin/nxtvepg -card 1 -daemonstop \ -rcfile /video/plugins/nxtvepg.conf" } nxtvepg_load () { nxtvepg_unload su vdr -c "/usr/local/bin/nxtvepg -card 1 -daemon \ -rcfile /video/plugins/nxtvepg.conf" } vdr_unload () { test -e $VDR_LOAD_PID_FILE && { local VDR_RUN_PID=$(< $VDR_LOAD_PID_FILE) test -n "$VDR_RUN_PID" && { local VDR_PID=$(pstree -p $VDR_RUN_PID|grep $VDR_RUN_PID|\ (IFS=\(\); read A B C D E; echo $D)) kill -TERM $VDR_RUN_PID test -n "$VDR_PID" && kill -TERM $VDR_PID &>/dev/null sleep 2 } } } vdr_run () { local -x LD_ASSUME_KERNEL=2.4.1 local -x LANG=de_DE local -x LC_COLLATE=de_DE local VDR_LOAD_DIR=/usr/local/src/vdr/VDR local VDR_LOAD_CMD=./vdr local PLUGIN_CONF=/video/plugins/plugins.conf local POWERCTRL=/usr/local/src/vdr/STUFF/vdr-powerctrl.pl local NOADEXEC=/usr/local/src/vdr/STUFF/noad.sh local IFS=$' \t\n' local CUR_DIR=$(pwd) local PLUGINS=$(grep -Ev "^#" $PLUGIN_CONF | \ sed -e "s/^/-P \"/" -e s/$/\"/) exit_proc () { cd $CUR_DIR rm -f $VDR_LOAD_PID_FILE exit 0 } trap exit_proc SIGTERM echo $$ > $VDR_LOAD_PID_FILE cd $VDR_LOAD_DIR eval $VDR_LOAD_CMD $PLUGINS -r $NOADEXEC -s $POWERCTRL &>/dev/null if (($? != 1)); then exit_proc fi cd $CUR_DIR sleep 1 $VDR_START_STOP_CMD restart & while :; do sleep 1 done } vdr_load () { vdr_unload /bin/bash -c vdr_run < /dev/null &>/dev/null & } vdradmin_unload () { local CUR_DIR=$(pwd) cd ../VDRADMIN ./vdradmind.pl --kill cd $CUR_DIR } vdradmin_load () { local CUR_DIR=$(pwd) vdradmin_unload cd ../VDRADMIN ./vdradmind.pl &>/dev/null cd $CUR_DIR } export -f vdr_run POWER_PARAM="restart now" test -n "$2" && POWER_PARAM="$2" cd $(dirname $0) case "$1" in start) ./vdr-powerctrl.pl "$POWER_PARAM" && exit modules_load # eth_config sounddev_config # lircd_load nxtvepg_load vdr_load sleep 10 vdradmin_load ;; stop) vdradmin_unload vdr_unload nxtvepg_unload lircd_unload sleep 2 modules_unload ./vdr-powerctrl.pl "$POWER_PARAM" ;; restart) $0 stop "$POWER_PARAM" $0 start "$POWER_PARAM" ;; *) echo "usage: $0 {start|stop|restart}" exit 1 ;; esac exit 0
#!/usr/bin/perl # # /usr/local/src/vdr/STUFF/vdr-powerctrl.pl # # power off script for the video disk recorder # # copyright (C) 2004 Wolfram Pienkoss At Holzland Thur de # use strict; use POSIX qw(strftime sprintf); use Time::Local; use File::Basename; use Socket; use IO::Handle; my(%setup, %config, @args, $wakeup_file, $conf_file, $setup_file); my($next_text, $id_next, $id_delta, $id_channel, $id_title); my($id_reason, $next, $now, $delta_ok, $lockdir, $lockfile_prefix); my($lockfile_suffix, $osd_msg_cmd, $id_boot_min, $id_shutdown_min); my($id_inactivity_timer, $id_channel_timer, $id_inactivity_user); my($id_channel_user, $id_cur_channel, $id_min_event_timeout); my($id_min_user_inactivity, $id_setup); $osd_msg_cmd = "/usr/local/src/vdr/STUFF/osd-msg.sh"; $lockdir = "/tmp"; $lockfile_prefix = "vdr-poweroff"; $lockfile_suffix = "lck"; $wakeup_file = "/proc/acpi/alarm"; $setup_file = "/video/setup.conf"; $conf_file = "/video/plugins/powerctrl.conf"; $next_text = "#\n" . "# configuration data for power up and down control\n" . "#\n" . "# This file is automatically generated - do not edit\n" . "# Written at: WRITE_TIME\n" . "#\n"; $id_boot_min = "PwrCtrlBoot"; $id_setup = "PwrCtrlSetup"; $id_shutdown_min = "PwrCtrlShutdown"; $id_channel = "TimerChannel"; $id_delta = "TimerDelta"; $id_next = "TimerNext"; $id_reason = "TimerReason"; $id_title = "TimerTitle"; $id_channel_timer = "VdrChannelTimer"; $id_channel_user = "VdrChannelUser"; $id_inactivity_timer = "VdrInactivityTimer"; $id_inactivity_user = "VdrInactivityUser"; $id_cur_channel = "CurrentChannel"; $id_min_event_timeout = "MinEventTimeout"; $id_min_user_inactivity = "MinUserInactivity"; sub question($$) { my($answer); print(STDOUT $_[0], " [", $_[1], "]: "); $answer = <STDIN>; if ($answer eq "\n") { return($_[1]); } else { return($answer); } } sub timelocalday($) { my(@time); @time = localtime($_[0]); $time[0] = 0; $time[1] = 0; $time[2] = 0; return(timelocal(@time)); } sub set_wakeup_time($) { open(FHDL, ">" . $wakeup_file); print(FHDL strftime("%Y-%m-%d %H:%M:%S", gmtime($_[0]))); close(FHDL); } sub power_off() { system("telinit 0"); } sub reboot() { system("telinit 6"); } sub send_osd_msg($) { my($msg_host, $msg_service, $msg_protoname, $msg_proto, $msg_port); my($msg_addr, $msg_peer, $dummy); $msg_host = "localhost"; $msg_service = "svdrp"; $msg_protoname = "tcp"; $msg_proto = getprotobyname($msg_protoname); $msg_port = getservbyname($msg_service, $msg_protoname); $msg_addr = inet_aton($msg_host); $msg_peer = sockaddr_in($msg_port, $msg_addr); if (socket(SVDRP, PF_INET, SOCK_STREAM, $msg_proto) && connect(SVDRP, $msg_peer)) { SVDRP->autoflush(); print(SVDRP "MESG " . $_[0] . "\n"); $dummy = <SVDRP>; print(SVDRP "QUIT\n"); $dummy = <SVDRP>; close(SVDRP); } } sub read_config_file($%) { my(%options, @options, $file); $file = shift; %options = @_; open(FHDL, "<" . $file); @options = grep(!/^#/, <FHDL>); close(FHDL); chomp(@options); foreach my $element (@options) { my($key, $value); $element =~ s/=/\n/; ($key, $value) = split(/\n/, $element); $key =~ s/(^ *)|( *$)//g; $value =~ s/(^ *)|( *$)//g; $options{$key} = $value; } return(%options); } sub read_setup() { my(%void); return(read_config_file($setup_file, %void)); } sub conf_defaults() { my(%defaults, %setup); %setup = read_setup(); $defaults{$id_boot_min} = 5; $defaults{$id_shutdown_min} = 5; $defaults{$id_inactivity_timer} = 1; $defaults{$id_channel_timer} = 1; $defaults{$id_setup} = 0; $defaults{$id_inactivity_user} = $setup{$id_min_user_inactivity}; $defaults{$id_channel_user} = $setup{$id_cur_channel}; return(%defaults); } sub read_conf() { my(%defaults); %defaults = conf_defaults(); return(read_config_file($conf_file, %defaults)); } sub write_config_file($$%) { my($file, $text, %options); $file = shift; $text = shift; %options = @_; if (open(FHDL, ">" . $file)) { if (length($text)) { print(FHDL $text); } foreach my $key (sort(keys(%options))) { print(FHDL $key, " = ", $options{$key}, "\n"); } close(FHDL); } } sub write_conf(%) { my($timestr, $text); $timestr = strftime("%a %b %d %T %Z %G", localtime(time)); $text = $next_text; $text =~ s/WRITE_TIME/$timestr/g; write_config_file($conf_file, $text, @_); } sub write_setup(%) { my($void); write_config_file($setup_file, $void, @_); } @args = @ARGV; if (scalar(@args) == 1) { if ($args[0] eq "restart now") { # restarting the vdr exit(2); } if ($args[0] eq "-s") { # setup my($autosetup); %config = read_conf(); $config{$id_boot_min} = question("Bootzeit in Minuten", $config{$id_boot_min}); $config{$id_shutdown_min} = question("Shutdownzeit in Minuten", $config{$id_shutdown_min}); $config{$id_inactivity_timer} = question("Abschaltinaktivität in Minuten bei Start durch Timer", $config{$id_inactivity_timer}); $config{$id_channel_timer} = question("Kanalnummer bei Start durch Timer", $config{$id_channel_timer}); write_conf(%config); %setup = read_setup(); $setup{$id_min_event_timeout} = $config{$id_boot_min} + $config{$id_shutdown_min}; write_setup(%setup); $autosetup = question("Boot- und Shutdownzeit automatisch ermitteln?", "Ja"); if ($autosetup eq "Ja") { print(STDOUT "Der Rechner wird jetzt zweimal automatisch neu gestartet\n"); $config{$id_setup} = 1; $config{$id_shutdown_min} = time(); write_conf(%config); reboot(); } exit(1); } if ($args[0] eq "power off") { # power off %setup = read_setup(); %config = read_conf(); $config{$id_channel_user} = $setup{$id_cur_channel}; write_conf(%config); exit(2); } if ($args[0] eq "power on") { # power on $now = time(); %config = read_conf(); if ($config{$id_setup} != 0) { # autosetup active if ($config{$id_setup} == 1) { # time to reboot $config{$id_setup} = 2; $config{$id_shutdown_min} = time() - $config{$id_shutdown_min}; $config{$id_boot_min} = time() + $config{$id_shutdown_min}; write_conf(%config); set_wakeup_time($config{$id_boot_min}); power_off(); exit(0); } if ($config{$id_setup} == 2) { # time to boot; ready $config{$id_setup} = 0; $config{$id_boot_min} = time() - $config{$id_boot_min}; $config{$id_shutdown_min} = $config{$id_shutdown_min} - $config{$id_boot_min}; $config{$id_boot_min} = int(($config{$id_boot_min} + 30 + 59) / 60); $config{$id_shutdown_min} = int(($config{$id_shutdown_min} + 30 + 59) / 60); write_conf(%config); } } $args[0] = $config{$id_next}; $args[1] = $config{$id_delta}; $args[2] = $config{$id_channel}; $args[3] = $config{$id_title}; $args[4] = 0; %setup = read_setup(); if (($args[0] - $config{$id_boot_min} * 60 <= $now) && ($now <= $args[0])) { # start by timer assumed $setup{$id_cur_channel} = $config{$id_channel_timer}; $setup{$id_min_user_inactivity} = $config{$id_inactivity_timer}; } else { # manually start assumed $setup{$id_cur_channel} = $config{$id_channel_user}; $setup{$id_min_user_inactivity} = $config{$id_inactivity_user}; } $setup{$id_min_event_timeout} = $config{$id_boot_min} + $config{$id_shutdown_min}; write_setup(%setup); if ($config{$id_boot_min} * 60 < $now - timelocalday($now)) { # power on manually or by regular BIOS timer event and # ready to start vdr exit(2); } } } if (scalar(@args) != 5) { # not a power off call die("wrong parameter number\n\nusage: $0 -s\n\n"); } if (opendir(DHDL, $lockdir)) { my(@locks); @locks = grep(/^$lockfile_prefix\.(.*)\.$lockfile_suffix$/, readdir(DHDL)); close(DHDL); foreach my $lock (@locks) { my($file); $file = $lockdir . "/" . $lock; if (open(FHDL, "<" . $file)) { my($pid); $pid = <FHDL>; close(FHDL); if (($pid eq "manual") || kill(0, $pid)) { # power off locked # # produces a deadlock: # send_osd_msg("Abschalten vorübergehend gesperrt."); system($osd_msg_cmd . " \"Abschalten vorübergehend gesperrt.\""); exit(2); } else { unlink($file); } } } } if (!-e $wakeup_file) { die("current kernel doesn't support ACPI wake up\n"); } %config = read_conf(); $now = time(); $next = $args[0] - $config{$id_boot_min} * 60; $delta_ok = $next > $now + $config{$id_shutdown_min} * 60; if (!$delta_ok && $args[4]) { $args[0] = 0; } if ($delta_ok && ($next < $now + 60 * 60 * 24)) { set_wakeup_time($next); } else { set_wakeup_time(timelocalday($now)); } if ($delta_ok || !$args[0] || $args[4]) { $config{$id_next} = $args[0]; $config{$id_delta} = $args[1]; $config{$id_channel} = $args[2]; $config{$id_title} = $args[3]; $config{$id_reason} = $args[4]; if ($args[4]) { %setup = read_setup(); $config{$id_inactivity_user} = $setup{$id_min_user_inactivity}; } write_conf(%config); power_off(); exit(0); } exit(1); |