Я хотів би запустити щось на кшталт "sleep 3600; logout", але команда bash bash лише закриває поточний термінал. Як закрити повний сеанс Mac OS X?
Я хотів би запустити щось на кшталт "sleep 3600; logout", але команда bash bash лише закриває поточний термінал. Як закрити повний сеанс Mac OS X?
Відповіді:
Наступний Applescript вийде з поточного користувача:
tell application "System Events" to log out
Ви можете зафіксувати це в псевдонімі bash за допомогою osascript
команди:
alias maclogout="osascript -e 'tell application \"System Events\" to log out'"
Це те саме, що натиснути "> Вийти [ім'я користувача] ...", і вийде з системи через 2 хвилини очікування
Це легко поєднується з sleep
командою:
alias delayedlogout="sleep 3600; maclogout"
.. або можна об'єднати в єдиний псевдонім:
alias delayedlogout="sleep 3600; osascript -e 'tell application \"System Events\" to log out'"
alias maclogout="..."
Немає "приємного" способу виходу поточного користувача з терміналу в ОС X. "Брудний" спосіб це зробити - це вбити процес цього користувача loginwindow
. Це грубо знищить усі процеси (програми), що працюють під вашим іменем користувача.
Робити це - процес у два етапи.
У терміналі запустіть це:
ps -Ajc | grep loginwindow
Потім бігайте
sudo kill <pid>
Де <pid>
знаходиться перше число (другий стовпчик) з виводу з вищевказаної команди.
Використовуйте sudo kill -9, щоб змусити вбити процес, який мені довелося зробити, щоб це спрацювало.
Так, наприклад, коли, якщо вихід на першу команду:
joshhunt 41 1 41 5e15c08 0 Ss ?? 3:13.09 loginwindow
Тоді я бігав би sudo kill 41
, вводив свій пароль, і тоді я вийшов із системи.
Це може бути об'єднано в псевдонім bash:
alias messylogout="ps -Ajc | grep loginwindow | grep -v grep | awk '{print \$2}' | sudo xargs kill"
sudo killall loginwindow
? Принаймні, 10.7, loginwindow
здається, процес відкриється знову ж таки.
Я знаю, що це старе питання, але це допомогло мені: мені потрібна команда в OS X 10.8:
ps -Ajc | grep loginwindow | awk '{print $2}' | sudo xargs kill -9
awk
Заява відрізняється і kill -9
забезпечує Ввійти запрошення показано на малюнку.
Я думаю, що я знайшов відповідь на те, як граціозно вийти з Mac OS X без 2-хвилинного очікування.
Я зрозумів, що утримуючи Shift, Option і Command та натискаючи "q", виходити витончено, а не запитувати "чи ви хочете вийти".
Тому я зашифрував AppleScript через Automator для:
tell application "System Events"
keystroke "q" using {command down, shift down, option down}
end tell
Якщо ви ввійшли в оболонку як той самий користувач, який увійшов у gui mac, ви можете випустити команду launchctl reboot logout
без судо : яка виконує вихід користувача досить ефективно; у ній є застереження заборонити додаткам, які виходять із спонукань до взаємодії під час виходу, однак, схоже, це не означає, що це те саме, що вбити їх прямо, як kill
(SIG TERM) або kill -9
(SIG KILL).
Я б стверджував, що «найприємнішим» способом після OS X 10.9 може бути launchctl gui/$(id -u <username>) bootout
Документацію після запуску OS X 10.9 для startctl можна знайти за допомогою запуску launchctl help
, але по суті команда, наведена вище, призупинить тимчасовий сеанс користувача. Альтернатива launchctl user/$(id -u <username>) bootout
вириває постійний сеанс, який запускає демони користувачів, поки користувач не входить у систему.
Це можна перевірити, запустивши launchctl gui/$(id -u) bootout
, це негайно вийде з системи та призведе до того, що система відобразить вікно входу (з деякою затримкою).
sudo launchctl bootout gui/XXX
де XXX
чисельний ідентифікатор користувача (UID). Зауважте, що i) bootout
підкоманда приходить першою, і ii) $(id)
повертає набагато більше, ніж UID.
Приємною утилітою, яку потрібно додати до свого терміналу, є команда виходу , яка використовується таким чином:
logout UserName
Ось як:
Відредагуйте .bash_profile
nano ~/.bash_profile
Додати цей рядок:
logout() {sudo launchctl bootout user/$(id -u "$1")}
Збережіть файл, натиснувши ctrl+x
Перезапустіть термінал
Ви готові йти;)