Làm cách nào tôi có thể đăng xuất khỏi GUI bằng CLI?


43

Tôi đã chọn một Openbox DE tại thời điểm đăng nhập và hệ thống mất nhiều thời gian để tải DE. Vì vậy, tôi đã chuyển sang CLI ( Ctrl+ Alt+ F1) và khởi động lại hệ thống của mình (nhưng tôi muốn đăng xuất khỏi GUI và không khởi động lại toàn bộ hệ thống).

Câu hỏi của tôi là, tôi có thể đưa ra một số lệnh tại CLI để đăng xuất tôi khỏi GUI để tôi có thể chọn DE khác nhau không. (Tôi không muốn khởi động lại hệ thống của mình mỗi lần DE bị treo.)


$ DISPLAY=:0 gnome-session-quit --force

** (gnome-session-quit:3144): WARNING **: Failed to call logout: The name org.gnome.SessionManager was not provided by any .service files

Câu trả lời:


45

Để kết thúc tất cả các quy trình của người dùng và được gửi trở lại màn hình đăng nhập, bạn có thể sử dụng:

kill -9 -1

Đừng chạy nó như root, vì những lý do được thảo luận ở đây .


3
Hoạt động tuyệt vời, nhưng tại sao? Đặc biệt, tại sao LightDM khởi động lại sau khi bạn giết tất cả mọi thứ trừ init?
Ciro Santilli 心 心

1
@CiroSantilli 巴拿馬 件 Bởi vì nó mạnh mẽ giết chết (9) MỌI THỨ nó được phép. Có nghĩa là mọi quá trình thuộc sở hữu của bạn. Sử dụng SIGKILL để chấm dứt các ứng dụng là hoàn toàn không nên! Sử dụng SIGTERM (15). Các ứng dụng có thể phản ứng theo tín hiệu này và làm sạch.
ManuelSchneid3r

22

Điều này có thể được thực hiện bằng cách sử dụng gnome-session-quitlệnh. Nó cần --forcetùy chọn để chặn hộp thoại xác nhận sẽ xuất hiện mà không có nó.

Không giống như các ứng dụng chạy từ trình giả lập thiết bị đầu cuối X, việc kết thúc phiên từ TTY yêu cầu bạn nối thêm DISPLAYbiến để cho biết màn hình X nào đang chạy phiên. Vì thế:

DISPLAY=:0 gnome-session-quit --force

giả sử rằng bạn đang chạy Gnome trên: 0, đó là trường hợp bình thường.

  • Trong Ubuntu 12.04LTS chạy Gnome, lệnh

    "DISPLAY=:0 gnome-session-quit --logout --no-prompt" 
    

    làm. Đối số "--force" không tồn tại ở cấp cập nhật hiện tại]


cảm ơn, tôi đã chạy lệnh nhưng tôi đã gặp một số lỗi. Tôi đã chỉnh sửa bài viết của mình để bao gồm lỗi. Hãy chia sẻ nếu tôi đã làm điều gì sai.
Ankit

Thật tệ, tôi không nhận thấy bạn đề cập đến việc bạn đang sử dụng openbox. Thật không may, lệnh này sẽ chỉ hoạt động với cài đặt Ubuntu tiêu chuẩn (Unity / Gnome). Thay vào đó, bạn hoàn toàn có thể tắt GUI và do đó phiên của bạn bằng cách chạy sudo service lightdm stop. chỉnh sửa: bạn đang sử dụng môi trường máy tính để bàn nào? Openbox chỉ là một trình quản lý cửa sổ.
Cumulus007

tôi đang cố gắng sử dụng kde / openbox hoặc gnome / openbox.
Ankit

Không hoạt động nếu thiết bị đầu cuối của bạn không phải là một phần của phiên dbus giống như phiên gnome. Làm thế nào để bạn có được vào một phiên dbus khác?
Zan Lynx

Đây có phải là lệnh được thực thi khi nhấp vào "Đăng xuất ..." qua GUI không?
Dor

7

Hãy làm theo gợi ý của takkat . Tiêu chuẩn là Ctrl+ Alt+ Backspace.

Bạn cũng có thể chạy:

