Как я могу выйти из 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 или нового пользователя.:)