Удаленное подключение к рабочему столу (xrdp) к системе Debian 12 сразу же падает при подключении.

Вопрос или проблема

У меня система Debian 12, на которой работает xrdp, и я пытаюсь подключиться к ней через удаленный рабочий стол с системы Windows 11. Система Debian 12 работает с окружением рабочего стола Cinnamon. Я установил xrdp, запустил сервис, добавил пользователя xrdp в группу ssl-cert, разрешил использование стандартного порта через ufw и так далее.

sudo apt install xrdp
sudo adduser xrdp ssl-cert
sudo ufw allow 3389
sudo systemctl restart xrdp
<перезагрузил>

Когда я подключаюсь к системе Debian через удаленный рабочий стол Windows, она сразу же зависает/исчезает после подключения. Я даже не успеваю увидеть окно входа в xorg или что-то подобное. Есть ли какие-либо проблемы с моими конфигурационными файлами (см. ниже)?


Это мой /etc/xrdp.xrdp.ini:

[Globals]
; версия файла xrdp.ini
ini_version=1

; создавать новый процесс для каждого входящего соединения
fork=true

; порты для прослушивания, число само по себе означает прослушивание на всех интерфейсах
; 0.0.0.0 или ::, если настроен ipv6
; пробел между несколькими вхождениями
; ВСЕ указанные интерфейсы должны быть ВКЛЮЧЕНЫ, когда xrdp запускается, иначе xrdp не сможет запуститься
;
; Примеры:
;   port=3389
;   port=unix://./tmp/xrdp.socket
;   port=tcp://.:3389                           127.0.0.1:3389
;   port=tcp://:3389                            *:3389
;   port=tcp://<любой ipv4 формат адреса>:3389      192.168.1.1:3389
;   port=tcp6://.:3389                          ::1:3389
;   port=tcp6://:3389                           *:3389
;   port=tcp6://{<любой ipv6 формат адреса>}:3389   {FC00:0:0:0:0:0:0:1}:3389
;   port=vsock://<cid>:<port>
port=3389

; 'port' выше должен быть подключен с использованием vsock вместо tcp
; используйте это только с числом, указанным выше в порте
; предпочтите использовать vsock://<cid>:<port> выше
use_vsock=false

; регулировать, если сокет, прослушивающий, использует опцию сокета tcp_nodelay
; в стек TCP не будет производиться буферизация
tcp_nodelay=true

; регулировать, если сокет, прослушивающий, использует опцию сокета keepalive
; если сетевое соединение исчезнет без сообщений о закрытии, соединение будет закрыто
tcp_keepalive=true

; установить tcp send/recv буфер (для экспертов)
#tcp_send_buffer_bytes=32768
#tcp_recv_buffer_bytes=32768

; уровень безопасности может быть 'tls', 'rdp' или 'negotiate'
; для совместимого уровня клиента
security_layer=negotiate

; минимальный разрешенный уровень безопасности для клиента для классического шифрования RDP
; используйте tls_ciphers, чтобы настроить шифрование TLS
; может быть 'none', 'low', 'medium', 'high', 'fips'
crypt_level=high

; сертификат X.509 и закрытый ключ
; openssl req -x509 -newkey rsa:2048 -nodes -keyout key.pem -out cert.pem -days 365
; обратите внимание, что это требует, чтобы пользователь xrdp был членом группы ssl-cert, сделайте, например,
;$ sudo adduser xrdp ssl-cert
certificate=
key_file=

; установить SSL протоколы
; может быть перечисленный через запятую список 'SSLv3', 'TLSv1', 'TLSv1.1', 'TLSv1.2', 'TLSv1.3'
ssl_protocols=TLSv1.2, TLSv1.3
; установить шифры TLS
#tls_ciphers=HIGH

; добавляет доменное имя к пользователю, если установлено для аутентификации с разделителем
; например, когда сервер имеет несколько хостов с SSSd
#domain_user_separator=@

; Следующие параметры переопределят настройки раскладки клавиатуры.
; Эти параметры предназначены для ОТЛАЖИВАНИЯ и не рекомендуется их использовать регулярно.
#xrdp.override_keyboard_type=0x04
#xrdp.override_keyboard_subtype=0x01
#xrdp.override_keylayout=0x00000409