$ sudo service lightdm restart

1
gdm đã được thay thế bởi lightdm. Ngoài ra, ctrl + alt + backspace bị tắt theo mặc định.
Cumulus007

@ Cumulus007 Cảm ơn, trả lời cập nhật. Tôi biết ctrl + alt + backspace bị tắt theo mặc định, không bao giờ hiểu tại sao, nhưng tôi biết điều đó. Tôi chỉ thông báo cho OP biết tổ hợp phím tiêu chuẩn, thông dụng nhất là gì. Tôi thấy tốt nhất là tuân thủ các tiêu chuẩn vì nó giúp khắc phục sự cố dễ dàng hơn.
terdon

1
Dừng lightdm sẽ có nghĩa là không có dấu nhắc đăng nhập sau đó, vì vậy anh ta sẽ không có cơ hội đăng nhập vào một môi trường khác.
poolie

1
Đủ công bằng @poolie, trả lời cập nhật.
terdon

4

Cách khác,

sudo pkill -u NameOftheUser

hoặc là

sudo pkill x

mà giết tất cả người dùng.


Điều đó hơi khó khăn, bạn có nghĩ vậy không?
acolyte

Khắc nghiệt? Nó cực kỳ ngớ ngẩn.
HörmannHH

2

Vấn đề thực sự là các biến phiên DBUS phải được đặt và khớp với phiên bạn đang cố kiểm soát.

Tôi đã tạo tập lệnh này để đặt các biến phiên DBUS từ môi trường phiên gnome trong trường hợp bạn muốn đăng xuất người dùng / phiên khác:

Làm cách nào để khởi động lại Gnome-Shell từ dòng lệnh?

function logout() {
    local USERNAME
    export USERNAMES=( ) 
    while [ -n "$1" ]; do case "$1" in
        -* ) break ;;
        *) USERNAMES+=( "$1" ); shift ;;
    esac; done

    for USERNAME in "${USERNAMES[@]}"; do
        local SESSION_PID=$(pgrep -fu "$USERNAME" gnome-session|head -1)
        if [ -n "$SESSION_PID" ]; then
            (
                sudo -u "$USERNAME" cat "/proc/$SESSION_PID/environ" | xargs -0 -n 1 echo export
                echo "gnome-session-quit --logout $@"
            ) | sudo -u "$USERNAME" sh -;
        fi
    done
}

Sử dụng --logout --no-prompthoặc --forcethay vì chỉ --logoutlà một ý tưởng tốt hơn, nếu không, dấu nhắc đăng xuất sẽ được hiển thị.
gioele

1

Nếu bạn đang ở trong phiên xubfox hoặc tương tự, phải sử dụng đăng xuất phiên xfce4 phiên của các lệnh phiên gnome, đó là lý do tại sao bạn thấy cảnh báo


1

Đây là những gì hoạt động tốt nhất cho tôi (với xfce, lightdm và ssh):

$ DISPLAY=:0.0 xfce4-session-logout --logout

Hoặc là

$ sudo service lightdm restart

0

Thay vào đó, bạn có thể chấm dứt các phiên người dùng bằng cách sử dụng các mục sau, hoạt động tốt để đăng xuất người dùng ngoại trừ người dùng root - ví dụ như khi bảo trì.

loginctl | egrep -v "root|SESSION|listed" | awk '{print $1}' | xargs loginctl terminate-session

-2

Bạn có thể sử dụng lệnh killall gnome-sessionđể đăng xuất. Điều này sẽ hoạt động cho tất cả các phiên Gnome và nếu tôi nhớ chính xác tất cả các phiên liên quan đến Gnome. Nó đưa bạn trở lại LightDM để bạn có thể chọn DE mới hoặc người dùng mới. :)


2
Không phải là cách tốt nhất để đăng xuất. Kiểm tra Askubfox.com/questions/69114/ Mạnh
jokerdino

Chưa bao giờ thấy tùy chọn này trước đây. Tôi có lẽ nên bắt đầu sử dụng này. Tôi cho rằng đó killall gnome-sessionlà một cách mạnh mẽ để đóng nó.
Ryan McClure
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.