У меня есть приложение для iPhone, которое может удаленно выключать компьютер Mac. Я хотел бы, чтобы это приложение выключало мой компьютер Ubuntu.
При попытке закрыть приложение я получаю следующие сообщения:
Когда Ubuntu выключен:
"Ошибка подключения"
Когда Ubuntu включен:
"zsh:1: команда не найдена: osascript"
Это заставляет меня думать, что приложение действительно может получить доступ к zsh. И если так: не могу ли я сделать псевдоним для "osascript" таким образом:
alias osascript="shutdown -h now"
Проблема в том, что я все еще получаю сообщение (в приложении для iPhone):
"zsh:1: команда не найдена: osascript"
Есть идеи почему? Я предполагаю, что приложение использует SSH и использует то же имя пользователя, что и псевдоним в Ubuntu.
Для failsearch: Должен ли я увидеть команду удаленного доступа в ".zsh_history"? Я не вижу здесь ни одной команды из приложения.
решение1
Не используйте приложения, которые не поддерживают Linux. «RMsrv Reboot» отлично работает при запуске и выключении Linux.
решение2
Сообщение об ошибке по крайней мере соответствует неудачной попытке запустить команду напрямую через ssh
, например ssh someuser@somehost somecommand
. В зависимости от того, как zsh
запущено и в какой файл конфигурации вы поместили псевдоним приложением, возможно, оно просто не было загружено. Кроме того, файл истории будет записан только интерактивными сеансами (что является "Good Thing™": представьте, если бы каждый скрипт zsh сбрасывал свое содержимое в ваш файл истории при выполнении).
osascript
это интерпретатор командной строки AppleScript (благодаряквадратныйдля подсказки). Таким образом, он недоступен для Ubuntu. Но вполне вероятно, что приложение запускает какой-то небольшой скрипт через параметр командной строки, чтобы выключить Mac.
Если вы хотите только выключить машину, вы можете просто разместить
/usr/bin/osascript
на машине Ubuntu скрипт, который ее выключает. Например:#!/bin/sh sudo /sbin/shutdown -h now
Это предполагает доступ без пароля по крайней мере к
shutdown -h now
. Вы можете добиться этого, добавив следующую строку в свой/etc/sudoers
или файл, который включен в него:YOURUSERNAME ALL = NOPASSWD: /sbin/shutdown -h now
Если вы хотите реагировать на различные команды (выключение, перезагрузка и т. д.), вы можете попытаться получить параметры командной строки, которые приложение использует для них. Для этого сначала поместите следующий скрипт с именем
osascript
в/usr/bin
(Теоретически любой путь, указанный вPATH
должен подойти. К сожалению,ssh
часто использует собственные настройки дляPATH
. См. ниже.) на вашей машине Ubuntu:#!/bin/sh logfile='/path/to/logfile' echo "$@" >> "$logfile" echo '---->8----' >> "$logfile"
Не забудьте сделать его исполняемым (
chmod 755 /usr/bin/osascript
).Теперь вы можете запустить различные варианты, которые может предложить приложение, и каждый раз проверять вывод в файле журнала (
tail -F /path/to/logfile
может помочь). Теперь вам нужно только найти различия в каждом выводе и написать скрипт, который будет реагировать соответствующим образом.
Как упоминалось выше, ssh
может использовать свои собственные настройки для PATH
, которые могут существенно отличаться от настроек, которые вы получаете в своем терминальном сеансе ( echo $PATH
). К счастью, вы можете легко получить PATH
используемые с ssh
помощью
ssh localhost 'echo $PATH'
Если вы видите там /usr/local/sbin
или /usr/local/bin
, я предлагаю поместить скрипт туда, но подойдет любой из перечисленных каталогов.