Ich habe eine iPhone-App, mit der ich einen Mac-Computer aus der Ferne herunterfahren kann. Ich möchte, dass diese App meinen Ubuntu-Computer herunterfährt.
Beim Versuch, das Programm herunterzufahren, erhalte ich folgende Meldungen von der Anwendung:
Wenn Ubuntu ausgeschaltet ist:
"Verbindungsfehler"
Wenn Ubuntu eingeschaltet ist:
„zsh:1: Befehl nicht gefunden: osascript“
Das lässt mich glauben, dass die App tatsächlich auf zsh zugreifen kann. Und wenn ja: Sollte ich nicht in der Lage sein, einen Alias für „osascript“ wie diesen zu erstellen:
alias osascript="shutdown -h now"
Das Problem ist, dass ich immer noch die Nachricht bekomme (in der iPhone-App):
„zsh:1: Befehl nicht gefunden: osascript“
Irgendwelche Ideen, warum? Ich vermute, dass die App SSH verwendet und denselben Benutzernamen wie der Alias in Ubuntu verwendet.
Für Failsearch: Soll ich den Remote-Zugriffsbefehl in „.zsh_history“ sehen? Ich kann hier keinen Befehl aus der App sehen.
Antwort1
Verwenden Sie keine Apps, die Linux nicht unterstützen. „RMsrv Reboot“ funktioniert hervorragend beim Starten und Herunterfahren von Linux.
Antwort2
Die Fehlermeldung ist zumindest konsistent mit einem fehlgeschlagenen Versuch, einen Befehl direkt über auszuführen ssh
, z. B. ssh someuser@somehost somecommand
. Je nachdem, wie zsh
gestartet wird und in welche Konfigurationsdatei Sie den Alias von der App einfügen, ist es möglich, dass er einfach nicht geladen wurde. Außerdem wird die Verlaufsdatei nur von interaktiven Sitzungen geschrieben (was eine „gute Sache™“ ist: Stellen Sie sich vor, jedes Zsh-Skript würde seinen Inhalt bei der Ausführung in Ihre Verlaufsdatei schreiben).
osascript
ist der AppleScript-Kommandozeileninterpreter (dankfürQuadratfür den Hinweis). Daher ist es für Ubuntu nicht verfügbar. Aber es ist wahrscheinlich, dass die App ein kleines Skript über einen Befehlszeilenparameter ausführt, um den Mac herunterzufahren.
Wenn das Herunterfahren Ihres Rechners das Einzige ist, was Sie tun möchten, können Sie einfach ein Skript
/usr/bin/osascript
auf Ihrem Ubuntu-Rechner platzieren, das ihn herunterfährt. Beispiel:#!/bin/sh sudo /sbin/shutdown -h now
Dies setzt einen passwortlosen Zugriff auf mindestens voraus
shutdown -h now
. Sie können dies erreichen, indem Sie Ihrer/etc/sudoers
oder einer darin enthaltenen Datei die folgende Zeile hinzufügen:YOURUSERNAME ALL = NOPASSWD: /sbin/shutdown -h now
Wenn Sie auf verschiedene Befehle (Herunterfahren, Neustart usw.) reagieren möchten, können Sie versuchen, die Befehlszeilenparameter abzurufen, die die App dafür verwendet. Platzieren Sie dazu zunächst das folgende Skript mit dem Namen
osascript
in/usr/bin
(TheoretischPATH
sollte jeder in aufgeführte Pfad ausreichen. Leiderssh
verwendet es oft seine eigenen Einstellungen fürPATH
. Siehe unten.) auf Ihrem Ubuntu-Computer:#!/bin/sh logfile='/path/to/logfile' echo "$@" >> "$logfile" echo '---->8----' >> "$logfile"
Vergessen Sie nicht, es ausführbar zu machen (
chmod 755 /usr/bin/osascript
).Nun kannst du die verschiedenen Möglichkeiten durchgehen, die die App zu bieten hat und jedes Mal die Ausgabe im Logfile überprüfen (
tail -F /path/to/logfile
könnte helfen). Jetzt musst du nur noch die Unterschiede in den einzelnen Ausgaben finden und ein Skript schreiben, das entsprechend reagiert.
Wie oben erwähnt, ssh
kann seine eigenen Einstellungen für verwenden PATH
, die sich möglicherweise stark von den Einstellungen unterscheiden, die Sie in Ihrer Terminalsitzung erhalten ( echo $PATH
). Glücklicherweise können Sie die PATH
von verwendeten Einstellungen ganz einfach ssh
mit abrufen
ssh localhost 'echo $PATH'
Wenn Sie dort /usr/local/sbin
oder sehen /usr/local/bin
, empfehle ich, das Skript dort zu platzieren, aber jedes aufgeführte Verzeichnis sollte ausreichen.