====== xrdp ======
{{:xrdp:xrdp_logo_mrgb.png?300|}}
Реализация сервера [[rdp:rdp|rdp]] с открытым исходным кодом в Linux.
http://www.xrdp.org/
https://github.com/neutrinolabs/xrdp
[[xrdp:pulseaudio|Настройка PulseAudio в xrdp]]
Клиенты:
* [[freerdp:freerdp|FreeRDP]]
* [[remmina:remmina|Remmina]]
----
Проект для автоматизированной сборки xrdp сервера: [[x11rdp-o-matic:x11rdp-o-matic|X11RDP-o-Matic]].
====== Установка ======
apt install -t jessie-backports xrdp xorgxrdp
или
apt install -t stretch-backports xrdp xorgxrdp
====== Логотип ======
Формат графических файлов:
* BMP
* глубина цвета 24 бита
* тип: windows
Важно, чтобы файл логотипа имел чётное число точек по вертикали и горизонтали.
Пример настроек описан [[#xrdp.ini|здесь]]
{{:xrdp:logo.bmp|logo.bmp}}
{{:xrdp:logon_dialog.png|}}
Пример настроек дан в разделе ''[[#xrdp.ini]]''
====== sesman.ini ======
:!: В xrdp 0.9.1-9~bpo8+1_amd64 не работает конституция ''MaxSessions=0'' поэтому нужно ставить завышенное число сессией.
[Globals]
ListenAddress=127.0.0.1
ListenPort=3350
EnableUserWindowManager=true
UserWindowManager=startwm.sh
DefaultWindowManager=startwm.sh
[Security]
AllowRootLogin=false
MaxLoginRetry=1
TerminalServerUsers=tsusers
TerminalServerAdmins=tsadmins
AlwaysGroupCheck=false
[Sessions]
X11DisplayOffset=10
MaxSessions=100
KillDisconnected=false
IdleTimeLimit=0
DisconnectedTimeLimit=0
Policy=Default
[Logging]
LogFile=xrdp-sesman.log
LogLevel=CORE
EnableSyslog=1
SyslogLevel=CORE
[Xorg]
param=Xorg
param=-config
param=xrdp/xorg.conf
param=-noreset
param=-nolisten
param=tcp
[Xvnc]
param=Xvnc
param=-bs
param=-nolisten
param=tcp
param=-localhost
param=-dpi
param=96
[Chansrv]
FuseMountName=
Для того, чтобы пользователь с любого IP–адреса подключался к своей сессии нужно в разделе ''[Sessions]'' задать ''Policy=Default''
====== xrdp.ini ======
Важно убрать или отключить не используемые настройки и оставить только нужные, например секцию для настройки ''Xorg'' и например [[x11vnc:assistant|]].
[Globals]
ini_version=1
fork=no
port=3389
tcp_nodelay=true
tcp_keepalive=true
security_layer=negotiate
crypt_level=high
certificate=
key_file=
autorun=
allow_channels=true
allow_multimon=true
bitmap_cache=true
bitmap_compression=true
bulk_compression=true
max_bpp=32
new_cursors=true
use_fastpath=both
# configure login screen {
blue=009cb5
grey=dedede
black=000000
dark_grey=808080
blue=08246b
dark_blue=08246b
white=ffffff
red=ff0000
green=00ff00
background=626c72
ls_title=ИМЯ_СЕРВЕРА
ls_top_window_bg_color=3a6ea5
# Ширина и высота окна
ls_width=330
ls_height=203
# Цвет фона окна в формате RGB
ls_bg_color=dedede
# optional background image filename (bmp format).
#ls_background_image=
# Имя файла с логотипом и его позиция
ls_logo_filename=/usr/local/share/logo.bmp
ls_logo_x_pos=95
ls_logo_y_pos=30
# for positioning labels such as username, password etc Имена полей
ls_label_x_pos=30
ls_label_width=20
# for positioning text and combo boxes next to above labels
ls_input_x_pos=8
ls_input_width=80
# y pos for first label and combo box
ls_input_y_pos=120
# OK button
ls_btn_ok_x_pos=237
ls_btn_ok_y_pos=130
ls_btn_ok_width=85
ls_btn_ok_height=25
# Cancel button
ls_btn_cancel_x_pos=237
ls_btn_cancel_y_pos=167
ls_btn_cancel_width=85
ls_btn_cancel_height=25
# configure login screen }
[Logging]
LogFile=xrdp.log
LogLevel=CORE
EnableSyslog=true
SyslogLevel=CORE
[Channels]
rdpdr=true
rdpsnd=true
drdynvc=true
cliprdr=true
rail=true
xrdpvr=true
tcutils=true
[Xorg]
name=Xorg
lib=libxup.so
username=ask
password=ask
ip=127.0.0.1
port=-1
code=20
xserverbpp=16
====== xrdp_keyboard.ini ======
FIXME
#https://github.com/neutrinolabs/xrdp/wiki/Example-of-xrdp_keyboard.ini-for-russian-keyboard
[default_rdp_layouts]
rdp_layout_us=0x00000409
rdp_layout_de=0x00000407
rdp_layout_fr=0x0000040C
rdp_layout_it=0x00000410
rdp_layout_jp=0x00000411
rdp_layout_jp2=0xe0010411
rdp_layout_jp3=0xe0200411
rdp_layout_jp4=0xe0210411
rdp_layout_ru=0x00000419
rdp_layout_se=0x0000041D
rdp_layout_pt=0x00000816
rdp_layout_br=0x00000416
rdp_layout_pl=0x00000415
[rdp_keyboard_ru]
keyboard_type=4
keyboard_subtype=1
model=pc105
options=grp:alt_shift_toggle
#options=grp:alt_shift_toggle,grp_led:scroll
rdp_layouts=default_rdp_layouts
layouts_map=layouts_map_ru
[layouts_map_ru]
rdp_layout_us=us,ru
rdp_layout_ru=us,ru
====== Список сессий ======
FIXME
Список сессий пользователя:
xrdp-sesadmin -u=ИМЯ -p=ПАРОЛЬ -c=list
Список текущих сессий:
#!/bin/bash
ls -l /var/run/xrdp/sockdir
service xrdp status
====== Перезапуск ======
Сброс сессий путём перезапуска ''xrdp''
#!/bin/bash
/usr/bin/pkill -f xrdp-sesman --signal 9
/usr/sbin/service xrdp restart
----
**Решение для Debian 9 (stretch)**
#!/bin/bash
/usr/bin/pkill -f xrdp-sesman --signal 9
/usr/bin/pkill -f Xorg --signal 9
/usr/sbin/service xrdp restart
rm -r /tmp/.X11-unix/*
rm /tmp/.X*-lock
====== PAM ======
[[pam:pam|Debian: Работа с PAM]]
#%PAM-1.0
@include common-auth
@include common-account
@include common-session
@include common-password
====== Клавиатура ======
Параметры задаются в файле ''[[#xrdp_keyboard.ini]]''
Настройки клавиатуры необходимо выполнять при создании сессии пользователя, вот пример для [[icewm:icewm#startup|IceWM]].
====== reconnectwm.sh ======
Скрипт выполняется при повторном подключении пользователя к существующей сессии.
Ниже приведён пример использования этого скрипта для применения настроек клавиатуры при работе в [[icewm:icewm#startup|IceWM]].
#!/bin/bash
icewm --restart&
if pgrep -u $(whoami) xxkb>/dev/null; then
pkill xxkb;xxkb&
fi
exit
На файл нужно дать права запуска для всех пользователей:
chmod +x /etc/xrdp/reconnectwm.sh
{{anchor:russian-language}}
====== Особенности использования русского языка ======
- Чтобы избежать ошибок при вводе имени/пароля при подключении нужно по умолчанию установить английскую(латинскую) раскладка клавиатуры. Например, в [[freerdp:|]] нужно указать в строке запуска клиента параметр ''/kbd:0x00000409''
- Не нужно использовать ''setxkbmap'' в при запуске [[icewm:#startup|IceWM]] и в [[#reconnectwm.sh]]
- Для [[#xrdp_keyboard.ini]] нужно использовать такой вариант такой вариант:
Пример, включающий порядок раскладок клавиатуры с учётом использования [[xxkb:#russian-language|XXKB]]:
Если первой (по умолчанию) является английская раскладка, то в [[#xrdp_keyboard.ini]] указываем это:
[default_rdp_layouts]
rdp_layout_none=0x00000000
rdp_layout_us=0x00000409
rdp_layout_us_pd=0xa0000409
rdp_layout_ru=0x00000419
[default_layouts_map]
rdp_layout_none=us,ru
rdp_layout_us=us,ru
rdp_layout_us_pd=us,ru
rdp_layout_ru=us,ru
[rdp_keyboard_ru]
keyboard_type=4
keyboard_subtype=1
options=grp:ctrl_shift_toggle
rdp_layouts=default_rdp_layouts
layouts_map=default_layouts_map
А если первой (по умолчанию) русская, то изменения ''xrdp_keyboard.ini'' для такого порядка раскладок клавиатуры выглядят так:
[default_layouts_map]
rdp_layout_none=ru,us
rdp_layout_us=ru,us
rdp_layout_us_pd=ru,us
rdp_layout_ru=ru,us
----
* [[https://github.com/neutrinolabs/xrdp/wiki/Example-of-xrdp_keyboard.ini-for-russian-keyboard|Example of xrdp_keyboard.ini for russian keyboard]]
* [[https://github.com/neutrinolabs/xrdp/issues/337#issuecomment-1272405503|keyboard layout set only to "us" after reconnect session instead "us,ru" · Issue #337 · neutrinolabs/xrdp]]
====== Решение проблем ======
[[https://github.com/FreeRDP/FreeRDP/issues/3863|Black box around cursor and other problems when connecting to xrdp xubuntu 1704]]
Обязательно должен быть файл ''/var/log/xrdp.log''
===== Dependency failed for xrdp daemon =====
В пакете ''xrdp_0.9.1-4~bpo8+1_amd64.deb'' есть ошибки которые приводят к появлению ошибки:
Dependency failed for xrdp daemon.
Это вызвано тем, не создаётся папка ''/var/run/xrdp''
Решение:
1. В секцию ''Service'' файла ''xrdp-sesman.service'' нужно добавить стоку:
[Service]
ExecStartPre=/bin/sh /usr/share/xrdp/socksetup
2. Создать ссылки
ln -s /lib/systemd/system/xrdp.service /etc/systemd/system
ln -s /lib/systemd/system/xrdp-sesman.service /etc/systemd/system
3. Перечитать настройки
systemctl daemon-reload
===== xrdp thinclient_drives reconnect =====
FIXME
[[https://github.com/neutrinolabs/xrdp/issues/720|thinclient_drives is empty although drives selected in Win10 RDP client]]
[[https://github.com/neutrinolabs/xrdp/issues/780|Drive redirection: fuse not umounted at logout]]
===== Не запускается сессия =====
Замечена на Debian 9
Решение: нужно
* service xrdp stop
* выполнить dpkg-reconfigure xserver-xorg-legacy
и выбрать кому можно запускать его (кто угодно)
* service xrdp start
===== Проблемы с авторизацией =====
Проблемы в [[#PAM]].
В Debian 10 обязательно закомментировать строку:
auth required pam_unix.so use_first_pass
====== Ссылки ======
[[http://server1.xrdp.org/xrdp/logo/xrdp_logo_mrgb.png|Логотип]]
**[[http://tovld.com/archives/2978|VLD: Debian + LXDE + XRDP (x11rdp) + 1C on DS or VPS — терминальный сервер]]**
**[[http://a-katyrev.blogspot.ru/2016/10/debian-8-lxde-xrdp-x11-rdp.html|Администрирование и не только: Терминальный сервер Debian 8 LXDE + xRDP + X11-RDP]]**
https://github.com/neutrinolabs/xrdp/wiki/Example-of-xrdp_keyboard.ini-for-russian-keyboard
{{tag>terminal_server x-windows Remote_access}}