- Вопрос или проблема
- Ответ или решение
- Решение проблемы зависания соединения через XRDP на Debian 12 с графической средой Cinnamon
- Шаг 1: Параметры конфигурации XRDP
- Шаг 2: Установка необходимых зависимостей
- Шаг 3: Проверьте журналы
- Шаг 4: Кэширование подсистемы и Firewall
- Шаг 5: Выполнение и перезагрузка сервиса
- Заключение
Вопрос или проблема
У меня система 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
-
Файл конфигурации
/etc/xrdp/xrdp.ini
:- Убедитесь, что секция
[Xorg]
корректно настроена. Обратите внимание наusername=ask
иpassword=ask
. Это указывает на то, что XRDP запрашивает эти данные при подключении, и это правильно. - Ваша секция на данный момент выглядит корректно, но можно попробовать заменить на:
username=your_username password=your_password
- Если вы используете
cinnamon-session-cinnamon
в файле~/.xsession
, убедитесь, что Cinnamon установлен и работает должным образом.
- Убедитесь, что секция
-
Проверка файла
~/.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: Проверьте журналы
- Проверка журналов XRDP:
- Запустите команду для просмотра журналов и ошибок:
sudo less /var/log/xrdp.log sudo less /var/log/xrdp-sesman.log
- Посмотрите на ошибки или предупреждения, которые могут указать на то, что идет не так.
- Запустите команду для просмотра журналов и ошибок:
Шаг 4: Кэширование подсистемы и Firewall
-
Проверка UFW:
- Убедитесь, что UFW настроен правильно:
sudo ufw status
- Проверьте, что порт 3389 открыт.
- Убедитесь, что UFW настроен правильно:
-
Отключение или изменение параметров кэширования:
- Проверьте параметры кэширования и отключите их, если они вызывают проблемы. В
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!