xrdp

Материал из ALT Linux Wiki
Xrdp
Логотип Xrdp
Разработчик(и) Jay Sorg, xrdp Team
Первый выпуск 2004
Лицензия Apache, GNU GPL
Репозиторий xrdp
Сайт xrdp.org

Первоначальная настройка сервера XRDP на сервере

  • Установить пакет xrdp:
    # apt-get install xrdp
    
  • Включить и добавить в автозапуск сервисы:
    # systemctl enable --now xrdp xrdp-sesman
    

Права доступа пользователя:

  • Для доступа к терминальному сеансу — включить в группу tsusers:
    # gpasswd -a user tsusers
    
  • Для проброса папки — включить в группу fuse:
    # gpasswd -a user fuse
    

Настройки

Настройки сервера хранятся в файле /etc/xrdp/sesman.ini. Некоторые настройки сервера установленные по умолчанию:

  • AllowRootLogin=true — авторизация Root;
  • MaxLoginRetry=4 — максимальное количество попыток подключения;
  • TerminalServerUsers=tsusers — группа, в которую необходимо добавить пользователей для организации доступа к серверу;
  • MaxSessions=50 — максимальное количество подключений к серверу;
  • KillDisconnected=false — разрыв сеанса при отключении пользователя;
  • FuseMountName=Mount_FOLDER — название монтируемой папки.
Примечание: Для поиска параметра можно воспользоваться поиском в текстовом редакторе.


По умолчанию для подключения по RDP используется порт 3389. Номер порта можно изменить в файле /etc/xrdp/xrdp.ini.

Подключение

Для подключения можно использовать FreeRDP — клиент для подключения к удаленному рабочему столу по протоколу RDP.

Установить пакет xfreerdp:

# apt-get install xfreerdp

Синтаксис:

xfreerdp [файл] [параметры] [/v:<сервер>[:порт]]

Описание некоторых параметров:

  • /v:<сервер>[:порт] — IP-адрес или имя сервера;
  • /u:<пользователь> — имя пользователя;
  • /p:<пароль> — пароль пользователя;
  • /w:<ширина> — ширина окна;
  • /h:<высота> — высота окна;
  • /f — полноэкранный режим;
  • /size:<ширина>x<высота> — размер окна;
  • /drive:<название>,<путь> — подключение каталога.

Пример:

$ xfreerdp /drive:Epson,/home/cas/epson /v:10.4.129.129 /u:user /p:123

где:

  • Epson — название папки, которая будет показываться в каталоге thinclient_drives в домашней папке терминального пользователя, у локального пользователя пробрасывается папка /home/cas/epson;
  • 10.4.129.129 — адрес терминального сервера;
  • user — имя терминального пользователя;
  • 123 — пароль терминального пользователя.

Если пользователь или пароль не указаны, появится окно входа:

Экран входа

Внимание! Избегайте одновременных сеансов RDP и обычных(локальных) для одного и того же пользователя. Systemd не позволит полноценно работать в сеансе RDP.


Также для подключения можно использовать клиент Remmina, Connector или Krdc.

Примечание: В случае проблем с подключением дисков необходимо в настройках подключения в локальных ресурсах отключать галочку «Принтеры».


Примечание: Существует известная проблема с тем, что на странице авторизации не реализовано переключение раскладки клавиатуры. Поэтому при подключении с клиента Linux в настройках клиента следует установить раскладку "00000409 - United States - English". Клиент Windows не содержит настройку раскладки клавиатуры. Перед подключением с помощью клиента Windows необходимо вначале перейти на раскладку, в которой вводится логин и пароль, как правило это EN.


Дополнительно (MATE)

Для использования сервером установленной графической оболочки MATE выполните следующее:

  1. Установите пакет mate-session.
    # apt-get install mate-session
    
  2. Убедитесь, что по умолчанию будет запускаться mate-session:
    $ runwm --print default
    /usr/bin/mate-session
    

Проброс звука

Для прослушивания звука из терминального сеанса локально установите на терминальный сервер пакет pulseaudio-module-xrdp:

# apt-get install pulseaudio-module-xrdp

При использовании в качестве клиента xfreerdp добавьте параметр /sound:sys:pulse:

xfreerdp /v:10.4.4.17 /u:user /p:123 /sound:sys:pulse

Проброс USB-устройств

Для проброса USB-устройств на сервере необходимо установить пакет xrdp-usb-session:

# apt-get install xrdp-usb-session

Данный компонент пробрасывает широкий спектр устройств, начиная от USB-веб-камер, до USB-токенов и смарт-карт. Инструкция по использованию: Xrdp-usb

Внимание! Проброс будет работать только в рамках локальной сети, так как требует доступность клиентского компьютера с сервера


Доступ доменных пользователей

В раздел домена в файле /etc/sssd/sssd.conf необходимо указать ad_gpo_map_service = +xrdp-sesman:

[domain/TEST.ALT]
...
ad_gpo_map_service = +xrdp-sesman
...

Иначе будет возникать ошибка:

pam_acct_mgmt failed: Permission denied

Локальные группы для доменных пользователей

Вариант с локальной группой для доменных пользователей не работает, поэтому для них работает отключение группы (или указание любой нелокальной, даже несуществующей):

В файле /etc/xrdp/sesman.ini

TerminalServerUsers=

После исправления файла запустите

# systemctl restart xrdp-sesman

Журнал для sesman (сеансов пользователей) находится в файле /var/log/xrdp-sesman.log.

Данная ситуация возникла потому, что в больших доменах показ всех членов группы нагружает систему, поэтому в /etc/sssd/sssd.conf по умолчанию используется значение enumerate = false.

