Вопрос или проблема
Я использую настольную версию Ubuntu 22. Время от времени мне нужно запускать машину с активными SSH-сессиями от различных пользователей, как сервер.
Есть ли способ настроить GNOME (или Ubuntu в общем), чтобы предотвратить приостановку рабочего стола при наличии активной SSH-сессии? Я предпочёл бы решение, которое не требует полного отключения приостановки, а только когда используется SSH. Я настроил функцию пробуждения по сети, чтобы удалённо возобновлять работу машины после приостановки.
Похоже, что основной инструмент, доступный для этой задачи, — это gnome-session-inhibit
. Поэтому я попробовал добавить этот код в sshd_config:
ForceCommand gnome-session-inhibit --inhibit suspend:idle --reason "SSH Session" bash
Но это не совсем работает. Если пользователь пытается подключиться, но ещё не вошёл в свою сессию GNOME, эта команда выдает ошибку.
Я также рассматривал возможность настроить приостановку бездействия через gsetting
gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-ac-type 'nothing'
Но и это, похоже, не работает по той же причине.
Заранее спасибо!
Ответ или решение
Как предотвратить приостановку рабочего стола GNOME при активной SSH-сессии?
Если вы используете Ubuntu 22 с рабочим окружением GNOME и хотите, чтобы ваш компьютер не переходил в режим приостановки во время активных SSH-сессий, вы можете достичь этого с помощью утилиты gnome-session-inhibit
и правильной конфигурации вашего SSH-сервера.
1. Установка gnome-session-inhibit
Убедитесь, что gnome-session-inhibit
доступен в вашей системе. Обычно он предустановлен в дистрибутиве Ubuntu с GNOME. Чтобы проверить его наличие, выполните команду:
which gnome-session-inhibit
Если утилита установлена, вы должны увидеть путь к ней. Если нет, вы можете установить необходимые пакеты:
sudo apt install gnome-session-bin
2. Настройка SSH
Добавьте следующую строку в файл конфигурации sshd_config
, обычно расположенный по пути /etc/ssh/sshd_config
:
ForceCommand gnome-session-inhibit --inhibit suspend:idle --reason "SSH Session" bash
Однако следует учитывать, что использование ForceCommand
в sshd_config
приведет к ошибке, если пользователь не авторизован в текущем сеансе GNOME. Вместо этого рекомендуется использовать более гибкий подход, который может работать как с активными, так и с неактивными пользователями.
3. Создание скрипта для управления сессией
Создайте bash-скрипт, который будет запускаться при подключении по SSH. Создайте файл, например /usr/local/bin/ssh-inhibit.sh
:
sudo nano /usr/local/bin/ssh-inhibit.sh
Добавьте в скрипт следующий код:
#!/bin/bash
# Проверка, запущена ли GNOME-сессия для данного пользователя
if [ -n "$DISPLAY" ]; then
gnome-session-inhibit --inhibit suspend:idle --reason "SSH Session" bash
else
# В случае, если GNOME не запущен, просто запускаем bash
exec bash
fi
Сделайте скрипт выполнимым:
sudo chmod +x /usr/local/bin/ssh-inhibit.sh
4. Обновление sshd_config
Теперь измените ForceCommand
в sshd_config
на следующий вариант:
ForceCommand /usr/local/bin/ssh-inhibit.sh
5. Перезапуск SSH-сервиса
После внесения изменений сохраните файл и перезапустите SSH-сервер:
sudo systemctl restart ssh
6. Проверка настройки
Теперь попробуйте подключиться к вашей системе через SSH и убедитесь, что сеанс не переходит в режим приостановки, если у вас открыта сессия GNOME.
Дополнительно, чтобы регулировать поведение системы при неактивности, вы можете использовать следующие настройки с помощью gsettings
:
gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-ac-type 'suspend'
gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-ac-timeout 30
Эти настройки позволят вашему компьютеру возвращаться в режим сна по истечении указанного времени, но не будут работать во время активной SSH-сессии.
Заключение
Используя gnome-session-inhibit
и настройку SSH, вы можете предотвратить переход в режим приостановки для активных SSH-сессий, сохраняя удобство работы с вашим сервером. Это решение позволяет сбалансировать использование ресурсов и доступность системы для удалённых пользователей, что особенно важно в средах, где требуется постоянный доступ.