사용자가 로그 아웃 할 때 몇 가지 정리 명령을 실행하려고 시도했지만 여전히 작동하지만 이전 로그 아웃 후크 기능은 더 이상 사용되지 않으므로 더 이상 우리와 함께하지 않을 수 있습니다.
불행하게도, launchd
로그인 후크에 대한 편리한 대안을 제공 하지만, 로그 아웃 후크를 대체하는 확실한 방법은 없습니다.
이미 로그인 할 때 시작되는 쉘 스크립트를 작성하는 실험을 해왔으며 킬 신호가 수신 될 때까지 잠자기 상태이지만 작동하지 않는 것 같습니다 (스크립트는 정상적인 작동 중에 신호를 수신하지 않습니다).
그렇지 않으면 로그 아웃시 빠른 명령을 실행하는 가장 좋은 방법이 무엇인지 잘 모르겠습니다. 이를 수행 할 수있는 타사 유틸리티가 있지만 더 이상 “올바른”방법이 있습니까?
답변
애플은 로그 아웃 후크 교체에 관심이없는 것 같습니다.
그러나 요세미티에서 개선 된 기능 중 하나는 이제 시작되어 셸 스크립트로 신호를 올바르게 전송한다는 것입니다. 이것이 의미하는 바는 이제 다음과 같이 로그 아웃 작업을 수행 할 수 있다는 것입니다.
다음은 logout.sh의 예입니다.
#!/bin/sh
onLogout() {
echo 'Logging out' >> ~/Logs/logout.sh.log
exit
}
trap 'onLogout' SIGINT SIGHUP SIGTERM
while true; do
sleep 86400 &
wait $!
done
이것은 트랩 된 신호 중 하나를 수신 할 때까지 잠자기 (비동기 적으로, 앰퍼샌드없이 동기식으로 수행하고 작동하지 않는 것 같습니다).이 시점에서 onLogout
함수 를 실행합니다 .
RunAtLoad
시작 에이전트 또는 시작 데몬을 사용하여 해당 스크립트를 시작하기 만하면 로그 아웃 또는 종료시 실행되지만 작업이 종료되기 전에 완료하는 데 시간이 제한되어 있다는 점을 명심해야합니다. 따라서 시간이 오래 걸리거나 지연 될 수있는 네트워크 연결이 필요한 항목을 실행하는 데 사용해서는 안됩니다.
물론 이것은 매버릭스 또는 그 이전의 사람에게는 아무 소용이 없지만 요세미티에서는 이제 예상대로 작동하는 것 같습니다. 그래서 실제로 처음부터 launchd
제대로하고 있었지만 신호를 제대로 보내지 않았습니다. 🙂
참고 :이 작업을 수행하려면 셸 스크립트를 시작하여 직접 실행해야합니다. 즉,을 통해 호출하면 안됩니다 sh
. 따라서 ~/Library/Scripts/foo.sh
프로그램에 배치되면 인수는 다음과 같습니다.
<key>ProgramArguments</key>
<array>
<string>~/Library/Scripts/foo.sh</string>
<string>bar</string>
</array>
<key>EnableGlobbing</key>
<true/>
답변
iHook을 사용하여 로그인 / 로그 아웃 후크를 실행할 수 있는데, 요세미티의 Bash 및 Python으로 작성된 비 대화식 로그인 및 로그 아웃 후크에 대해 여전히 작동하는 것으로 나타났습니다.
답변
검색 엔진에서 온 다른 사람들이 로그 아웃 후크 사용에 신경 쓰지 않으면 다음과 같이 실행하십시오.
sudo defaults write com.apple.loginwindow LogoutHook '~/.logouthook';echo $'#!/usr/bin/env bash\n\nsay a'>~/.logouthook;chmod +x ~/.logouthook
다음 ~/.logouthook
에 로그 아웃 할 때 실행됩니다.
LogoutHook
키 값은 쉘 명령이 아닌 실행 파일의 경로 여야합니다. defaults
명령 수정 /var/root/Library/Preferences/com.apple.loginwindow.plist
.
답변
시작된 로그 아웃 항목을 10.10.1에서도 작동시킬 수 없지만 루트의 “com.apple.loginwindow.plist”에있는 LogoutHook 키는 제대로 작동합니다. 시작된 방법에 대한 다른 예가 있습니까?
어쨌든, 로그 아웃 할 때 시스템 볼륨을 죽이기 위해 AppleScript를 작성하여 다음 시작시 시작 차임 소리가 들리지 않습니다. 내가 해결하지 않은 것은 단일 LogoutHook 키를 기반으로 여러 로그 아웃 명령을 관리하거나 여러 LogoutHook 키를 저장할 수 있는지 여부에 대한 세부 정보이므로 Lingon으로 관리 할 수있는 Launchd 메서드에 여전히 관심이 있습니다. 또는 원본보다 훨씬 좁은 범위를 가진 Lingon 3조차도 (App Store에있을 수 있음).
current_Vol을 (쉘 스크립트 "osascript -e \"(볼륨 설정 가져 오기) \ "")로 설정) 버튼이 반환 된 경우 ( "대화창 시작, 차음 또는 복원 하시겠습니까?"단추 대화 상자 표시 ( "침묵", "복원", "취소"} 기본 버튼 1))가 "침묵"인 경우 쉘 스크립트 "mkdir -p / usr / local / logouttask; echo '#! / bin / bash # 로그 아웃 스크립트 osascript -e \ "set volume 0 \" '> / usr / local / logouttask / logoutscript; sudo 기본값은 com.apple.loginwindow LogoutHook / usr / local / logouttask / logoutscript; chmod + x / usr / local / logouttask / logoutscript를 작성합니다. "관리자 권한으로 그밖에 시험 관리자 권한으로 쉘 스크립트 "sudo defaults 쓰기 com.apple.loginwindow LogoutHook ''; rm / usr / local / logouttask / logoutscript"수행 디스플레이 대화창 "종료 또는 재시작시 볼륨 설정이 0보다 크면 시작 차임이 들립니다." 버튼 { "OK"} 기본 버튼 1 오류시 error_message 번호 error_number error_number가 1이면 디스플레이 대화창 "로그 아웃시 시스템 볼륨을 0으로 설정하는 스크립트가 존재하지 않습니다. 종료 또는 재시작시 볼륨 설정이 0보다 크면 시작 차임 소리가납니다." 버튼 { "OK"} 기본 버튼 1 그밖에 디스플레이 대화 상자 "오류 :"& error_number & "."및 error_message 단추 { "OK"} 기본 단추 1 경우 종료 최종 시도 경우 종료