Я хотів би запустити щось на кшталт "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
Перезапустіть термінал
Ви готові йти;)