Как я могу выйти из системы от 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
52
задан 27 August 2012 в 04:10

11 ответов

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

kill -9 -1

Don't run it as root though, по причинам, которые обсуждались here.

52
ответ дан 21 October 2019 в 12:24

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

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

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

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

  • В Ubuntu 12.04LTS, запускающей GNOME, команда

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

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

27
ответ дан 21 October 2019 в 12:24

Пожалуйста, следуйте за предложением takkat. Стандарт: Ctrl+Alt+Backspace.

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

$ sudo service lightdm restart
7
ответ дан 21 October 2019 в 12:24

Другой способ,

sudo pkill -u NameOftheUser

или

sudo pkill x

, убивающий всех пользователей.

3
ответ дан 21 October 2019 в 12:24

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

I создал этот сценарий, который устанавливает переменные сеанса 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
}
2
ответ дан 21 October 2019 в 12:24

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

1
ответ дан 21 October 2019 в 12:24

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

loginctl | egrep -v "root|SESSION|listed" | awk '{print $1}' | xargs loginctl terminate-session
3
ответ дан 21 October 2019 в 12:24

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

-2
ответ дан 21 October 2019 в 12:24

Вот что лучше всего подходит для меня (с xfce, lightdm и ssh):

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

Или

$ sudo service lightdm restart
1
ответ дан 23 November 2019 в 00:01

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

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

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

Вот как это выглядит для меня, например:

 $ loginctl kill-session 10
10 - 1000 коврик сиденье0 tty2
 

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

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

 $ loginctl list-sessions
СЕССИЯ UID ПОЛЬЗОВАТЕЛЬСКОЕ СИДЕНЬЕ TTY
  10 1000 коврик сиденье0 tty2
 

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

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

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

4
ответ дан 4 January 2021 в 11:49

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

0
ответ дан 4 January 2021 в 11:49

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

Похожие вопросы: