Я придумал эту функцию для выхода из системы пользователей (см. Внизу)
Предполагает
- у вас есть права 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
}
restart
остановит все запущенные программы. (Я до сих пор не знаю, как перезапустить графический интерфейс, не останавливая программы.)