Если в разделе домена в файле /etc/sssd/sssd.conf явно указать enumerate=true:

[domain/TEST.ALT]
id_provider = ad
auth_provider = ad
chpass_provider = ad
default_shell = /bin/bash
fallback_homedir = /home/%d/%u
debug_level = 0
enumerate = true

то в /etc/xrdp/sesman.ini можно указать 

TerminalServerUsers=domain users
Примечание: Доменные группы под Линуксом видны в нижнем регистре.


Не забудьте перезапустить службы sssd и xrdp-sesman.

Повышение привилегий

Производительность

Рекомендуется отключить эффекты рабочего стола. Можно установить пакеты:

Среда Пакет
MATE mate-reduced-resource
XFCE xfce-reduced-resource

См. также: https://askubuntu.com/questions/1283709/xrdp-and-xfce4-ubuntu-18-04-unusable#tab-top

Оптимизация производительности xfreerdp

xfreerdp ... +bitmap-cache /rfx /codec-cache:rfx /compression-level:2 /video

При подключении с linux-машины на linux-машину это очень сильно улучшает производительность передачи графики и видео. Для Windows это не критично (похоже, там нужные опции включаются автоматически).

Решение проблем

Общий подход

Первым делом обратите внимание на логи как сервера, так и сессии:

  • /var/log/xrdp.log и /var/log/xrdp-sesman.log
  • ~/.xorgxrdp.*.log в домашнем каталоге пользователя

Например, такие строчки в последнем свидетельствуют о необходимости запроса пересборки xrdp с текущим xorg-server:

(EE) xorgxrdp: module ABI major version (23) doesn't match the server's version (24)
(EE) Failed to load module "xorgxrdp" (module requirement mismatch, 0)

Проблемы соединения с мобильным rdp-клиентом

В некоторых мобильных rdp-клиентах, особенно предназначенных для работы на старых версиях Android, если выбрать режим «Воспроизведение звука на стороне клиента» (или аналогичный) возникает ошибка соединения.

Решается запретом воспроизведения звука в настройках клиента или изменением в /etc/xrdp/xrdp.ini в строке rdpsnd=true, значения true на false. При этом клиент лишается возможности воспроизводить звук, однако в остальном соединение работает.

Проблема подключения с Windows XP

Для подключения рабочих станций с Windows XP необходимо в файле /etc/xrdp/xrdp.ini добавить поддержку протокола TLSv1.1:

ssl_protocols=TLSv1.1, TLSv1.2, TLSv1.3

Эта поддержка была исключена из конфигурации по умолчанию в версии 0.9.8 (https://github.com/neutrinolabs/xrdp/releases/tag/v0.9.8).

Проблемы соединения с тонким клиентом Dell Wyse 3040

Для подключения тонких клиентов Dell Wyse 3040 в /etc/xrdp/xrdp.ini необходимо выключить звуковую поддержку:

rdpsnd=false

Проблемы одновременного запуска локального и удалённого сеанса

С версии 0.9.14-alt5 файл /etc/pam.d/xrdp-sesman стал основан на правилах common-login. Второй сеанс systemd для одного и того же пользователя не удаётся запустить. Если это действительно надо, замените строку

session         include         common-login

на

session         substack        system-auth
session         required        pam_loginuid.so
session         substack        system-policy

Процесс gvfsd-trash занимает 100% процессора

Создайте раздел или файл подкачки. Например, по статье: Swap

Рабочий стол Mate в сеансе не показывает значки

Вариант 1.

Создайте файл /etc/xdg/autostart/caja-restart.desktop:

[Desktop Entry]
Type=Application
Name=Restart Caja in remote session
Exec=dbus-launch caja --force-desktop

Вариант 2.

Замените строку в файле /usr/share/applications/caja.desktop

Exec=/usr/bin/caja 

на

Exec=/usr/bin/caja --force-desktop

Чтобы избежать сообщение об ошибке получения имени сессии, в файл /etc/xrdp/startwm.sh добавьте следующие строки

unset DBUS_SESSION_BUS_ADDRESS
exec mate-session

Вариант 3.

См. Отсутствует часть пунктов меню в Mate и Xfce

Если пользователь ранее не регистрировал локальный сеанс, то при подключении новым пользователем xrdp не создаёт окружение пользователя в /home

Данная ситуация характеризуется следующей ошибкой при попытке подключения новым пользователем по xrdp:

[ERROR] another Xserver might already be active on display 9 - see log
[DEBUG] aborting connection...

Для решения этой проблемы необходимо добавить в конец файла /etc/pam.d/xrdp-sesman строки:

session required pam_env.so readenv=1 user_readenv=0
session required pam_mkhomedir.so skel=/etc/skel/ umask=0077

Отсутствует часть пунктов меню в Mate и Xfce

Проблема возникает из-за некорректного формирования переменной окружения XDG_CURRENT_DESKTOP. Должно быть, например, XDG_CURRENT_DESKTOP=XFCE или XDG_CURRENT_DESKTOP=MATE, а формируется XDG_CURRENT_DESKTOP=Old. Видимо wm-select не умеет нормально задавать XDG_CURRENT_DESKTOP. Удаление wm-select решает проблему с ярлыками и урезанным меню (при этом не будет возможности выбрать DE!). Работает как для DE установленного из коробки, так и установленного вручную.

Другой вариант решения, это добавить "export XDG_CURRENT_DESKTOP=XFCE" в скрипт /etc/xrdp/startwm.sh:

...
  # debian, alt
  if [ -r /etc/X11/Xsession ]; then
    pre_start
    export XDG_CURRENT_DESKTOP=XFCE
    . /etc/X11/Xsession
    post_start
    exit 0
  fi
...