Tôi muốn chạy một cái gì đó như "ngủ 3600; đăng xuất", nhưng lệnh bash đăng xuất chỉ đóng thiết bị đầu cuối hiện tại. Làm cách nào để đóng phiên Mac OS X đầy đủ?
Tôi muốn chạy một cái gì đó như "ngủ 3600; đăng xuất", nhưng lệnh bash đăng xuất chỉ đóng thiết bị đầu cuối hiện tại. Làm cách nào để đóng phiên Mac OS X đầy đủ?
Câu trả lời:
Applescript sau đây sẽ đăng xuất người dùng hiện tại:
tell application "System Events" to log out
Bạn có thể gói nó trong một bí danh bash bằng osascript
lệnh:
alias maclogout="osascript -e 'tell application \"System Events\" to log out'"
Nó giống như nhấp vào "> Đăng xuất [tên người dùng] ..." và sẽ đăng xuất sau 2 phút chờ đợi
Điều này dễ dàng kết hợp với sleep
lệnh:
alias delayedlogout="sleep 3600; maclogout"
.. hoặc có thể được kết hợp thành một bí danh duy nhất:
alias delayedlogout="sleep 3600; osascript -e 'tell application \"System Events\" to log out'"
alias maclogout="..."
Không có cách "đẹp" nào để đăng xuất người dùng hiện tại khỏi Terminal trong OS X. Cách làm 'lộn xộn' là giết chết loginwindow
quy trình của người dùng đó . Nó sẽ thô lỗ giết tất cả các quy trình (chương trình) đang chạy dưới tên người dùng của bạn.
Làm điều này là một quá trình hai bước.
Trong thiết bị đầu cuối, chạy này:
ps -Ajc | grep loginwindow
Sau đó chạy
sudo kill <pid>
Trường hợp <pid>
số đầu tiên (cột thứ hai) từ đầu ra từ lệnh trên.
Sử dụng sudo kill -9 để buộc giết quy trình mà tôi phải làm để thực hiện điều này.
Vì vậy, ví dụ, khi đầu ra cho lệnh đầu tiên là:
joshhunt 41 1 41 5e15c08 0 Ss ?? 3:13.09 loginwindow
Sau đó, tôi sẽ chạy sudo kill 41
, nhập mật khẩu của mình và sau đó tôi đăng xuất.
Điều này có thể được kết hợp thành một bí danh bash:
alias messylogout="ps -Ajc | grep loginwindow | grep -v grep | awk '{print \$2}' | sudo xargs kill"
sudo killall loginwindow
? Ít nhất là vào ngày 10.7, loginwindow
quá trình này dường như được mở lại ngay lập tức.
Tôi biết đây là một câu hỏi cũ nhưng nó đã giúp tôi, lệnh tôi cần trên OS X 10.8 là:
ps -Ajc | grep loginwindow | awk '{print $2}' | sudo xargs kill -9
Các awk
tuyên bố là khác nhau và kill -9
đảm bảo nhanh chóng đăng nhập hiển thị.
Tôi nghĩ rằng tôi đã tìm thấy câu trả lời cho cách Đăng xuất một cách duyên dáng trên Mac OS X mà không phải chờ 2 phút.
Tôi phát hiện ra rằng việc giữ Shift, Option và Command và nhấn "q" sẽ đăng xuất một cách duyên dáng và không hỏi "nếu bạn muốn đăng xuất".
Vì vậy, tôi đã mã hóa một AppleScript thông qua Automator để:
tell application "System Events"
keystroke "q" using {command down, shift down, option down}
end tell
Nếu bạn đã đăng nhập vào shell với cùng một người dùng đã đăng nhập vào gui của mac, bạn có thể đưa ra lệnh sudo-less: launchctl reboot logout
giúp đăng xuất người dùng khá hiệu quả; nó có một cảnh báo là không cho phép các ứng dụng đang thoát khỏi sự thúc giục tương tác trong khi thoát, tuy nhiên dường như điều đó không ngụ ý rằng đây là điều tương tự như giết chết chúng hoàn toàn như kill
(SIG TERM) hoặc kill -9
(SIG KILL).
Tôi sẽ lập luận rằng cách "đẹp nhất" đăng OS X 10.9 có thể là launchctl gui/$(id -u <username>) bootout
Tài liệu bài OS X 10.9 cho launchctl được tìm thấy bằng cách chạy launchctl help
, nhưng về cơ bản, lệnh trên sẽ phá vỡ phiên tạm thời của người dùng. Thay thế launchctl user/$(id -u <username>) bootout
nước mắt xuống phiên vĩnh viễn chạy daemon người dùng trong khi người dùng không đăng nhập.
Điều này có thể được kiểm tra bằng cách chạy launchctl gui/$(id -u) bootout
, điều này sẽ ngay lập tức đăng xuất bạn và khiến hệ thống hiển thị cửa sổ đăng nhập (với một số độ trễ).
sudo launchctl bootout gui/XXX
nơi XXX
là số ID người dùng (UID). Lưu ý rằng i) bootout
tiểu ban đến trước và ii) $(id)
trả về nhiều hơn UID.
Một tiện ích tuyệt vời để thêm vào Terminal của bạn là lệnh đăng xuất , được sử dụng như:
logout UserName
Dưới đây là cách thực hiện:
Chỉnh sửa .bash_profile của bạn
nano ~/.bash_profile
Thêm dòng này:
logout() {sudo launchctl bootout user/$(id -u "$1")}
Lưu tập tin nhấn ctrl+x
Khởi động lại thiết bị đầu cuối
Bạn đã sẵn sàng để đi ;)