Lệnh Mac OS X Terminal để đăng xuất người dùng hiện tại là gì?


19

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:


22

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 osascriptlệ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 sleeplệ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'"

Vâng đặt. Một cải tiến để trả lời chính xác câu hỏi sẽ bao gồm cú pháp 'ngủ' sẽ là gì trong bản thảo. Ngoài ra, tôi hiểu dòng mã thứ hai đã được dán từ thiết bị đầu cuối, nhưng do đó nó đã thoát khỏi dấu ngoặc kép xung quanh Sự kiện hệ thống một cách không cần thiết.
Sắc sảo

@Sacrilicy điểm tốt về lệnh ngủ. Phần trích dẫn về phần "Sự kiện hệ thống" là cần thiết, bởi vìalias maclogout="..."
dbr

2
Gần đây tôi đã phát hiện ra rằng việc chạy lệnh trong một thiết bị đầu cuối sẽ không tắt / đóng hệ thống do chính Terminal ngăn chặn việc đăng xuất do bash không phải là quy trình hiện tại. Điều này có thể dễ dàng được sửa khi thực hiện '(lệnh ngủ 1;) &', trong đó chế độ ngủ xếp hàng công việc ở chế độ nền và vào thời điểm nó thực thi thì thiết bị đầu cuối không nghĩ rằng nó đang bận.
Grzegorz Adam Hankiewicz

17

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 loginwindowquy 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.

  1. Trong thiết bị đầu cuối, chạy này:

    ps -Ajc | grep loginwindow
    
  2. 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"

Bạn không thể sử dụng sudo killall loginwindow? Ít nhất là vào ngày 10.7, loginwindowquá trình này dường như được mở lại ngay lập tức.
Lri

3

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 awktuyên bố là khác nhau và kill -9đảm bảo nhanh chóng đăng nhập hiển thị.


@gronostaj Bạn có thực sự tin rằng một chỉnh sửa như thế sẽ được chấp nhận? Tôi thấy các chỉnh sửa được đề xuất như bị từ chối vì chỉnh sửa không hợp lệ (cố gắng trả lời hoặc nhận xét về bài đăng hiện có) Thay đổi triệt để hoặc triệt để luôn luôn - và markl rõ ràng là không có đủ đại diện để đăng bình luận.
Scott

@ Hủy bỏ bạn đúng, tôi đã quá nhanh chóng đăng bình luận đó.
gronostaj

2

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

0

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 logoutgiú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).


0

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>) bootoutnướ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ễ).


Ít nhất dưới El Capitan, lệnh đúng là sudo launchctl bootout gui/XXXnơi XXXlà số ID người dùng (UID). Lưu ý rằng i) bootouttiểu ban đến trước và ii) $(id)trả về nhiều hơn UID.
Laryx Decidua

Đã cập nhật để gọi đúng id (id -u)
Iain Henderson

0

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:

  1. Chỉnh sửa .bash_profile của bạn

    nano ~/.bash_profile

  2. Thêm dòng này:

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

  3. Lưu tập tin nhấn ctrl+x

  4. Khởi động lại thiết bị đầu cuối

Bạn đã sẵn sàng để đi ;)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.