Xrdp: различия между версиями

Материал из ALT Linux Wiki
 
(не показано 29 промежуточных версий 11 участников)
Строка 1: Строка 1:
= Первоначальная настройка сервера XRDP на сервере =
{{DISPLAYTITLE:xrdp}}
== Первоначальная настройка сервера XRDP на сервере ==


* Установить пакет ''xrdp''.
* Установить пакет {{pkg|xrdp}}:
  apt-get install xrdp
*: <syntaxhighlight lang="bash"># apt-get install xrdp</syntaxhighlight>
* Включить сервисы:
* Включить и  добавить в автозапуск сервисы:
  systemctl enable xrdp xrdp-sesman
*: <syntaxhighlight lang="bash"># systemctl enable --now xrdp xrdp-sesman</syntaxhighlight>
  systemctl start xrdp xrdp-sesman


Права доступа пользователя:
Права доступа пользователя:
* Для доступа к терминальному сеансу — включить в группу '''tsusers'''
* Для доступа к терминальному сеансу — включить в группу '''tsusers''':
* Для проброса папки — включить в группу '''fuse'''
*: <syntaxhighlight lang="bash"># gpasswd -a user tsusers</syntaxhighlight>
* Для проброса папки — включить в группу '''fuse''':
*: <syntaxhighlight lang="bash"># gpasswd -a user fuse</syntaxhighlight>


==Настройки==
=== Настройки ===
Настройки сервера хранятся в файле '''/etc/xrdp/sesman.ini'''.
Настройки сервера хранятся в файле {{path|/etc/xrdp/sesman.ini}}. Некоторые настройки сервера установленные по умолчанию:
*'''AllowRootLogin'''=true — авторизация Root;
*'''MaxLoginRetry'''=4 — максимальное количество попыток подключения;
*'''TerminalServerUsers'''=tsusers — группа, в которую необходимо добавить пользователей для организации доступа к серверу;
*'''MaxSessions'''=50 — максимальное количество подключений к серверу;
*'''KillDisconnected'''=false — разрыв сеанса при отключении пользователя;
*'''FuseMountName'''=Mount_FOLDER — название монтируемой папки.  


(воспользуйтесь поиском в текстовом редакторе, чтобы найти параметр)
{{Note|Для поиска параметра можно воспользоваться поиском в текстовом редакторе.}}


*Максимальное количество подключений: '''MaxSessions'''
По умолчанию для подключения по RDP используется порт 3389. Номер порта можно изменить в файле {{path|/etc/xrdp/xrdp.ini}}.
*Разрыв сеанса при отключении пользователя: '''KillDisconnected'''
 
*Авторизация Root: '''AllowRootLogin'''=false (true/false)
== Подключение ==
*Название монтируемой папки: '''FuseMountName'''=Mount_FOLDER
Для подключения можно использовать FreeRDP — клиент для подключения к удаленному рабочему столу по протоколу RDP.
 
Установить пакет {{pkg|xfreerdp}}:
<syntaxhighlight lang="bash"># apt-get install xfreerdp</syntaxhighlight>
 
Синтаксис:
<syntaxhighlight lang="bash">xfreerdp [файл] [параметры] [/v:<сервер>[:порт]]</syntaxhighlight>
 
Описание некоторых параметров:
* /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
<syntaxhighlight lang="bash">$ xfreerdp /drive:Epson,/home/cas/epson /v:10.4.129.129 /u:user /p:123</syntaxhighlight>
где:
где:
* ''Epson'' — название папки, которая будет показываться в каталоге ''thinclient_drives'' в домашней папке терминального пользователя, у локального пользователя пробрасывается папка ''/home/cas/epson'';
* ''Epson'' — название папки, которая будет показываться в каталоге ''thinclient_drives'' в домашней папке терминального пользователя, у локального пользователя пробрасывается папка ''/home/cas/epson'';
Строка 30: Строка 53:
* ''123'' — пароль терминального пользователя.
* ''123'' — пароль терминального пользователя.


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


Так же вы можете использовать клиент Remmina.
[[Изображение:Xrdp-login-screen.png|Экран входа]]


{{Note|В случае проблем с подключением дисков необходимо в настройках подключения в локальных ресурсах отключать галочку “Принтеры»}}
{{Attention|Избегайте одновременных сеансов RDP и обычных(локальных) для одного и того же пользователя. Systemd не позволит полноценно работать в сеансе RDP.}}


