現在のユーザーをログアウトするMac OS X端末コマンドとは何ですか?


回答:


22

次のApplescriptは、現在のユーザーをログアウトします。

tell application "System Events" to log out

osascript次のコマンドを使用して、これをbashエイリアスでラップできます。

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'"

よく置きます。質問に正確に答える拡張機能は、「sleep」構文がapplescriptに含まれるものを含めることです。また、コードの2行目がターミナルから貼り付けられたことがわかりますが、システムイベントの二重引用符を不必要にエスケープしました。
-Sacrilicious

スリープコマンドに関する@Sacriliciousの良い点。一部が原因で、必要な「システムイベント」にエスケープ引用符alias maclogout="..."
DBR

2
私は最近、ターミナルでコマンドを実行しても、bashが現在のプロセスではないためにターミナル自体がログアウトできないため、システムをシャットダウン/クローズしないことを発見しました。これは、 '(sleep 1; command)&'を実行することで簡単に修正できます。この場合、スリープはジョブをバックグラウンドでキューに入れ、実行するまでに端末はビジーではないと判断します。
グジェゴシアダムHankiewicz

17

OS Xのターミナルから現在のユーザーをログアウトする「いい」方法はありません。それを行う「面倒な」方法は、そのユーザーのloginwindowプロセスを強制終了することです。ユーザー名で実行されているすべてのプロセス(プログラム)を無作法に強制終了します。

これは2段階のプロセスです。

  1. ターミナルで、これを実行します:

    ps -Ajc | grep loginwindow
    
  2. 次に、実行します

    sudo kill <pid>
    

    <pid>上記のコマンドの出力からの最初の数字(2列目)はどこですか。

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

これは古い質問ですが、助けてくれました。OSX 10.8で必要なコマンドは次のとおりです。

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

awk文は異なり、kill -9ログインプロンプトが表示されることを保証します。


@gronostajそのような編集が受け入れられると本当に信じていますか?「無効な編集(既存の投稿への返信またはコメントの試行)」または「根本的な変更」として拒否されるような編集の提案が常に表示されます。
スコット

@Scottおっしゃるとおりです、私はそのコメントを素早く投稿しています。
グロノスタジ

2

2分間待たずにMac OS X を正常にログアウトする方法の答えを見つけたと思います。

Shift、Option、およびCommandを押しながら「q」を押すと、「ログアウトするかどうか」を尋ねずに正常にログアウトすることがわかりました。

そこで、AutomatorでAppleScriptを次のようにコーディングしました。

tell application "System Events"
     keystroke "q" using {command down, shift down, option down}
end tell

0

MacのGUIにログインしているのと同じユーザーとしてシェルにログインしている場合、sudo-lessコマンドを発行できlaunchctl reboot logoutます。終了中に対話を促すことをやめているアプリを許可しないという警告がありますが、これがkill(SIG TERM)またはkill -9(SIG KILL)のように完全に殺すことと同じことを意味するようには見えません。


0

私は、OS X 10.9以降の「最も素晴らしい」方法は、 launchctl gui/$(id -u <username>) bootout

launchctlのOS X 10.9以降のドキュメントはを実行することlaunchctl helpで見つかりますが、基本的に上記のコマンドはユーザーの一時セッションを分解します。別の方法でlaunchctl user/$(id -u <username>) bootoutは、ユーザーがログインしていないときにユーザーデーモンを実行する永続セッションを切断します。

これはを実行することでテストできます。これによりlaunchctl gui/$(id -u) bootout、すぐにログアウトされ、システムにログインウィンドウが表示されます(遅延が発生します)。


少なくともEl Capitanの下sudo launchctl bootout gui/XXXXXXは、正しいコマンドは、ユーザーID(UID)の数値です。i)bootoutサブコマンドが最初に来て、ii)$(id)UIDよりも多くを返すことに注意してください。
Laryx Decidua 16

適切にコールID(識別-u)に更新
イアン・ヘンダーソン

0

ターミナルに追加する便利なユーティリティは、次のように使用されるログアウトコマンドです。

logout UserName

ここで方法:

  1. .bash_profileを編集します

    nano ~/.bash_profile

  2. 次の行を追加します。

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

  3. ファイルを保存します ctrl+x

  4. ターミナルを再起動します

あなたは行く準備ができています;)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.