<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de-x-formal">
	<id>http://wiki.frank-wulf.de/index.php?action=history&amp;feed=atom&amp;title=Wake_on_LAN_and_remote_shutdown</id>
	<title>Wake on LAN and remote shutdown - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.frank-wulf.de/index.php?action=history&amp;feed=atom&amp;title=Wake_on_LAN_and_remote_shutdown"/>
	<link rel="alternate" type="text/html" href="http://wiki.frank-wulf.de/index.php?title=Wake_on_LAN_and_remote_shutdown&amp;action=history"/>
	<updated>2026-05-13T14:28:43Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in wiki.frank-wulf.de</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>http://wiki.frank-wulf.de/index.php?title=Wake_on_LAN_and_remote_shutdown&amp;diff=371&amp;oldid=prev</id>
		<title>Wulf am 4. Mai 2018 um 11:22 Uhr</title>
		<link rel="alternate" type="text/html" href="http://wiki.frank-wulf.de/index.php?title=Wake_on_LAN_and_remote_shutdown&amp;diff=371&amp;oldid=prev"/>
		<updated>2018-05-04T11:22:28Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de-x-formal&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 4. Mai 2018, 13:22 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l342&quot;&gt;Zeile 342:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 342:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[cgefi0067]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[cgefi0067]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ipaddrr&lt;/del&gt;=cgefi0067&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ipaddr&lt;/ins&gt;=cgefi0067&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;macaddr=ec:f4:bb:20:77:10&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;macaddr=ec:f4:bb:20:77:10&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;user=&amp;lt;remote user&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;user=&amp;lt;remote user&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Wulf</name></author>
	</entry>
	<entry>
		<id>http://wiki.frank-wulf.de/index.php?title=Wake_on_LAN_and_remote_shutdown&amp;diff=354&amp;oldid=prev</id>
		<title>Wulf am 20. Dezember 2017 um 06:05 Uhr</title>
		<link rel="alternate" type="text/html" href="http://wiki.frank-wulf.de/index.php?title=Wake_on_LAN_and_remote_shutdown&amp;diff=354&amp;oldid=prev"/>
		<updated>2017-12-20T06:05:37Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de-x-formal&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 20. Dezember 2017, 08:05 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Zeile 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Shell script &#039;&#039;&#039;&#039;&#039;/usr/bin/fwremote&#039;&#039;&#039;&#039;&#039;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;:&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;__FORCETOC__&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;===&lt;/ins&gt;Shell script &#039;&#039;&#039;&#039;&#039;/usr/bin/fwremote&#039;&#039;&#039;&#039;&#039;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;===&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;#!/bin/bash&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;#!/bin/bash&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l308&quot;&gt;Zeile 308:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 309:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Configuration file &#039;&#039;&#039;&#039;&#039;/etc/fwremote.conf&#039;&#039;&#039;&#039;&#039;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;:&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;===&lt;/ins&gt;Configuration file &#039;&#039;&#039;&#039;&#039;/etc/fwremote.conf&#039;&#039;&#039;&#039;&#039;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;===&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# During remote start the program sends ping requests to the remote&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# During remote start the program sends ping requests to the remote&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Wulf</name></author>
	</entry>
	<entry>
		<id>http://wiki.frank-wulf.de/index.php?title=Wake_on_LAN_and_remote_shutdown&amp;diff=315&amp;oldid=prev</id>
		<title>Wulf am 16. November 2017 um 23:49 Uhr</title>
		<link rel="alternate" type="text/html" href="http://wiki.frank-wulf.de/index.php?title=Wake_on_LAN_and_remote_shutdown&amp;diff=315&amp;oldid=prev"/>
		<updated>2017-11-16T23:49:28Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Shell script &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;/usr/bin/fwremote&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#&lt;br /&gt;