; Имя раздела, которое будет использовано для автоматического входа, если клиент отправляет имя пользователя
; и пароль. Если пусто, используется доменное имя, отправленное клиентом.
; Если пусто и не задано доменное имя, будет использован первый подходящий раздел в
; этом файле.
autorun=

allow_channels=true
allow_multimon=true
bitmap_cache=true
bitmap_compression=true
bulk_compression=true
#hidelogwindow=true
max_bpp=32
new_cursors=true
; fastpath - может быть 'input', 'output', 'both', 'none'
use_fastpath=both
; если истинно, userid/password *должны* передаваться в строке cmd
#require_credentials=true
; если истинно, userid будет использован для попытки аутентификации
#enable_token_login=true
; Вы можете установить текст ошибки PAM в настройках шлюза (MAX 256 символов)
#pamerrortxt=измените свой пароль в соответствии с политикой на http://url

;
; цвета, используемые Windows в формате RGB
;
blue=009cb5
grey=dedede
#black=000000
#dark_grey=808080
#blue=08246b
#dark_blue=08246b
#white=ffffff
#red=ff0000
#green=00ff00
#background=626c72

;
; настройка экрана входа
;

; Заголовок окна экрана входа
#ls_title=My Login Title

; цвет фона верхнего уровня окна в формате RGB
ls_top_window_bg_color=009cb5

; ширина и высота экрана входа
;
; По умолчанию высота позволяет комфортно отобразить около 5 полей
; над кнопками внизу. Чтобы отобразить больше полей, увеличьте <ls_height>
; и также увеличьте <ls_btn_ok_y_pos> и <ls_btn_cancel_y_pos>
; ниже
;
ls_width=350
ls_height=430

; цвет фона экрана входа в формате RGB
ls_bg_color=dedede

; необязательное имя файла фонового изображения. Формат BMP всегда поддерживается,
; но другие форматы будут поддерживаться, если xrdp собран с imlib2
; Преобразование может быть одним из следующих:-
;     none  : без преобразования. Изображение размещается в нижнем правом углу
;             экрана.
;     scale : изображение масштабируется по размеру экрана. Соотношение сторон изображения
;             не сохраняется.
;     zoom  : изображение масштабируется по размеру экрана. Соотношение сторон изображения
;             сохраняется за счет обрезки изображения.
#ls_background_image=
#ls_background_transform=none

; логотип
; полный путь к файлу или файл в общей папке. Формат BMP всегда поддерживается,
; но другие форматы будут поддерживаться, если xrdp собран с imlib2
; Для значений преобразования см. 'ls_background_transform'. Ширина логотипа и
; высота логотипа игнорируются для преобразования 'none'.
ls_logo_filename=
#ls_logo_transform=none
#ls_logo_width=240
#ls_logo_height=140
ls_logo_x_pos=55
ls_logo_y_pos=50

; для позиционирования меток, таких как имя пользователя, пароль и т.д.
ls_label_x_pos=30
ls_label_width=65

; для позиционирования текстов и комбинированных полей рядом с вышеперечисленными метками
ls_input_x_pos=110
ls_input_width=210

; y позиция для первой метки и комбинированного поля
ls_input_y_pos=220

; кнопка ОК
ls_btn_ok_x_pos=142
ls_btn_ok_y_pos=370
ls_btn_ok_width=85
ls_btn_ok_height=30

; кнопка Отмена
ls_btn_cancel_x_pos=237
ls_btn_cancel_y_pos=370
ls_btn_cancel_width=85
ls_btn_cancel_height=30

[Logging]
; Примечание: Уровни журналирования могут быть любыми из: core, error, warning, info, debug или trace
LogFile=xrdp.log
LogLevel=INFO
EnableSyslog=true
#SyslogLevel=INFO
#EnableConsole=false
#ConsoleLevel=INFO
#EnableProcessId=false

[LoggingPerLogger]
; Примечание: конфигурация по логгеру используется только если xrdp собран с
; --enable-devel-logging
#xrdp.c=INFO
#main()=INFO

