Просто в основном любопытно.
Скажем, у меня кто-то вошел в свой Mac обычным способом - т.е. графический вход в систему - и система перестает отвечать, и мне нужно выйти из системы.
Я могу достаточно легко перезагрузить систему (и, если что-то заблокируется, это может быть оправдано), используя 'sudo reboot
' или 'shutdown
', но можно ли просто удаленно выйти из системы, как это можно сделать через Apple Remote Desktop?
Редактировать: Есть ли хороший способ сделать это, чтобы они могли сохранить файлы или, возможно, даже отменить выход?
Если вы включите ssh-сервер (удаленный вход в диалоговом окне настроек общего доступа), вы сможете подключиться к Mac по ssh с другого компьютера и выполнить любую команду, которую захотите.
Например: выключение -r сейчас
РЕДАКТИРОВАТЬ:
sudo kill WindowServer
Это приведет к выходу пользователя из системы.
Вы могли бы сделать что-то вроде:
killall -u <username>
Но это действительно грязно. Или просто убейте их процесс входа в систему. Это в значительной степени похоже на то, что у вас есть синий экран окна Windows. Они потеряли бы любую несохраненную работу и т. Д.
Однако я не могу придумать другого способа сделать это более изящно.
Любой пользователь с правами администратора может выйти из системы с помощью launchctl, если это система с версией 10.9.
sudo launchctl bootout gui/$(id -u <username>)
разорвет временный сеанс пользователя и вернет систему в окно входа в систему.
Ты можешь видеть launchctl help
Чтобы получить больше информации.
Помните, что временный домен пользователя (указанный gui/501
или какой-либо другой идентификатор пользователя) определяется этим идентификатором пользователя, и система не будет сопоставлять имя пользователя с идентификатором пользователя (но id
воля).
Хорошей утилитой, которую можно добавить в свой терминал, является команда «выйти из системы», которую можно использовать как:
logout UserName
Вот как:
Отредактируйте свой .bash_profile
nano ~/.bash_profile
Добавьте эту строку:
logout() {sudo launchctl bootout user/$(id -u "$1")}
Сохраните файл, нажав ctrl+x
Перезагрузите терминал
Вы готовы к работе;)
Это почти работает:
echo 'tell application "System Events" ^ log out ^ keystroke return ^ end tell' | tr '^' '\n' | osascript
Если вы не против дождаться обратного отсчета таймера окна входа в систему, это проще:
osascript -e 'tell application "System Events" to log out'
Теперь, когда вы можете выйти из системы таким образом (из сеанса SSH), вы получите:
_RegisterApplication(), FAILED TO establish the default connection to the WindowServer, _CGSDefaultConnection() is NULL.
Если вы попытаетесь сделать это с кем-то другим (даже с помощью sudo).
Я не уверен, как убить логин пользователя и позволить ему отменить это действие или сохранить файл, хотя большинство приложений под Lion будут автоматически сохранять. У меня возникла проблема с зависанием заставки под Lion (началось при обновлении до OSX 10.7.4 - см. https://discussions.apple.com/message/18398072) и я с этим справляюсь следующим образом.
SSH в рассматриваемый Mac (это, конечно, предполагает, что вы можете это сделать) и
ps ax | grep [W]indowServer
это даст вам идентификатор процесса WindowServer. затем
sudo kill -HUP *{the PID from the previous command}*
Mac подождет несколько секунд, пока сделает то, что ему нужно, а затем вернет вас обратно к экрану входа в систему.
Найдите их WindowServer или процесс входа в систему:
grep WindowServer
Найдите идентификатор процесса пользователя
sudo kill -9
Предполагается, что вы являетесь администратором их компьютера.
Убийство сервера Windows унесет с собой все его дочерние процессы.
Если вы можете войти в систему как пользователь через SSH, вы можете использовать:
$ alias maclogout="osascript -e 'tell application \"System Events\" to log out' "
$ (sleep 1; maclogout) &
Подождите почти две минуты, прежде чем появится окно входа в систему. В моем тестировании диалоговое окно выхода не появлялось раньше, чем через десять или пятнадцать секунд после подачи команды, затем было 60 секунд ожидания, а затем было время, необходимое для выхода.
Другой альтернативой является подход, указанный в ответе пользователя bmike к вопрос в Apple.StackExchange.com:
sudo pkill loginwindow