{{Note|При подключении через клиент Windowsна странице авторизации не получится переключить раскладку клавиатуры для требуемого языка ввода. В большинстве случаев по умолчанию стоит русская раскладка, а вводить надо на английском.
Также для подключения можно использовать клиент [[Remmina]], [[Connector]] или [https://apps.kde.org/krdc/ Krdc].


Перед подключением с Windows необходимо вначале перейти на раскладку в которой вводится логин и пароль, как правило это EN.}}
{{Note|В случае проблем с подключением дисков необходимо в настройках подключения в локальных ресурсах отключать галочку «Принтеры».}}


= Дополнительно =
{{Note|Существует [https://github.com/neutrinolabs/xrdp/issues/1577 известная проблема] с тем, что на странице авторизации не реализовано переключение раскладки клавиатуры. Поэтому при подключении с клиента Linux в настройках клиента следует установить раскладку "'''00000409 - United States - English'''".
Для использования сервером установленной графической оболочки MATE выполните следующее:


1. Установите пакет {{pkg|mate-session}}.
Клиент Windows не содержит настройку раскладки клавиатуры. Перед подключением с помощью клиента Windows необходимо вначале перейти на раскладку, в которой вводится логин и пароль, как правило это EN.}}


2. Убедитесь, что по умолчанию будет запускаться mate-session:
== Дополнительно (MATE) ==
<source lang="text" highlight="1">$ runwm --print default
Для использования сервером установленной графической оболочки MATE выполните следующее:
/usr/bin/mate-session</source>


= Экран входа =
# Установите пакет {{pkg|mate-session}}.
[[Изображение:Xrdp-login-screen.png]]
#: <syntaxhighlight lang="bash"># apt-get install mate-session</syntaxhighlight>
#  Убедитесь, что по умолчанию будет запускаться mate-session:
#: <syntaxhighlight lang="bash">$ runwm --print default
/usr/bin/mate-session</syntaxhighlight>


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


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


apt-get install pulseaudio-module-xrdp
<syntaxhighlight lang="bash"># apt-get install pulseaudio-module-xrdp</syntaxhighlight>


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


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


= Доступ доменных пользователей =
== Проброс USB-устройств ==
Для проброса USB-устройств на сервере необходимо установить пакет {{pkg|xrdp-usb-session}}:
<syntaxhighlight lang="bash"># apt-get install xrdp-usb-session</syntaxhighlight>
Данный компонент пробрасывает широкий спектр устройств, начиная от USB-веб-камер, до USB-токенов и смарт-карт. Инструкция по использованию: [[Xrdp-usb]]
{{Attention|Проброс будет работать только в рамках локальной сети, так как требует доступность клиентского компьютера с сервера}}
 
== Доступ доменных пользователей ==


В раздел домена в файле {{path|/etc/sssd/sssd.conf}} необходимо указать '''ad_gpo_map_service = +xrdp-sesman''':
В раздел домена в файле {{path|/etc/sssd/sssd.conf}} необходимо указать '''ad_gpo_map_service = +xrdp-sesman''':
<source lang="ini">[domain/TEST.ALT]
<syntaxhighlight lang="ini">[domain/TEST.ALT]
...
...
ad_gpo_map_service = +xrdp-sesman
ad_gpo_map_service = +xrdp-sesman
...</source>
...</syntaxhighlight>


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


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


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


После исправления файла запустите
После исправления файла запустите
systemctl restart xrdp-sesman
<syntaxhighlight lang="bash"># systemctl restart xrdp-sesman</syntaxhighlight>


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


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


Если в разделе домена в файле {{path|/etc/sssd/sssd.conf}} явно указать '''enumerate=true''':
Если в разделе домена в файле {{path|/etc/sssd/sssd.conf}} явно указать '''enumerate=true''':
<source lang="ini">[domain/TEST.ALT]
<syntaxhighlight lang="ini">[domain/TEST.ALT]
id_provider = ad
id_provider = ad
auth_provider = ad
auth_provider = ad
Строка 95: Строка 125:
fallback_homedir = /home/%d/%u
fallback_homedir = /home/%d/%u
debug_level = 0
debug_level = 0
enumerate = true</source>
enumerate = true</syntaxhighlight>


то в {{path|/etc/xrdp/sesman.ini}} можно указать 
то в {{path|/etc/xrdp/sesman.ini}} можно указать 
Строка 104: Строка 134:
Не забудьте перезапустить службы '''sssd''' и '''xrdp-sesman'''.
Не забудьте перезапустить службы '''sssd''' и '''xrdp-sesman'''.


= Полноценный сеанс =
=== Повышение привилегий ===
 
* consolehelper, beesu — ограничений нет;
* polkit — требует создание дополнительных правил для удалённых пользователей. Подробнее описано на https://github.com/neutrinolabs/xrdp/issues/1568#issuecomment-624727037
 
== Производительность ==
 
Рекомендуется отключить эффекты рабочего стола. Можно установить пакеты:
{| class="wikitable"
|Среда||Пакет
|-
|MATE||{{pkg|mate-reduced-resource}}
|-
|XFCE||{{pkg|xfce-reduced-resource}}
|}


Для полноценного сеанса Systemd и использования пользовательского dbus требуется добавить в конец файла {{path|/etc/pam.d/xrdp-sesman}}:
См. также: https://askubuntu.com/questions/1283709/xrdp-and-xfce4-ubuntu-18-04-unusable#tab-top


session        required        pam_systemd.so class=user
=== Оптимизация производительности xfreerdp ===


= Решение проблем =
xfreerdp ... +bitmap-cache /rfx /codec-cache:rfx /compression-level:2 /video


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


Первым делом обратите внимание на логи как сервера, так и сессии:
Первым делом обратите внимание на логи как сервера, так и сессии:
Строка 123: Строка 171:
  (EE) Failed to load module "xorgxrdp" (module requirement mismatch, 0)
  (EE) Failed to load module "xorgxrdp" (module requirement mismatch, 0)


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


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


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


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


Для подключения рабочих станций с Windows XP необходимо в файле {{path|/etc/xrdp/xrdp.ini}} добавить поддержку протокола TLSv1.1:
Для подключения рабочих станций с Windows XP необходимо в файле {{path|/etc/xrdp/xrdp.ini}} добавить поддержку протокола TLSv1.1:
Строка 137: Строка 185:
Эта поддержка была исключена из конфигурации по умолчанию в версии 0.9.8 (https://github.com/neutrinolabs/xrdp/releases/tag/v0.9.8).
Эта поддержка была исключена из конфигурации по умолчанию в версии 0.9.8 (https://github.com/neutrinolabs/xrdp/releases/tag/v0.9.8).


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


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


  rdpsnd=false
  rdpsnd=false
=== Проблемы одновременного запуска локального и удалённого сеанса ===
С версии 0.9.14-alt5 файл {{path|/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.
Создайте файл {{path|/etc/xdg/autostart/caja-restart.desktop}}:
<syntaxhighlight lang="ini">[Desktop Entry]
Type=Application
Name=Restart Caja in remote session
Exec=dbus-launch caja --force-desktop</syntaxhighlight>
Вариант 2.
Замените строку в файле {{path|/usr/share/applications/caja.desktop}}
Exec=/usr/bin/caja
на
Exec=/usr/bin/caja --force-desktop
Чтобы избежать сообщение об ошибке получения имени сессии, в файл  {{path|/etc/xrdp/startwm.sh}} добавьте следующие строки
unset DBUS_SESSION_BUS_ADDRESS
exec mate-session
Вариант 3.
См. [[Xrdp#Отсутствует_часть_пунктов_меню_в_Mate_и_Xfce|Отсутствует часть пунктов меню в Mate и Xfce]]
=== Если пользователь ранее не регистрировал локальный сеанс, то при подключении новым пользователем xrdp не создаёт окружение пользователя в /home  ===
Данная ситуация характеризуется следующей ошибкой при попытке подключения новым пользователем по xrdp:
[ERROR] another Xserver might already be active on display 9 - see log
[DEBUG] aborting connection...
Для решения этой проблемы необходимо добавить в конец файла {{path|/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"''' в скрипт {{path|/etc/xrdp/startwm.sh}}:
<syntaxhighlight lang="sh">...
  # debian, alt
  if [ -r /etc/X11/Xsession ]; then
    pre_start
    export XDG_CURRENT_DESKTOP=XFCE
    . /etc/X11/Xsession
    post_start
    exit 0
  fi
...</syntaxhighlight>


[[Категория:Удалённый доступ]][[Категория:Терминальный сервер]]
[[Категория:Удалённый доступ]][[Категория:Терминальный сервер]]
{{Category navigation|title=Терминальный сервер|category=Терминальный сервер|sortkey={{SUBPAGENAME}}}}
{{Category navigation|title=Терминальный сервер|category=Терминальный сервер|sortkey={{SUBPAGENAME}}}}

Текущая версия от 19:40, 27 июня 2024

Первоначальная настройка сервера 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
...