[Channels]
; Имена каналов, не указанные здесь, будут заблокированы XRDP.
; Вы можете заблокировать любой канал, установив его значение в false.
; ВАЖНО! Все каналы не поддерживаются во всех случаях использования,
; даже если вы установите все значения в true.
; Вы можете переопределить эти настройки для каждого типа сессии.
; Эти настройки используются только если allow_channels=true
rdpdr=true
rdpsnd=true
drdynvc=true
cliprdr=true
rail=true
xrdpvr=true
tcutils=true

; для отладки xrdp, в разделе xrdp1, измените port=-1 на это:
#port=/tmp/.xrdp/xrdp_display_10

;
; Типы сессий
;

; Некоторые типы сессий, такие как Xorg, X11rdp и Xvnc, запускают сервер отображения.
; Параметры командной строки для запуска сервера отображения настраиваются
; в sesman.ini. См. и настройте также sesman.ini.
[Xorg]
name=Xorg
lib=libxup.so
username=ask
password=ask
ip=127.0.0.1
port=-1
code=20

[Xvnc]
name=Xvnc
lib=libvnc.so
username=ask
password=ask
ip=127.0.0.1
port=-1
#xserverbpp=24
#delay_ms=2000
; Отключить запрашиваемые кодировки для поддержки "глючных" VNC серверов
; (1 = ExtendedDesktopSize)
#disabled_encodings_mask=0
; Используйте это, чтобы подключиться к экземпляру chansrv, созданному вне sesman
; (например, как часть консольной сессии x11vnc). Замените '0' на
; номер дисплея сессии
#chansrvport=DISPLAY(0)

; Универсальный VNC прокси
; Настройте это для конкретных хостов и экземпляров VNC, указав ip
; и порт и установив подходящее имя.
[vnc-any]
name=vnc-any
lib=libvnc.so
ip=ask
port=ask5900
username=na
password=ask
#pamusername=asksame
#pampassword=asksame
#pamsessionmng=127.0.0.1
#delay_ms=2000

; Универсальный RDP прокси с использованием NeutrinoRDP
; Настройте это для конкретных хостов, указав ip и порт и установив
; подходящее имя.
[neutrinordp-any]
name=neutrinordp-any
; Чтобы использовать этот раздел, вы должны собрать xrdp с параметром конфигурации
; --enable-neutrinordp.
lib=libxrdpneutrinordp.so
ip=ask
port=ask3389
username=ask
password=ask
; Раскомментируйте следующие строки, чтобы включить аутентификацию PAM для прокси
; соединений.
#pamusername=ask
#pampassword=ask
#pamsessionmng=127.0.0.1
; В данный момент NeutrinoRDP не поддерживает динамическое изменение размера. Раскомментируйте
; эту строку, если вы используете клиент, который это поддерживает.
#enable_dynamic_resizing=false
; По умолчанию параметры производительности, запрашиваемые RDP клиентом, игнорируются
; и выбираются NeutrinoRDP. Раскомментируйте эту строку, чтобы разрешить пользователю
; выбирать параметры производительности в RDP клиенте.
#perf.allow_client_experiencesettings=true
; Переопределите любые настройки опыта, раскомментировав одну или несколько из следующих строк.
#perf.wallpaper=false
#perf.font_smoothing=false
#perf.desktop_composition=false
#perf.full_window_drag=false
#perf.menu_anims=false
#perf.themes=false
#perf.cursor_blink=false
; По умолчанию NeutrinoRDP поддерживает тени курсора. Если это вызывает
; у вас проблемы (например, курсор представляет собой черный прямоугольник), попробуйте отключить тени курсора,
; раскомментировав следующую строку.
#perf.cursor_shadow=false
; По умолчанию NeutrinoRDP использует раскладку клавиатуры удаленного RDP сервера.
; Если вы хотите сообщить удаленному серверу раскладку клавиатуры RDP клиента,
; раскомментируйте следующую строку.
#neutrinordp.allow_client_keyboardLayout=true
; Следующие опции переопределят настройки раскладки клавиатуры на удаленном сервере.
; Эти параметры предназначены для ОТЛАЖИВАНИЯ и не рекомендуется их использовать регулярно.
#neutrinordp.override_keyboardLayout_mask=0x0000FFFF
#neutrinordp.override_kbd_type=0x04
#neutrinordp.override_kbd_subtype=0x01
#neutrinordp.override_kbd_fn_keys=12
#neutrinordp.override_kbd_layout=0x00000409

