Що таке термінальна команда Mac OS X для виходу поточного користувача?


Відповіді:


22

Наступний 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'"

Добре кажучи. Вдосконаленням, щоб точно відповісти на питання, було б включити, яким буде синтаксис "сну" в яблучному скрипті. Також я розумію, що другий рядок коду був вставлений з терміналу, але тому він уникав подвійних лапок навколо System Events без потреби.
Священний

@Sacrilicious хороший пункт про команду сну. Цитата, що втекла, у частині "Системні події" необхідна, оскількиalias maclogout="..."
1111

2
Нещодавно я виявив, що запуск команди в терміналі не відключить / закриє систему через те, що сам Термінал запобігає виходу з-за того, що bash не є поточним процесом. Це можна легко виправити виконуючи "(сон 1; команда) &", коли сплячі черги виконують завдання у фоновому режимі і до моменту його виконання термінал не вважає, що він зайнятий.
Гжегож Адам Ганькевич

17

Немає "приємного" способу виходу поточного користувача з терміналу в ОС X. "Брудний" спосіб це зробити - це вбити процес цього користувача loginwindow. Це грубо знищить усі процеси (програми), що працюють під вашим іменем користувача.

Робити це - процес у два етапи.

  1. У терміналі запустіть це:

    ps -Ajc | grep loginwindow
    
  2. Потім бігайте

    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здається, процес відкриється знову ж таки.
Lri

3

Я знаю, що це старе питання, але це допомогло мені: мені потрібна команда в OS X 10.8:

ps -Ajc | grep loginwindow | awk '{print $2}' | sudo xargs kill -9

awkЗаява відрізняється і kill -9забезпечує Ввійти запрошення показано на малюнку.


@gronostaj Ви справді вірите, що така редакція буде прийнята? Я бачу запропоновані такі зміни, як відхилені як "недійсні зміни (спроба відповісти на коментар чи коментувати існуючу публікацію)" або "радикальна зміна" весь час - і Markl, очевидно, ще не має достатньої кількості відповідей для публікації коментарів.
Скотт

@Scott ви маєте рацію, я занадто швидко розмістив цей коментар.
gronostaj

2

Я думаю, що я знайшов відповідь на те, як граціозно вийти з 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

0

Якщо ви ввійшли в оболонку як той самий користувач, який увійшов у gui mac, ви можете випустити команду launchctl reboot logoutбез судо : яка виконує вихід користувача досить ефективно; у ній є застереження заборонити додаткам, які виходять із спонукань до взаємодії під час виходу, однак, схоже, це не означає, що це те саме, що вбити їх прямо, як kill(SIG TERM) або kill -9(SIG KILL).


0

Я б стверджував, що «найприємнішим» способом після 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, це негайно вийде з системи та призведе до того, що система відобразить вікно входу (з деякою затримкою).


Принаймні, під El Capitan, правильна команда - sudo launchctl bootout gui/XXXде XXXчисельний ідентифікатор користувача (UID). Зауважте, що i) bootoutпідкоманда приходить першою, і ii) $(id)повертає набагато більше, ніж UID.
Laryx Decidua

Оновлено належним чином для виклику id (id -u)
Iain Henderson

0

Приємною утилітою, яку потрібно додати до свого терміналу, є команда виходу , яка використовується таким чином:

logout UserName

Ось як:

  1. Відредагуйте .bash_profile

    nano ~/.bash_profile

  2. Додати цей рядок:

    logout() {sudo launchctl bootout user/$(id -u "$1")}

  3. Збережіть файл, натиснувши ctrl+x

  4. Перезапустіть термінал

Ви готові йти;)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.