# Author:  Frank Wulf&lt;br /&gt;
# Version: 1.0 (2017-10-02)&lt;br /&gt;
#&lt;br /&gt;
# This program can be used to start up or shut down a remote computer.&lt;br /&gt;
#&lt;br /&gt;
# Version history:&lt;br /&gt;
# 1.0   2017-10-02   Initial release&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
read_conf() {&lt;br /&gt;
  resultvar=$1&lt;br /&gt;
  # Read value from configuration file&lt;br /&gt;
  val=`confget -O -f $conffile -s $rmt $1`&lt;br /&gt;
  if [ &amp;quot;$val&amp;quot; == &amp;quot;&amp;quot; ]; then&lt;br /&gt;
    # No value found, set to transferred value&lt;br /&gt;
    val=$2&lt;br /&gt;
  fi&lt;br /&gt;
  eval $resultvar=&amp;quot;&amp;#039;$val&amp;#039;&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
log() {&lt;br /&gt;
  if [ &amp;quot;$2&amp;quot; == &amp;quot;E&amp;quot; ]; then&lt;br /&gt;
    mtype=&amp;quot;:ERROR&amp;quot;&lt;br /&gt;
  else&lt;br /&gt;
    mtype=&amp;quot;&amp;quot;&lt;br /&gt;
  fi&lt;br /&gt;
  echo &amp;quot;`date +&amp;#039;%Y-%m-%d %H:%M:%S&amp;#039;`: ${1}${mtype}&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
start() {&lt;br /&gt;
  sw_started=0&lt;br /&gt;
  # Check if remote computer is online&lt;br /&gt;
  if `ping $ipaddr -c1 1&amp;gt;/dev/null 2&amp;gt;&amp;amp;1`; then&lt;br /&gt;
    # Check status from last run&lt;br /&gt;
    if `get_status &amp;quot;$rmt&amp;quot; &amp;quot;Started&amp;quot;`; then&lt;br /&gt;
      log &amp;quot;$rmt has already been started remotely.&amp;quot;&lt;br /&gt;
      exit 0&lt;br /&gt;
    else&lt;br /&gt;
      set_status &amp;quot;$rmt&amp;quot; &amp;quot;Online&amp;quot;&lt;br /&gt;
      log &amp;quot;$rmt is already online and probably started manually.&amp;quot;&lt;br /&gt;
      exit 0&lt;br /&gt;
    fi&lt;br /&gt;
  else&lt;br /&gt;
    # Remote computer is down&lt;br /&gt;
    if [ &amp;quot;$macaddr&amp;quot; == &amp;quot;&amp;quot; ]; then&lt;br /&gt;
      log &amp;quot;Error: No MAC address for $rmt defined.&amp;quot;&lt;br /&gt;
      exit 1&lt;br /&gt;
    fi&lt;br /&gt;
    # Determine active ethernet card&lt;br /&gt;
    interface=`route|grep &amp;#039;^default&amp;#039;|grep -o &amp;#039;[^ ]*$&amp;#039;`&lt;br /&gt;
    # Send Wake on Lan request to remote computer&lt;br /&gt;
    etherwake -i $interface $macaddr 1&amp;gt;/dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
      log &amp;quot;Error: Sending Wake on Lan request failed.&amp;quot;&lt;br /&gt;
      exit 1&lt;br /&gt;
    fi&lt;br /&gt;
    log &amp;quot;Wake on Lan request has been sent to $rmt.&amp;quot;&lt;br /&gt;
    log &amp;quot;Waiting for startup (max. $timeout_start seconds) ...&amp;quot;&lt;br /&gt;
    # Send one ping request per second to remote computer until&lt;br /&gt;
    # a) remote computer answers or&lt;br /&gt;
    # b) timeout is reached&lt;br /&gt;
    start=`date +%s`&lt;br /&gt;
    while [ $(( $(date +%s) - $timeout_start )) -lt $start ]; do&lt;br /&gt;
      if `ping $ipaddr -c1 1&amp;gt;/dev/null 2&amp;gt;&amp;amp;1`; then&lt;br /&gt;
        log &amp;quot;$rmt has answered to ping request.&amp;quot;&lt;br /&gt;
        sw_started=1&lt;br /&gt;
        break&lt;br /&gt;
      else&lt;br /&gt;
        sleep 1&lt;br /&gt;
      fi&lt;br /&gt;
    done&lt;br /&gt;
    if [ $sw_started -eq 1 ]; then&lt;br /&gt;
      # Remote computer is now online, wait &amp;lt;delay_start&amp;gt; seconds&lt;br /&gt;
      # before program will terminate&lt;br /&gt;
      set_status &amp;quot;$rmt&amp;quot; &amp;quot;Started&amp;quot;&lt;br /&gt;
      log &amp;quot;Waiting $delay_start seconds to end program ...&amp;quot;&lt;br /&gt;
      sleep $delay_start&lt;br /&gt;
      log &amp;quot;$rmt has been started successfully.&amp;quot;&lt;br /&gt;
      exit 0&lt;br /&gt;
    else&lt;br /&gt;
      # Remote computer did not respond within timeout range&lt;br /&gt;
      set_status &amp;quot;$rmt&amp;quot; &amp;quot;Offline&amp;quot;&lt;br /&gt;
      log &amp;quot;Timeout of $timeout_start seconds reached.&amp;quot; &amp;quot;E&amp;quot;&lt;br /&gt;
      exit 1&lt;br /&gt;
    fi&lt;br /&gt;
  fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
stop() {&lt;br /&gt;
  sw_stopped=0&lt;br /&gt;
  sw_stop_allowed=0&lt;br /&gt;
  # Check if remote computer is online&lt;br /&gt;
  if `ping $ipaddr -c1 1&amp;gt;/dev/null 2&amp;gt;&amp;amp;1`; then&lt;br /&gt;
    log &amp;quot;$rmt has answered to ping request.&amp;quot;&lt;br /&gt;
    if [ &amp;quot;$cmd&amp;quot; == &amp;quot;force-stop&amp;quot; ]; then&lt;br /&gt;
      # Command to force shutdown was given&lt;br /&gt;
      sw_stop_allowed=1&lt;br /&gt;
    else&lt;br /&gt;
      # Check status from last run&lt;br /&gt;
      if `get_status &amp;quot;$rmt&amp;quot; &amp;quot;Started&amp;quot;`; then&lt;br /&gt;
        # Last run ended in &amp;quot;Started&amp;quot;&lt;br /&gt;
        if [ &amp;quot;$shutdown&amp;quot; != &amp;quot;no&amp;quot; ]; then&lt;br /&gt;
          sw_stop_allowed=1&lt;br /&gt;
        fi&lt;br /&gt;
      else&lt;br /&gt;
        # Last run ended not in &amp;quot;Started&amp;quot;, so probably a manual start&lt;br /&gt;
        if [ &amp;quot;$shutdown&amp;quot; == &amp;quot;yes&amp;quot; ]; then&lt;br /&gt;
          sw_stop_allowed=1&lt;br /&gt;
        fi&lt;br /&gt;
      fi&lt;br /&gt;
    fi&lt;br /&gt;
    if [ $sw_stop_allowed -eq 1 ]; then&lt;br /&gt;
      # Call remote command to shut down&lt;br /&gt;
      net rpc shutdown -f -t 0 -C &amp;#039;System shutdown&amp;#039; -U $user%$pass -I $ipaddr 1&amp;gt;/dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
      if [ $? -ne 0 ]; then&lt;br /&gt;
        log &amp;quot;Sending shutdown request to $rmt failed, exit code = $?.&amp;quot; &amp;quot;E&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
      fi&lt;br /&gt;
      log &amp;quot;Shutdown request has been sent to $rmt.&amp;quot;&lt;br /&gt;
      log &amp;quot;Waiting for shutdown (max. $timeout_stop seconds) ...&amp;quot;&lt;br /&gt;
      # During the shutdown send one ping request per second until&lt;br /&gt;
      # a) remote computer does not answer anymore or&lt;br /&gt;
      # b) timeout is reached&lt;br /&gt;
      start=`date +%s`&lt;br /&gt;
      while [ $(( $(date +%s) - $timeout_stop )) -lt $start ]; do&lt;br /&gt;
        if ! `ping $ipaddr -c1 1&amp;gt;/dev/null 2&amp;gt;&amp;amp;1`; then&lt;br /&gt;
          log &amp;quot;$rmt has stopped answering to ping request.&amp;quot;&lt;br /&gt;
          sw_stopped=1&lt;br /&gt;
          break&lt;br /&gt;
        else&lt;br /&gt;
          sleep 1&lt;br /&gt;
        fi&lt;br /&gt;
      done&lt;br /&gt;
      if [ $sw_stopped -eq 1 ]; then&lt;br /&gt;
        # Remote computer is now offline, wait &amp;lt;delay_stop&amp;quot; seconds&lt;br /&gt;
        # before program will terminate&lt;br /&gt;
        set_status &amp;quot;$rmt&amp;quot; &amp;quot;Stopped&amp;quot;&lt;br /&gt;
        log &amp;quot;Waiting $delay_stop seconds to end program ...&amp;quot;&lt;br /&gt;
        sleep $delay_stop&lt;br /&gt;
        log &amp;quot;$rmt has been stopped successfully.&amp;quot;&lt;br /&gt;
        exit 0&lt;br /&gt;
      else&lt;br /&gt;
        # Remote computer has still answered the ping requests when&lt;br /&gt;
        # timeout has been reached&lt;br /&gt;
        set_status &amp;quot;$rmt&amp;quot; &amp;quot;Online&amp;quot;&lt;br /&gt;
        log &amp;quot;Timeout of $timeout_stop seconds reached.&amp;quot; &amp;quot;E&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
       fi&lt;br /&gt;
    else&lt;br /&gt;
      # Shutdown not allowed&lt;br /&gt;
      if [ &amp;quot;$shutdown&amp;quot; == &amp;quot;no&amp;quot; ]; then&lt;br /&gt;
        log &amp;quot;Remote shutdown not allowed due to configuration restriction.&amp;quot;&lt;br /&gt;
      else&lt;br /&gt;
        set_status &amp;quot;$rmt&amp;quot; &amp;quot;Online&amp;quot;&lt;br /&gt;
        log &amp;quot;Remote shutdown not allowed as $rmt seems to be started manually.&amp;quot;&lt;br /&gt;
      fi&lt;br /&gt;
      exit 0&lt;br /&gt;
    fi&lt;br /&gt;
  else&lt;br /&gt;
    # Remote computer is already offline&lt;br /&gt;
    if `get_status &amp;quot;$rmt&amp;quot; &amp;quot;Stopped&amp;quot;`; then&lt;br /&gt;
      log &amp;quot;$rmt is already offline and probably stopped remotely.&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
      set_status &amp;quot;$rmt&amp;quot; &amp;quot;Offline&amp;quot;&lt;br /&gt;
      log &amp;quot;$rmt is already offline and probably stopped manually.&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    exit 0&lt;br /&gt;
  fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
status() {&lt;br /&gt;
  # Check status of last run&lt;br /&gt;
  if `get_status &amp;quot;$rmt&amp;quot; &amp;quot;Started&amp;quot;`; then&lt;br /&gt;
    sw_started=1&lt;br /&gt;
    sw_stopped=0&lt;br /&gt;
  else&lt;br /&gt;
    sw_started=0&lt;br /&gt;
    # Last run ended not in &amp;quot;Started&amp;quot;, check if it ended in &amp;quot;Stopped&amp;quot;&lt;br /&gt;
    if `get_status &amp;quot;$rmt&amp;quot; &amp;quot;Stopped&amp;quot;`; then&lt;br /&gt;
      sw_stopped=1&lt;br /&gt;
    else&lt;br /&gt;
      sw_stopped=0&lt;br /&gt;
    fi&lt;br /&gt;
  fi&lt;br /&gt;
  # Check if remote computer is online&lt;br /&gt;
  if `ping $ipaddr -c1 1&amp;gt;/dev/null 2&amp;gt;&amp;amp;1`; then&lt;br /&gt;
    if [ $sw_started -eq 1 ]; then&lt;br /&gt;
      log &amp;quot;$rmt is online and probably started remotely.&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
      log &amp;quot;$rmt is online and probably started manually.&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    exit 0&lt;br /&gt;
  else&lt;br /&gt;
    if [ $sw_stopped -eq 1 ]; then&lt;br /&gt;
      log &amp;quot;$rmt is offline and probably stopped remotely.&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
      log &amp;quot;$rmt is offline and probably stopped manually.&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    # Return with an error so that caller can distinguish between&lt;br /&gt;
    # online and offline by checking the exit code&lt;br /&gt;
    exit 1&lt;br /&gt;
  fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
show() {&lt;br /&gt;
  if [ &amp;quot;$ipaddr&amp;quot; == &amp;quot;&amp;quot; ]; then&lt;br /&gt;
    ipaddr=&amp;quot;&amp;lt;missing&amp;gt;&amp;quot;&lt;br /&gt;
  fi&lt;br /&gt;
  if [ &amp;quot;$macaddr&amp;quot; == &amp;quot;&amp;quot; ]; then&lt;br /&gt;
    macaddr=&amp;quot;&amp;lt;missing&amp;gt;&amp;quot;&lt;br /&gt;
  fi&lt;br /&gt;
  if [ &amp;quot;$user&amp;quot; == &amp;quot;&amp;quot; ]; then&lt;br /&gt;
    user=&amp;quot;&amp;lt;missing&amp;gt;&amp;quot;&lt;br /&gt;
  fi&lt;br /&gt;
  if [ &amp;quot;$pass&amp;quot; == &amp;quot;&amp;quot; ]; then&lt;br /&gt;
    pass=&amp;quot;&amp;lt;missing&amp;gt;&amp;quot;&lt;br /&gt;
  else&lt;br /&gt;
    # Password must not be shown in plain text&lt;br /&gt;
    pass=&amp;quot;&amp;lt;defined&amp;gt;&amp;quot;&lt;br /&gt;
  fi&lt;br /&gt;
  if [ &amp;quot;$shutdown&amp;quot; == &amp;quot;&amp;quot; ]; then&lt;br /&gt;
    shutdown=&amp;quot;&amp;lt;missing&amp;gt;&amp;quot;&lt;br /&gt;
  fi&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;ipaddr:        $ipaddr&amp;quot;&lt;br /&gt;
  echo &amp;quot;macaddr:       $macaddr&amp;quot;&lt;br /&gt;
  echo &amp;quot;user:          $user&amp;quot;&lt;br /&gt;
  echo &amp;quot;pass:          $pass&amp;quot;&lt;br /&gt;
  echo &amp;quot;shutdown:      $shutdown&amp;quot;&lt;br /&gt;
  echo &amp;quot;timeout_start: $timeout_start&amp;quot;&lt;br /&gt;
  echo &amp;quot;delay_start:   $delay_start&amp;quot;&lt;br /&gt;
  echo &amp;quot;timeout_stop:  $timeout_stop&amp;quot;&lt;br /&gt;
  echo &amp;quot;delay_stop:    $delay_stop&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
get_status() {&lt;br /&gt;
  if `grep &amp;quot;^$1&amp;quot; $statusfile|grep -q &amp;quot;$2$&amp;quot;`; then&lt;br /&gt;
    return 0&lt;br /&gt;
  else&lt;br /&gt;
    return 1&lt;br /&gt;
  fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
set_status() {&lt;br /&gt;
  grep -v &amp;quot;^$1&amp;quot; $statusfile &amp;gt;$statusfile.tmp&lt;br /&gt;
  mv $statusfile.tmp $statusfile&lt;br /&gt;
  echo &amp;quot;$1:$2&amp;quot; &amp;gt;&amp;gt;$statusfile&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Define configuration file&lt;br /&gt;
conffile=/etc/fwremote.conf&lt;br /&gt;
# Define status file&lt;br /&gt;
statusfile=/var/run/fwremote.state&lt;br /&gt;
&lt;br /&gt;
if [ ! -f $statusfile ]; then&lt;br /&gt;
  # Status file does not exist, create an empty one&lt;br /&gt;
  &amp;gt;$statusfile&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Setup arguments&lt;br /&gt;
cmd=$1&lt;br /&gt;
rmt=$2&lt;br /&gt;
&lt;br /&gt;
if [ ! &amp;quot;$rmt&amp;quot; == &amp;quot;&amp;quot; ]; then&lt;br /&gt;
  # Read values from configuration file&lt;br /&gt;
  read_conf &amp;quot;timeout_start&amp;quot; &amp;quot;0&amp;quot;&lt;br /&gt;
  read_conf &amp;quot;timeout_stop&amp;quot; &amp;quot;0&amp;quot;&lt;br /&gt;
  read_conf &amp;quot;delay_start&amp;quot; &amp;quot;0&amp;quot;&lt;br /&gt;
  read_conf &amp;quot;delay_stop&amp;quot; &amp;quot;0&amp;quot;&lt;br /&gt;
  read_conf &amp;quot;shutdown&amp;quot; &amp;quot;auto&amp;quot;&lt;br /&gt;
  read_conf &amp;quot;ipaddr&amp;quot; &amp;quot;$rmt&amp;quot;&lt;br /&gt;
  read_conf &amp;quot;macaddr&amp;quot; &amp;quot;&amp;quot;&lt;br /&gt;
  read_conf &amp;quot;user&amp;quot; &amp;quot;&amp;quot;&lt;br /&gt;
  read_conf &amp;quot;pass&amp;quot; &amp;quot;&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
case $cmd in&lt;br /&gt;
    start)&lt;br /&gt;
        start&lt;br /&gt;
        ;;&lt;br /&gt;
    stop|force-stop)&lt;br /&gt;
        stop&lt;br /&gt;
        ;;&lt;br /&gt;
    status)&lt;br /&gt;
        status&lt;br /&gt;
        ;;&lt;br /&gt;
    show)&lt;br /&gt;
        show&lt;br /&gt;
        ;;&lt;br /&gt;
    *)&lt;br /&gt;
        echo &amp;quot;Usage: $0 &amp;lt;command&amp;gt; &amp;lt;remote computer&amp;gt;&amp;quot;&lt;br /&gt;
        echo &amp;quot;&amp;quot;&lt;br /&gt;
        echo &amp;quot;Commands:&amp;quot;&lt;br /&gt;
        echo &amp;quot;&amp;quot;&lt;br /&gt;
        echo &amp;quot;    start            Wakes up remote computer&amp;quot;&lt;br /&gt;
        echo &amp;quot;    stop             Shuts down remote computer&amp;quot;&lt;br /&gt;
        echo &amp;quot;    force-stop       Force shutdown of remote computer&amp;quot;&lt;br /&gt;
        echo &amp;quot;    status           Shows status of remote computer&amp;quot;&lt;br /&gt;
        echo &amp;quot;    show             Shows configuration for remote computer&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
esac&lt;br /&gt;
&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configuration file &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;/etc/fwremote.conf&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
# During remote start the program sends ping requests to the remote&lt;br /&gt;
# computer. If timeout has exceeded and remote system is still offline&lt;br /&gt;
# then the script will stop with a FAIL.&lt;br /&gt;
timeout_start=60&lt;br /&gt;
# During remote shutdown the program sends ping requests to the remote&lt;br /&gt;
# computer. If timeout has exceeded and remote system is still online&lt;br /&gt;
# then the script will stop with a FAIL.&lt;br /&gt;
timeout_stop=60&lt;br /&gt;
# During remote start this is a delay of n seconds between remote system&lt;br /&gt;
# starts answering ping requests and end of program.&lt;br /&gt;
delay_start=30&lt;br /&gt;
# During remote shutdown this is a delay of n seconds between remote system&lt;br /&gt;
# stops answering ping requests and end of program.&lt;br /&gt;
delay_stop=10&lt;br /&gt;
# This directive controls the shutdown behaviour&lt;br /&gt;
# yes:  Force shutdown if shutdown is requested&lt;br /&gt;
# no:   Ignore shutdown request&lt;br /&gt;
# auto: Shutdown only if system has been started remotely&lt;br /&gt;
shutdown=auto&lt;br /&gt;
&lt;br /&gt;
[wulf-pc]&lt;br /&gt;
ipaddr=wulf-pc&lt;br /&gt;
macaddr=ac:22:0b:78:b6:59&lt;br /&gt;
user=&amp;lt;remote user&amp;gt;&lt;br /&gt;
pass=&amp;lt;remote password&amp;gt;&lt;br /&gt;
timeout_start=120&lt;br /&gt;
timeout_stop=120&lt;br /&gt;
delay_start=60&lt;br /&gt;
delay_stop=5&lt;br /&gt;
&lt;br /&gt;
[cgefi0067]&lt;br /&gt;
ipaddrr=cgefi0067&lt;br /&gt;
macaddr=ec:f4:bb:20:77:10&lt;br /&gt;
user=&amp;lt;remote user&amp;gt;&lt;br /&gt;
pass=&amp;lt;remote password&amp;gt;&lt;br /&gt;
timeout_start=120&lt;br /&gt;
timeout_stop=180&lt;br /&gt;
delay_stop=5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wulf</name></author>
	</entry>
</feed>