Cách đăng xuất người dùng từ dòng lệnh trong OS X 10.9


31

Tôi muốn đăng xuất Mac OS X của tôi từ dòng lệnh. Phiên bản OS X của tôi là 10.9. Tôi đã thử lệnh pkill -KILL -u uid, nhưng lệnh này không thành công. Có một lệnh có thể được sử dụng để đăng xuất người dùng khỏi hệ thống chỉ bằng dòng lệnh chứ không phải AppleScript ?


chính xác những gì không làm việc ra?
nohillside

khi chạy lệnh pkill -KILL -u uid hệ thống hiển thị cho tôi một màn hình màu xám và chờ đợi lâu, hệ thống hiển thị cửa sổ thoát lực mà không có ứng dụng nào chạy
prateeak ojha

Câu trả lời:


32

sudo launchctl bootout gui/$(id -u <username>)
hoặc là
sudo launchctl bootout user/$(id -u <username>)

Thay thế tên người dùng bằng tên người dùng của mục tiêu hoặc thay thế toàn bộ mạng con bằng uid của người dùng. Điều này cho biết launchctl phân tích phiên đăng nhập của người dùng (gui đặc biệt đề cập đến phiên đăng nhập tạm thời của người dùng, người dùng chỉ định quy trình nền của người dùng).

Bạn có thể tự đăng xuất mà không cần sudokiểm tra điều này.

Lưu ý rằng điều này CHỈ sẽ hoạt động trên macOS 10.11.x hoặc mới hơn (xem launchctl helpđể biết thêm)


1
Tôi CHỈ đọc lại câu hỏi của bạn và tôi xin lỗi vì điều này sẽ không giúp bạn, nhưng nó sẽ xuất hiện trong kết quả tìm kiếm của google.
Iain Henderson

29

Để đăng xuất hoàn toàn từ thiết bị đầu cuối (hoặc một phiên ssh từ xa), chỉ cần giết quá trình loginwindow:

sudo pkill loginwindow

Bạn có thể thích và chỉ định người dùng nếu nhiều người dùng có quá trình đăng nhập, nhưng đây là một cách dễ dàng, không có cách nhanh chóng để kết thúc phiên đồ họa của người dùng.


16

Điều này đã làm việc cho tôi trong quá khứ:

Đăng xuất (có xác nhận)

osascript -e 'tell app "System Events" to log out'

Đăng xuất trực tiếp (không xác nhận)

osascript -e 'tell app "System Events" to  «event aevtrlgo»'

hoặc là

osascript -e 'tell application "loginwindow" to  «event aevtrlgo»'

Bằng cách này, bất kỳ ứng dụng đang chạy nào cũng sẽ được chú ý và có thể chấm dứt một cách an toàn.


osascript -e 'nói với ứng dụng "Sự kiện hệ thống" với «sự kiện aevtrlgo»' hiển thị lỗi: a "<" không thể thực hiện điều này sau.
prateeak ojha

Hmm, làm việc ok cho tôi. Bạn có thể thử từ một kịch bản shell thay vì dòng lệnh, có thể shell thực hiện một số nội dung lạ ở đây.
nohillside

Tôi đoán OP có một số vấn đề khác và các lệnh thông thường đang bị treo lên từ các bình luận ở đây và mô tả câu hỏi.
bmike

5
Lưu ý rằng «≠ <<
mlainz

2

Nếu bạn có nhiều người dùng ....

Tìm ID tiến trình với:

ps aux|grep login

Sau đó giết quá trình đó và bạn đăng xuất phiên đó. Nhưng có rất nhiều lực lượng còn lại.

Kiểm tra với pstreeđể bạn biết quá trình chấm dứt.


2

Đây không phải là mẹo cho tôi.

sudo -s

Để có được một số đặc quyền gốc và dấu nhắc #, sau đó hủy các tiến trình.

killall -vu username -HUP

Và nếu nó không phải là tất cả. Nuke em! Cảnh báo bắt buộc - giết mọi thứ khi root không có hoàn tác và không "bạn có chắc chắn muốn gián đoạn quá trình này mà không lưu các tệp của mình, bao gồm cả các cơ sở dữ liệu quan trọng của hệ thống có thể khiến máy không thể khởi động trong trường hợp hiếm gặp." loại cảnh báo.

killall -vu username -9

1
Không cần phải vào shell root - chỉ cần dán sudo trước các lệnh killall
user151019

1

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 ;)


Tôi đã phải phá vỡ cơ thể ra một dòng mới và sau đó cũng đặt nẹp xoăn.
bmauter

@bmauter không dành cho tôi, ở dạng đề xuất hoạt động hoàn hảo.
Kappe 17/12/18

-3

nếu bạn đã đăng nhập bằng ssh vào máy tính từ xa, bạn có thể đăng xuất bằng cách nhập 'exit':

[host:~user]$ exit
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.