현재 사용자를 로그 아웃하는 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'"

잘 넣어 질문에 정확하게 대답하기 위해 개선 된 것은 '자기'구문이 애플 스크립트에 포함되는 것입니다. 또한 두 번째 코드 줄이 터미널에서 붙여 졌음을 알았으므로 시스템 이벤트 주위의 큰 따옴표를 불필요하게 탈출했습니다.
Sacrilicious

수면 명령에 대한 @Sacrilicious 좋은 지적. "시스템 이벤트"부분의 이탈 된 인용문은 다음과 같은 이유로 필요합니다.alias maclogout="..."
dbr

2
최근 터미널에서 명령을 실행하면 터미널 자체로 인해 시스템이 종료되거나 닫히지 않아 bash가 현재 프로세스가 아니기 때문에 로그 아웃이 발생하지 않습니다. 이것은 '(sleep 1; command) &'를 사용하여 쉽게 고칠 수 있습니다. 여기서 절전 모드는 백그라운드에서 작업을 대기시키고 터미널이 실행될 때 터미널이 사용 중이라고 생각하지 않습니다.
Grzegorz 아담 한 키위 츠

17

현재 사용자를 OS X의 터미널에서 로그 아웃하는 "좋은"방법은 없습니다.이를 수행하는 '지저분한'방법은 해당 사용자의 loginwindow프로세스를 종료하는 것입니다. 사용자 이름으로 실행중인 모든 프로세스 (프로그램)를 무례하게 죽일 것입니다.

이 작업은 2 단계 프로세스입니다.

  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

@Scott 당신 말이 맞아요, 나는 그 의견을 너무 빨리 게시했습니다.
gronostaj

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그러면 즉시 로그 아웃되고 시스템에 로그인 창이 표시됩니다 (지연됨).


엘 카피 하에서 적어도 정확한 명령은 sudo launchctl bootout gui/XXX여기서 XXX수치 사용자 ID (UID)이있다. i) bootout부속 명령이 먼저오고 ii) $(id)UID보다 더 많은 것을 리턴합니다.
Laryx Decidua

제대로 호출 ID (아이디 -u)로 업데이트
이안 헨더슨

0

터미널에 추가 할 수있는 유용한 유틸리티는 다음 과 같이 사용되는 logout 명령입니다.

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.