Вопрос или проблема
Я использую Linux Mint 21, версию xfce.
Установил xrdp с помощью базовой команды:
apt install xrdp
Настроил файл /etc/xrdp/startvm.sh
следующим образом:
#/bin/sh
startxfce4 >> ~/xrdp.log
Когда я подключаюсь через RDP-клиент, я получаю экран xrdp Just Connecting login
.
Я выбираю Xorg
, затем ввожу имя пользователя и пароль. Однако, когда отправляю форму входа, соединение прерывается неожиданно.
Ничего особенного в /var/log/xrdp.log
или /var/log/xrdp-ses.log
нет.
Файл ~/xrdp.log
указывает:
/usr/bin/startxfce4: X сервер уже запущен на дисплее :10.0
/usr/bin/startxfce4: X сервер уже запущен на дисплее :10.0
/usr/bin/startxfce4: X сервер уже запущен на дисплее :10.0
/usr/bin/startxfce4: X сервер уже запущен на дисплее :10.0
...
Файл /var/log/xrdp-sesman.log
указывает:
20220821-23:43:13] [INFO ] ++ создана сессия (доступ разрешен): имя пользователя myuser, ip x.x.x.x:31947 - сокет: 12
[20220821-23:43:13] [INFO ] запуск сессии Xorg...
[20220821-23:43:13] [INFO ] Запуск сессии: session_pid 23543, дисплей :10.0, ширина 1920, высота 1080, bpp 24, ip клиента x.x.x.x:31947 - сокет: 12, имя пользователя myuser
[20220821-23:43:13] [INFO ] [начало сессии] (дисплей 10): вызов auth_start_session из pid 23543
[20220821-23:43:13] [ERROR] sesman_data_in: scp_process_msg не выполнен
[20220821-23:43:13] [ERROR] sesman_main_loop: trans_check_wait_objs не выполнен, удаление trans
[20220821-23:43:13] [INFO ] Запуск X сервера на дисплее 10: /usr/lib/xorg/Xorg :10 -auth .Xauthority -config xrdp/xorg.conf -noreset -nolisten tcp -logfile .xorgxrdp.%s.log
[20220821-23:43:13] [INFO ] Найден X сервер, работающий в /tmp/.X11-unix/X10
[20220821-23:43:13] [INFO ] Найден X сервер, работающий в /tmp/.X11-unix/X10
[20220821-23:43:13] [INFO ] Сессия успешно началась для пользователя myuser на дисплее 10
[20220821-23:43:13] [INFO ] Запуск xrdp сервер-канала для дисплея 10
[20220821-23:43:13] [INFO ] Найден X сервер, работающий в /tmp/.X11-unix/X10
[20220821-23:43:13] [INFO ] Запуск менеджера окон по умолчанию на дисплее 10: /etc/xrdp/startwm.sh
[20220821-23:43:13] [INFO ] Сессия в процессе на дисплее 10, ожидание завершения менеджера окон (pid 23544), чтобы завершить сессию
[20220821-23:43:14] [WARN ] Менеджер окон (pid 23544, дисплей 10) завершил работу с ненулевым кодом выхода 139 и сигналом 0. Это может указывать на проблему с конфигурацией менеджера окон
[20220821-23:43:14] [WARN ] Менеджер окон (pid 23544, дисплей 10) завершил работу быстро (1 секунда). Это может указывать на проблему с конфигурацией менеджера окон
[20220821-23:43:14] [INFO ] Вызов auth_stop_session и auth_end из pid 23543
[20220821-23:43:14] [INFO ] Завершение X сервер (pid 23545) на дисплее 10
[20220821-23:43:14] [INFO ] Завершение xrdp сервер-канала (pid 23553) на дисплее 10
[20220821-23:43:14] [INFO ] X сервер на дисплее 10 (pid 23545) вернул код выхода 0 и номер сигнала 0
[20220821-23:43:14] [INFO ] xrdp сервер-канала для дисплея 10 (pid 23553) код выхода 0 и номер сигнала 0
[20220821-23:43:14] [INFO ] cleanup_sockets:
[20220821-23:43:14] [INFO ] ++ завершена сессия: имя пользователя myuser, дисплей :10.0, session_pid 23543, ip x.x.x.x:31947 - сокет: 12
Как дальше отлаживать?
Мой пользователь уже был подключен через Proxmox VNC, поэтому мне нужно было отключить пользователя, а затем сессия заработала с другим RDP клиентом.
У меня была проблема на Debian, но я хотел иметь возможность запускаться одновременно с тем же пользователем локально и удаленно.
Я следовал этому блогу https://c-nergy.be/blog/?p=16698 (второй метод) и это сработало.
-
Установите dbus-x11 для dbus-launch, если не установлен.
-
Отредактируйте /etc/xrdp/startwm.sh и добавьте
export $(dbus-launch)
Моя версия /etc/xrdp/startwm.sh теперь:
#!/bin/sh
# xrdp X скрипт начала сессии (c) 2015, 2017, 2021 mirabilos
# опубликован в соответствии с лицензией MirOS
# Полагаться на /etc/pam.d/xrdp-sesman, использующий pam_env для загрузки
# /etc/environment и /etc/default/locale для инициализации
# локали и окружения пользователя.
if test -r /etc/profile; then
. /etc/profile
fi
if test -r ~/.profile; then
. ~/.profile
fi
export $(dbus-launch)
test -x /etc/X11/Xsession && exec /etc/X11/Xsession
exec /bin/sh /etc/X11/Xsession
.
Ответ или решение
В ситуации, описанной пользователем, возникает проблема с RDP-соединением на Linux Mint 21 с использованием среды рабочего стола XFCE и пакета xrdp. Ошибка, с которой сталкивается пользователь, связана с уже запущенным X сервером на дисплее :10.0, что вызывает неожиданное завершение сессии. Для решения этой проблемы предоставляется несколько возможных способов, которые стоит рассмотреть и протестировать для устранения неполадки.
Теория
На системах Linux с использованием xrdp для удаленного доступа к рабочему столу часто возникают проблемы из-за конфликта дисплеев и уже запущенных сеансов. Основной причиной текущей ситуации является то, что xrdp, который пытается запустить новый X-сервер и сеанс XFCE для удаленного соединения, сталкивается с уже активным сеансом на том же дисплее или некорректно настроенными параметрами запуска сеанса.
Пример
На основе предоставленных логов можно выделить несколько ключевых моментов:
- Логи указывают, что X-сервер уже запущен на дисплее :10.0.
- Вывод журнала xrdp-сессий свидетельствует о проблеме с конфигурацией управления окнами, что приводит к быстрому завершению процесса.
Приложение
Вот шаги, которые можно предпринять для решения проблемы:
-
Убедитесь, что
dbus-x11
установлен. Это как раз то, что указано в блоге, на который ссылается пользователь:sudo apt install dbus-x11
-
Измените файл
/etc/xrdp/startwm.sh
. Добавление строкиexport $(dbus-launch)
помогает в настройке необходимых сеансовых служб для пользователей. Это исправление позволяет xrdp корректно инициализировать необходимые контексты:#!/bin/sh if test -r /etc/profile; then . /etc/profile fi if test -r ~/.profile; then . ~/.profile fi export $(dbus-launch) test -x /etc/X11/Xsession && exec /etc/X11/Xsession exec /bin/sh /etc/X11/Xsession
-
Разрыв активных сеансов. Когда пользователь подключен через VNC с использованием того же пользователя и пытается открыть RDP-соединение на том же дисплее, это приводит к конфликту. В этом случае необходимо завершить VNC сеанс перед установкой нового RDP-соединения.
-
Инициализация нового дисплея для RDP. Если проблема продолжается, можно попытаться указать в конфигурациях xrdp использование другого дисплея (например, :11 или :12), чтобы избежать пересечения с текущими X-серверами.
-
Проверка и редактирование конфигураций X-сервера xrdp и XFCE. Возможно, требуется дополнительная настройка параметров запуска XFCE или других конфигураций, связанных с xrdp. Например, это может быть изменение xrdp.ini или других связанных с XFCE файлов конфигурации.
-
Логи и сторонние утилиты. При необходимости можно использовать дополнительные утилиты для мониторинга запуска xfce4 и xrdp, такие как
strace
илиgdb
, которые помогут понять, где точно происходит ошибка.
Кроме технических шагов, важно следить за обновлениями как xrdp, так и использующихся окружений рабочего стола, так как такие проблемы иногда решаются разработчиками в новых версиях. Проблемы с RDP-соединениями нередко возникают из-за конфликтов в сеансах и неправильной инициализации компонентов, что можно разрешить при помощи тщательной настройки и отладки существующих конфигураций. Надеюсь, эти рекомендации помогут устранить указанную проблему и настроить стабильное и надежное подключение через xrdp на вашей системе.