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

43

Я выбрал 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
Анкит
источник

Ответы:

45

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

kill -9 -1

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

mblasco
источник
3
Прекрасно работает, но почему? В частности, почему LightDM перезапускается после того, как вы убили все, кроме init?
Сиро Сантилли 事件 13 中心 法轮功 六四 事件
1
@CiroSantilli 巴拿馬 文件 六四 事件 法轮功 Потому что это насильственно УБИВАЕТ (9) ВСЕ, что разрешено. Это означает, что каждый процесс принадлежит вам. Использование SIGKILL для закрытия приложений абсолютно не рекомендуется! Используйте SIGTERM (15). Приложения могут реагировать на этот сигнал и выполнять очистку.
ManuelSchneid3r
22

Это можно сделать с помощью 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" не существует на текущем уровне обновления]

Cumulus007
источник
спасибо, я выполнил команду, но получил ошибку. Я отредактировал свой пост, чтобы включить ошибку. Пожалуйста, поделитесь, если я сделал что-то не так.
Анкит
Плохо, я не заметил, что вы упомянули, что используете openbox. К сожалению, эта команда будет работать только со стандартной установкой Ubuntu (Unity / GNOME). В качестве альтернативы, вы можете полностью закрыть GUI и тем самым запустить сеанс sudo service lightdm stop. редактировать: какую среду рабочего стола вы используете? Openbox - это просто оконный менеджер.
Cumulus007
я пытаюсь использовать kde / openbox или gnome / openbox.
Ankit
Не работает, если ваш терминал не является частью того же сеанса dbus, что и сеанс gnome. Как вы попадаете в другую сессию dbus?
Zan Lynx
Это команда, которая выполняется при нажатии «Выйти ...» через графический интерфейс?
Дор
7

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

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

$ sudo service lightdm restart
Тердон
источник
1
GDM был заменен на LightDM. Кроме того, Ctrl + Alt + Backspace отключен по умолчанию.
Cumulus007
@ Cumulus007 Спасибо, ответ обновлен. Я знаю, что Ctrl + Alt + Backspace отключен по умолчанию, никогда не понимал, почему, но я знаю об этом. Я просто информирую ОП, какова стандартная, наиболее часто используемая комбинация клавиш. Я считаю, что лучше придерживаться стандартов, так как это облегчает поиск неисправностей.
Terdon
1
Остановка lightdm будет означать, что после этого приглашение на вход не будет, поэтому у него не будет возможности войти в другую среду.
Poolie
1
Достаточно честно @poolie, ответ обновлен.
Тердон
4

По-другому,

sudo pkill -u NameOftheUser

или

sudo pkill x

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

Suhaib
источник
Это немного грубо, тебе не кажется?
помощник
Суровые? Это очень глупо.
HörmannHH
2

Реальная проблема заключается в том, что переменные сеанса 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
}
sehe
источник
Лучше всего использовать --logout --no-promptили --forceвместо --logout, иначе будет отображаться приглашение к выходу из системы.
gioele
1

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

Серхио Абреу
источник
1

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

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

Или

$ sudo service lightdm restart
pascalv
источник
0

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

loginctl | egrep -v "root|SESSION|listed" | awk '{print $1}' | xargs loginctl terminate-session
Шарль ван дер Генугтен
источник
-2

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

Райан МакКлюр
источник
2
Не лучший способ выхода из системы. Проверьте askubuntu.com/questions/69114/...
jokerdino
Никогда не видел этот вариант раньше. Я, вероятно, должен начать использовать это. Я полагаю, что killall gnome-sessionэто силовой способ закрыть его.
Райан МакКлюр