; Вы можете переопределить общие настройки канала для каждого типа сессии
#channel.rdpdr=true
#channel.rdpsnd=true
#channel.drdynvc=true
#channel.cliprdr=true
#channel.rail=true
#channel.xrdpvr=true

Мой ~/.xsession файл:

cinnamon-session-cinnamon

Мой /etc/xrdp/startwm.sh файл:

#test -x /etc/X11/Xsession && exec /etc/X11/Xsession
#exec /bin/sh /etc/X11/Xsession
cinnamon-session-cinnamon

Ответ или решение

Решение проблемы зависания соединения через XRDP на Debian 12 с графической средой Cinnamon

Проблема, с которой вы столкнулись, может возникать по нескольким причинам, включая конфигурацию серверов, поддержку X-сервера и наличие необходимых пакетов. Рассмотрим возможные причины и соответствующие шаги для устранения проблемы.

Шаг 1: Параметры конфигурации XRDP

  1. Файл конфигурации /etc/xrdp/xrdp.ini:

    • Убедитесь, что секция [Xorg] корректно настроена. Обратите внимание на username=ask и password=ask. Это указывает на то, что XRDP запрашивает эти данные при подключении, и это правильно.
    • Ваша секция на данный момент выглядит корректно, но можно попробовать заменить на:
      username=your_username
      password=your_password
    • Если вы используете cinnamon-session-cinnamon в файле ~/.xsession, убедитесь, что Cinnamon установлен и работает должным образом.
  2. Проверка файла ~/.xsession и startwm.sh:

    • Ваш файл ~/.xsession:
      cinnamon-session-cinnamon
    • Убедитесь, что в файле /etc/xrdp/startwm.sh после строки #exec /bin/sh /etc/X11/Xsession нет лишних комментариев. Измените содержимое на:
      test -x /etc/X11/Xsession && exec /etc/X11/Xsession
      exec cinnamon-session-cinnamon
    • Убедитесь, что на этих строках нет лишних символов.

Шаг 2: Установка необходимых зависимостей

Убедитесь, что у вас установлены необходимые пакеты. Выполните:

sudo apt update
sudo apt install xorgxrdp xrdp

Это установит необходимые компоненты для работы XRDP с X-сессией.

Шаг 3: Проверьте журналы

  1. Проверка журналов XRDP:
    • Запустите команду для просмотра журналов и ошибок:
      sudo less /var/log/xrdp.log
      sudo less /var/log/xrdp-sesman.log
    • Посмотрите на ошибки или предупреждения, которые могут указать на то, что идет не так.

Шаг 4: Кэширование подсистемы и Firewall

  1. Проверка UFW:

    • Убедитесь, что UFW настроен правильно:
      sudo ufw status
    • Проверьте, что порт 3389 открыт.
  2. Отключение или изменение параметров кэширования:

    • Проверьте параметры кэширования и отключите их, если они вызывают проблемы. В xrdp.ini попробуйте установить:
      bitmap_cache=false
      bitmap_compression=false

Шаг 5: Выполнение и перезагрузка сервиса

После всех изменений перезагрузите XRDP и убедитесь, что служба работает:

sudo systemctl restart xrdp
sudo systemctl status xrdp

Заключение

Если все вышеперечисленные шаги не решат проблему, попробуйте переключиться на другой сеанс, например, Xvnc. Для этого измените вашу секцию в xrdp.ini на:

[Xvnc]
name=Xvnc
lib=libvnc.so
username=ask
password=ask
ip=127.0.0.1
port=-1

И убедитесь, что VNC сервер установлен и работает.

Если проблема не решена, сообщите о любых ошибках из журналов или изменениях, которые вы сделали. Удачи в настройке вашего удалённого рабочего стола на Debian 12!

Оцените материал
Добавить комментарий

Капча загружается...