Forum: PC Hard- und Software Shutdown-Signal an PC senden


von Josef Br. (Gast)


Lesenswert?

Hallo,

ich habe folgendes Szenario:
- RaspberryPi als Heimautomatisierungszentrale (kann WLAN- und Zigbee 
Sensoren/Aktoren ansteuern)
- PC (mit Linux) mit mehreren Bildschirmen, Lautsprecher, etc.
Alle am PC angeschlossenen Geräte hängen an einer Steckerleiste hinter 
einer Zigbee-Steckdose

Ich wäre nun gern in der Lage den PC+Peripherie vom Pi aus abzuschalten.
Grundsätzlich könnte der Pi über die Zigbee-Steckdose einfach alles hart 
abschalten.
Es ist aber offensichtlich dass dies nicht gewünscht ist weil der PC 
erst sauber heruntergefahren werden muss.
Im Prinzip muss also der Pi dem PC einen Shutdown-Befehl erteilen und 
nur wenn dieser erfolgreich war (kann z.B. mittels einem ping 
herausgefunden werden) darf die Steckerleiste weggeschalten werden.

Die naheliegende Lösung ist natürlich:
Pi schaltet sich über ssh auf den PC und führt ein "shutdown now" aus.

Allerdings missfällt mir irgendwie die Vorstellung, dass sich mein Pi, 
der ja eigentlich eine Art Server ist, per ssh auf den PC schaltet.
Das wär also so die Notlösung.
Normal ist es ja eher andersrum.

Gibt es da einen anderen, vielleicht eleganteren Weg?
Am schönsten wär ein Service auf dem PC der auf ein bestimmtes Signal 
pollt. Der Service könnte den SHutdown-Request auch erstmal dem User 
melden und absegnen lassen, für den theoretischen Fall dass ich garnicht 
herunterfahren möchte :-)
Aber sowas gibts wohl nicht von der Stange, oder?
Wie könnte man so ein "Signal" senden? Eine Art "kill -USR" übers 
Netzwerk? Gibts sowas?

Hat sonst jemand eine Idee oder Anmerkungen?

Danke und euch noch schöne Ostertage :-)

von TestX (Gast)


Lesenswert?

Ssh - sudo - shutdown

Wo ist das Problem? Sudo kann viel mehr als nur zu sagen "user x darf 
alles..."

von test (Gast)


Lesenswert?

Eigentlich ist die ssh Idee schon das übliche Verfahren.
Du kannst per ssh anstelle von shutdown natürlich auch ein eigenes 
Script am PC aufrufen. Diesen könnte den Nutzer warnen/fragen.

von Name (Gast)


Lesenswert?

https://de.wikipedia.org/wiki/Remote_Procedure_Call ist so ungefaehr 
das, was du beschreibst. Fuer dein Problem geeignet ist es eher nicht.

Fuer das Modell Pi-ssht-auf-Rechner solltest du dir die 
command=-Operation in der authorized_keys ansehen, damit kann man genaue 
Befehle vorgeben, die exklusiv ausgefuehrt werden, wenn sich jemand (der 
Pi) mit einem bestimmten SSH-Key authentifiziert. Damit hast du schon 
mal dein trust model richtig herum, sodass der Pi nicht beliebige 
Befehle auf deinem Rechner fahren kann.

Der einfachste Weg fuer die Gegenrichtung, Rechner-pollt-Pi, waere z.B. 
eine spezialisierte Loginshell oder ein weiterer forced command. Auf 
deim Rechner wuerde dann ein Skript in der Art von
1
#!/bin/sh -eu
2
3
ssh -i shutdown-key raspberry-host | while read cmd; do
4
    case "$cmd" in
5
        shutdown)
6
            zenity --question --title 'shutdown?' --text 'shutdown requested, continue?' && sudo poweroff
7
            ;;
8
        *)
9
            echo "invalid command '$cmd'"
10
            ;;
11
    esac
12
done

laufen, was den Pi pollt kontaktiert und eine Nachfrage stellt, sobald 
es als Antwort "shutdown" erhaelt. Der Pi haette dann z.B. folgendes 
gesetzt:

