Я хотел бы реализовать сочетание клавиш для перезапуска gnome-shell всякий раз, когда происходит сбой (некоторые ошибки в настоящее время еще не исправлены). Для этого мне понадобится командная строка, чтобы перезапустить оболочку.
То Alt+F2 и restart команда не будет работать при сбое оболочки, потому что реализована подсказка в раковина.
Следовательно, как перезапустить gnome-shell из командной строки?
Команда для замены gnome-shell будет посылать СИГКВИТ сигнал к нему с помощью:
killall -3 gnome-shell
или:
killall -SIGQUIT gnome-shell
Начиная с GNOME Shell 3.30.1 в Ubuntu 18.10, приведенное ниже решение больше не работает и приведет пользователя к экрану входа в систему, потеряв всю его работу.
До GNOME Shell 3.30.1
Команда для замены gnome-shell было бы:
gnome-shell --replace &
Амперсанд добавляется для возврата командной строки после выполнения команды; нажатие Ctrl+C или закрытие терминала вместо этого сделало бы рабочий стол непригодным для использования и потребовало бы полной перезагрузки.
Я определил псевдоним:alias gnomeshellrestart='echo "gnome-shell --replace -d" $(w| grep "$USER"| awk "{print \$3}"|grep ":"|head -1)| at now'
Возможно, вы сможете запустить терминал, щелкнув правой кнопкой мыши в фоновом режиме и введя там (alt-tab тоже не работает), если нет, войдите в tty, например, с помощью ctrl-alt-F2 и запустите оттуда.
Я придумал эту функцию для выхода пользователей из системы (см. Внизу)
Это предполагает
у вас есть права доступа к sudo
у тебя есть баш
у пользователей есть 1 запущенный сеанс X (хотя вы должны иметь возможность выполнять одну и ту же команду выхода несколько раз, чтобы избавиться от оставшихся сеансов)
Вы можете присвоить ему несколько имен пользователей:
logout john jane mike elisa
И вы можете предоставить ему дополнительные опции:
logout john --force
Итак, у меня есть следующая вспомогательная функция:
function forcelogout() { logout "$@" --no-prompt --force}
Записи:
Это тупые инструменты, и они работают, просто копируя всю среду сеанса. Это могло бы быть более избирательным.
Иногда кажется, что выход из системы занимает некоторое время
В редких случаях о сеансе продолжают сообщать до тех пор, пока кто-нибудь не посетит vt, где проводился сеанс, но там больше ничего нет)
код
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}
ПРИМЕЧАНИЕ: Alt+F2 и перезагрузка остановят все запущенные программы. (Я до сих пор не знаю, как перезапустить графический интерфейс, не останавливая программы.)