Как я могу выйти из GUI, используя CLI?

Я выбрал Openbox DE во время входа в систему, и системе потребовалось много времени, чтобы загрузить DE. Поэтому я переключился на CLI (Ctrl+Alt+F1) и перезагрузил систему (но я хотел выйти из GUI и не перезагружать всю систему).

Мой вопрос, могу ли я выполнить какую-то команду в CLI, чтобы выйти из GUI, чтобы я мог выбрать другой DE. (Я не хочу перезапускать свою систему каждый раз, когда DE зависает.)


$ 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

12 ответов

Решение

Чтобы завершить все пользовательские процессы и вернуться на экран входа в систему, вы можете использовать:

kill -9 -1

Не запускайте его с правами root по причинам, обсуждаемым здесь.

Это можно сделать с помощью gnome-session-quit команда. Это нужно --force возможность подавить диалог подтверждения, который появится без него.

В отличие от приложений, запускаемых из эмулятора X-терминала, завершение сеанса из TTY требует добавления DISPLAY переменная, чтобы указать, какой дисплей X выполняет сеанс. Следовательно:

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

Предполагая, что вы используете GNOME:0, что имеет место в обычных ситуациях.

  • В Ubuntu 12.04LTS под управлением GNOME команда

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

    работает. Аргумент "--force" не существует на текущем уровне обновления]

В современных дистрибутивах Linux systemd все ответы слишком сложные. Решение - один инструмент: loginctl.

В хорошей оболочке у вас даже есть автозаполнение, поэтому используйте Tab для просмотра опций и параметров, и это довольно интуитивно понятно. Команда для поиска: kill-session.

Если вы перейдете на вкладку, вы заметите, что у каждого сеанса есть идентификатор, но в моем случае он также показал имя пользователя, TTY (то есть Ctrl+Alt+, которыйnumber вы вводите) и место.

Вот как мне это кажется, например:

$ loginctl kill-session 10  
10  -- 1000 rugk seat0 tty2

Вы можете просмотреть сеансы, чтобы найти правильный.

В противном случае, если это не сработает, вы можете найти идентификатор сеанса, запустив loginctl list-sessions или просто loginctl. Вы получите что-то вроде этого:

$ loginctl list-sessions                            
SESSION  UID USER SEAT  TTY 
    10 1000 rugk seat0 tty2

Я думаю, совершенно очевидно, что первый столбец содержит идентификатор сеанса, который вам нужно передать loginctl kill-session.

Это работает очень хорошо, если графический интерфейс зависает, и вам нужно принудительно убить его, что, по-видимому, является вашим вариантом использования.

Если вы хотите, чтобы это было объяснено более подробно, вот как вы можете убить свой сеанс, если графический интерфейс не отвечает или вы не можете использовать клавиатуру.

Пожалуйста, следуйте советам Такката. Стандарт - Ctrl+Alt+Backspace.

Вы также можете запустить:

$ sudo service lightdm restart

В качестве альтернативы, вы можете прекратить сеансы пользователей, используя следующее, хорошо работает для выхода из системы, кроме пользователя root - например, при выполнении обслуживания.

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

По-другому,

sudo pkill -u NameOftheUser

или же

sudo pkill x

которые убивают всех пользователей.

Реальная проблема заключается в том, что переменные сеанса DBUS должны быть установлены и соответствовать сеансу, которым вы пытаетесь управлять.

Я создал этот скрипт, который устанавливает переменные сеанса DBUS из среды gnome-session, если вы хотите выйти из системы других пользователей / сеансов:

Как перезапустить Gnome-Shell из командной строки?

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
}

Это то, что лучше всего работает для меня (с xfce, lightdm и ssh):

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

Или же

$ sudo service lightdm restart

Если вы находитесь в сеансе xubuntu или аналогичном, вы должны использовать xfce4-session-logout вместо команд сеанса gnome, поэтому вы видите предупреждения

Если вы используете Openbox, вы можете использоватьopenbox --exit который выйдет из сеанса Openbox и вернется к менеджеру входа в систему, в моем случае LightDM.

Эта команда выполнит выход из системы, показывая приглашение выхода из системы, и перенесет вас в окно входа в систему. gnome-session-quit --no-prompt
Чтобы выключить питание, вы можете использовать эту команду, это откроет диалоговое окно для подтверждения отключения питания.
gnome-session-quit --power-off
Вы можете избавиться от диалогового окна, используя --no-prompt

Вы можете использовать команду killall gnome-session выйти из системы Это будет работать для всех сессий GNOME и, если я правильно помню, все связанные с GNOME. Он возвращает вас обратно в LightDM, чтобы вы могли выбрать новый DE или нового пользователя.:)

Другие вопросы по тегам