authorized_keys:
1
command="/home/pi/shutdown-poller" ssh-rsa ...

shutdown-poller:
[code]
#!/bin/sh -eu

f=/home/pi/shutdown-now

while sleep 5; do
    if [ -e "$f" ]; then
        rm -f "$f"
        echo shutdown
    fi
done
[code]

Triggern tust du den Shutdown, indem du /home/pi/shutdown-now anlegst, 
z.B. ueber touch. (Und natuerlich kann man anstatt der Schleife auch 
inotify verwenden...)

Das ist alles ungetestet dahingetippert und bedarf potenziell 
Verstaendnis und Nacharbeit.

von Mario M. (thelonging)


Lesenswert?

Wie wäre es mit einem Optokoppler parallel zum Power-Button? Dann kann 
der PC nicht nur per ACPI aus sondern auch einfach über den Raspi wieder 
ein geschaltet werden.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Ein alternativer Hack wäre das Nachbilden des Netzwerkverhaltens einer 
netzwerkfähigen USV zusammen z.B. mit https://networkupstools.org/

von Josef Br. (Gast)


Lesenswert?

Hi danke für die Ideen.

Fürs erste hab ich ein Script auf dem PC laufen was auf SIGINT horcht, 
bei Bedarf runterfährt und sich ansonsten wieder 10sec schlafen legt.
Das Signal kann ich per ssh erstmal an den PC schicken.
Das gefällt mir irgendwie besser als wenn der Pi direkt den PC 
runterfahren kann (was er aber aktuell eh ned darf, da keine interaktive 
Konsole).

Im nächsten Schritt schau ich mal ob ich das ssh durch was anderes 
ersetzen kann, sockets oder so.

von Boris O. (bohnsorg) Benutzerseite


Lesenswert?

Josef Br. schrieb:
> Im nächsten Schritt schau ich mal ob ich das ssh durch was anderes
> ersetzen kann, sockets oder so.

Solange ein RaspberryPI das Signal auslöst, spielt Sicherheit keine 
Rolle. Jeder halbwegs begabte SD-Karten-Wechsler kann beliebige Dinge 
mit dem Dateisystem darauf anstellen. Ob du nun SSH oder irgendetwas 
anderes damit machst, andere Rechner abzuschalten, spielt so ziemlich 
gar keine Rolle.

Du könntest sogar einen CRON-Job auf der auzuschaltenden Maschine 
einrichten, der den RaspberryPI kontaktiert (bspw. per curl, wget oder 
irgendeinem anderen Netzwerkkommunikationsmittel) und beim richtigen/ 
falschen Ergebnis das Herunterfahren auslöst. Dann ließe sich das auch 
auf andere Maschinen ausweiten und wäre portierbar.

Ich halte das für ziemlichen Quatsch, da ein kurzer Druck auf den 
Power-Button genügt, den Shutdown auszulösen (vorausgesetzt acpid läuft 
und darf das). Deshalb bin ich für die Optokoppler-Fraktion.

(Mir ist auch nicht so ganz klar, was im Fall des Stromausfalls 
passiert, bzw. ob dich das interessiert. Sowohl das Netzteil vom PI als 
auch vom anderen Rechner können kaputtgehen, mancherorts sei sogar die 
Stromversorgung zusammengebrochen – erzählen sich die Alten. Das spricht 
eher nach etwas Netzwerkverwaltung und geordnetem Herunterfahren in 
Zusammenarbeit mit einer USV, wenigstens für den RPI? Und fährt die 
andere Maschine dann irgendwie wieder von selbst hoch, auch mit defektem 
Dateisystem?)

von NichtWichtig (Gast)


Lesenswert?

Ich betreibe einen Linux-Rechner mit xfce Oberfläche.
Ein AVR sendet per serieller Schnittstelle allmögliche Signale zur 
Mediasteuerung.
Und per xfce-session-logout -h fährt der Rechner sauber runter.
Einfach nur die STOP-Taste der Fernbedienung 5 Sekunden drücken.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.