3.10.3 Настройка x2go сервера и клиента
Установка
Настройка клиента
Обзор клиента
Проброс принтеров
Настройка трансляции токенов в сессию сервера
Завершение сессий x2go
X2Go — это программное обеспечение для удаленного рабочего стола с открытым исходным кодом, использующее модифицированный протокол NX 3. X2Go предоставляет удаленный доступ к графическому пользовательскому интерфейсу системы.
В данной статье раскрываются основные моменты по настройке данного варианта удаленного подключения, однако вы так же можете обратиться к официальной документации.
На нашем Youtube-канале вы можете подробнее ознакомиться с организацией удаленного доступа, просмотрев видео Организация удаленного доступа с помощью x2go. Проброс принтеров, трансляция токенов, а также найти много другой полезной информации.
Установка
Для установки x2go перейдите в сеанс пользователя root:
su -
и выполните команду:
dnf install x2goserver-xsession x2goserver-fmbindings x2goserver-common x2goserver x2goagent -y
Здесь и далее команды будут выполняться от пользователя root, если не указано иное.
Для установки x2go на клиенте выполните команду:
dnf install x2goclient -y
Настройка клиента
1. Откройте x2go client из «Главного меню» - «Интернет» - «X2Go Client».
2. После открытия потребуется настроить параметры:
Хост: IP-адрес машины;
Пользователь: имя учетной записи.
SSH-порт: если не менялся на клиенте, оставить 22.
3. Для создания новых сессий при подключении к серверу требуется выбрать тип сессии Mate. В РЕД ОС 7.3 по-умолчанию используется графическая оболочка Mate. Если же у вас используется другая DE, то тип сессии изменяется в соответствии с нужным требованием.
Если необходимо соединение с активной сессией пользователя, то выберите тип сессии «X2Go/X11 Desktop Sharing».
4. Обратите внимание, что можно настроить автоподключение, указав RSA/DSA ключ через выбор файла ключа.
Для этого необходимо выполнить следующие действия:
- На клиенте необходимо сгенерировать ключ SSH командой ssh-keygen (с правами локального пользователя):
ssh-keygen -t rsa или ssh-keygen -t dsa
Будет выведено предложение ввести пароль для защиты файла ключа. Если вы планируете выполнять скрипты по SSH, оставьте пароль пустым.
- Передайте публичный ключ на сервер командой от локального пользователя:
ssh-copy-id -i ~/.ssh/id_rsa.pub user@server или ssh-copy-id -i ~/.ssh/id_dsa.pub user@server
- В x2go client выберите приватную часть ключа.
При подключении произойдет запрос фразы-пароля для ключа.
- Для того чтобы настроить автоматический вход без пароля, необходимо установить флажок в поле «Try auto login (via SSH Agent or default SSH key)».
Обзор клиента
Вкладка «Соединение»
В зависимости от пропускной способности сетевого подключения вы можете выбрать предпочитаемый тип соединения:
MODEM;
ISDN;
ADSL;
WAN;
LAN.
Также данная вкладка предоставляет возможность выбора типа сжатия изображения путем выбора метода сжатия и качества изображения.
Вкладка «Ввод/Вывод»
Данная вкладка позволяет задать разрешение клиента, т.е. использовать полноэкранный режим или указать свои собственные параметры.
При наличии нескольких физических мониторов вы можете активировать опцию Xinerama.
Для работы с буфером обмена рекомендуется оставить настройку двустороннего буфера обмена для удобства работы.
Соответственно, настройку клавиатуры рекомендуется оставить по умолчанию, однако если есть необходимость ручной настройки, то выберите пункт ручной настройки клавиатуры.
Вкладка «Медиа»
Стоит обратить внимание,что клиент X2Go поддерживает проброс звука, по умолчанию данная опция включена. Однако вы можете изменить свойства подключения и изменить установленное значение по умолчанию в случае необходимости.
Не рекомендуется выбирать тип звука arts или esd, т. к. они являются устаревшими. При попытке выбора любого из данных типов клиент посоветует перейти на тип PulseAudio.
Также вы можете опционально изменить SSH-туннель и порт по умолчанию.
Вкладка «Экспорт каталогов»
Стоит обратить внимание на такую полезную функцию, как экспорт каталогов.
На данной вкладке вы можете выбрать, каким каталогом желаете поделиться. После выбора и добавления он отобразится в списке, где вы сможете активировать его автоматическое соединение.
Запуск определенного приложения
Клиент x2go поддерживает также вариант подключения не только к полному рабочему столу сервера, но и к конкретному приложению. Реализовать данное подключение можно при помощи типа сессии «Приложение» или «Удаленные приложения».
При выборе типа сессии приложения вам будет доступен ряд предустановленных вариантов запуска:
При выборе типа сессии «Удаленные приложения» откроется новая сессия, где вручную потребуется выбрать то, какое приложение требуется запустить.
Проброс принтеров
1. Для корректного проброса принтера необходимо установить следующие пакеты:
- На сервере:
dnf install x2goserver-printing cups-x2go
- На клиенте:
dnf install cups-x2go
При необходимости перезапустите службу cups:
systemctl restart cups
2. На сервере X2go добавьте принтер Generic CUPS-X2Go (Главное меню-Администрирование-Настройки принтера)
3. В x2go-клиенте перейдите в меню «Опции» - «Установки» - «Печать» и выберите принтер, который будет по умолчанию при печати. Установите параметр "Открывать этот диалог перед печатью".
4. При печати документа в сессии x2go выберите принтер «Generic CUPS-X2Go-printer» и нажмите «Печать».
После этого на вашем ПК открыться окно выбора локального принтера для печати.
Настройка трансляции токенов в сессию сервера
1. Для настройки трансляции прежде всего требуется убедиться, что настроен КриптоПро и необходимые драйвера для токенов на сервере x2go - инструкция по настройке.
2. Проверьте работоспособность токена в утилите «Ключевые носители и сертификаты» и затем установите флажок в x2go client - Медиа - Поддержка смарт-карт.
Данная поддержка обеспечивает трансляцию как смарт-карт, так и usb-токенов.
Завершение сессий x2go
На сервере необходимо запустить команду, которая покажет все активные сессии:
# x2golistsessions_root
Примерный вывод данной команды:
3226 | user-50-1649312737_stDMATE_dp24 | 50 | localhost.localdomain | S | 2022-04-07T09:25:38 | 8b2f5d3433700b44b5acf5150a7d35fb | 10.81.1.132 | 36540 | 36541 | 2022-04-07T09:35:04 | user | 1839 | 36542 | -1 | -1 7350 | user-51-1649313366_stS1XSHADuserXSHADPP50_dp24 | 51 | localhost.localdomain | R | 2022-04-07T09:36:06 | c9f4d9a24979efe9ddca96ec20e722cc | 10.81.1.132 | 56847 | 56848 | 2022-04-07T09:36:10 | user | 1211 | 56849 | -1 | -1 7769 | user-52-1649313401_stS1XSHADuserXSHADPP0_dp24 | 52 | localhost.localdomain | R | 2022-04-07T09:36:41 | 414d5ac30224e035a46c9d7be0d4608b | 10.81.1.132 | 38461 | 38462 | 2022-04-07T09:36:43 | user | 1176 | 38463 | -1 | -1
Для завершения определенной сессии выполните:
x2goterminate-session <session_id>
где <session_id> - это идентификатор сессии.
Пример:
x2goterminate-session user-50-1649312737_stDMATE_dp24
Массовое завершение сессий
Если же на сервере требуется применить массовую очистку сессий, то вы можете воспользоваться одним из предложенных ниже скриптов, которые автоматизируют данный процесс.
Завершение сессии и вывод текущей даты
Пример скрипта завершения сессий и вывода текущей даты при завершении:
#!/bin/bash f=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) NOWDATE=$(date '+%Y-%m-%d_%T') echo -----$NOWDATE------ for i in $(x2golistsessions_root | cut -d "|" -f 2 | sed "s/|/ | /g") do echo terminate - ${i} # вывод на экран x2goterminate-session ${i} # команда завершения пользователя done
Завершение неактивных более 2 часов сессий
Пример скрипта завершения сессий, время простоя которых более 2 часов:
#!/bin/bash for ll in `x2golistsessions_root`; do SessionDate=`echo $ll | awk -F \| '{print $11}';` CleanSessionDate=`echo ${SessionDate//T/ }` FinalDate=`echo ${CleanSessionDate//-//}` CurrentDate=`date +%s` SessionDateEpoch=`date -d "$FinalDate" +%s` DateDiff=$(($CurrentDate-$SessionDateEpoch)) Hours=$(($DateDiff/60/60)) if [[ $Hours -gt 2 ]]; then sid=`echo $ll | awk -F \| '{print $2}'` x2goterminate-session $sid fi done
Завершение неактивных более 1 дня сессий
Пример скрипта завершения сессий, время простоя которых больше 1 дня:
#!/bin/bash LIMIT_DAYS=1 for ll in `x2golistsessions_root`; do #Get the date of last use of the session lastd=`echo $ll | awk -F \| '{print $11}' | awk -F T '{print $1}';` #Date in seconds lastsec=`date -d "$lastd" +%s` #Current date in seconds now=`date +%s` days=`echo $(( ($now - $lastsec) /60/60/24 ))` if [[ $days -gt $LIMIT_DAYS ]]; then sid=`echo $ll | awk -F \| '{print $2}'` echo "terminating session: $sid, $days days old, lastd: $lastd, lastsec: $lastsec, now: $now" x2goterminate-session $sid fi done
Настройка автоматического завершения сессий
Также администратору сервера будет удобен вариант создания сервиса, который по определенному таймеру завершит сессии. Ниже приведен пример сервиса, который по таймеру запускает абстрактный скрипт. Обратите внимание, что необходимо изменить путь к скрипту на ваш.
Создайте файл:
nano /etc/systemd/system/x2go-sessions-killer.service
со следующим содержимым:
[Unit]
Description="X2Go service for session cleaning"
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/SCRIPT.sh # укажите ваш путь к скрипту
Restart=always
RestartSec=7200
[Install]
WantedBy=multi-user.target
В строке RestartSec=7200
указано время перезапуска скрипта в секундах. В примере скрипт будет выполняться каждые два часа. Измените это значение на необходимое вам.
Затем в папку /usr/bin/ добавьте ваш скрипт и назначьте ему права на исполнение:
chmod +x /usr/bin/SCRIPT.sh
После этого обновите список сервисов и добавьте сервис завершения сессий в автозагрузку:
systemctl daemon-reload systemctl enable --now x2go-sessions-killer.service
Если вы нашли ошибку, пожалуйста, выделите текст и нажмите Ctrl+Enter.