Я выбрал 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
Чтобы завершить все пользовательские процессы и быть отправленным обратно на экран входа, вы можете использовать:
kill -9 -1
Don't run it as root though, по причинам, которые обсуждались here.
Это можно сделать, используя команду 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" не существует в текущем уровне обновления]
Пожалуйста, следуйте за предложением takkat. Стандарт: Ctrl+Alt+Backspace.
Вы также можете запустить:
$ sudo service lightdm restart
Другой способ,
sudo pkill -u NameOftheUser
или
sudo pkill x
, убивающий всех пользователей.
Настоящая проблема в том, что переменные сеанса 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
}
Если вы находитесь в сеансе xubuntu или аналогичном, необходимо использовать xfce4-session -logout insted из команд сеанса gnome, поэтому вы видите предупреждения
В качестве альтернативы вы можете удалить пользователя сеансы, использующие следующее, хорошо подходят для выхода из системы пользователей, за исключением пользователя root, например, при обслуживании.
loginctl | egrep -v "root|SESSION|listed" | awk '{print $1}' | xargs loginctl terminate-session
Вы можете использовать команду killall gnome-session
для выхода из системы. Это сработает для всех сеансов GNOME и, если я правильно помню, для всех сеансов, связанных с GNOME. Это вернёт вас обратно в LightDM, так что вы можете выбрать новое DE или нового пользователя. :)
Вот что лучше всего подходит для меня (с xfce, lightdm и ssh):
$ DISPLAY=:0.0 xfce4-session-logout --logout
Или
$ sudo service lightdm restart
В современных дистрибутивах 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
.
Это очень хорошо работает, если графический интерфейс зависает и вам нужно принудительно убить его , который, по-видимому, и является вашим вариантом использования.
Если вы хотите, чтобы это объяснялось более подробно , вот как вы можете завершить свой сеанс, если графический интерфейс не отвечает или вы не можете использовать клавиатуру .
Если вы используете Openbox, вы можете использовать
openbox --exit
, который завершит сеанс Openbox и вернется к диспетчеру входа, в моем случае LightDM.