Инструменты пользователя

Инструменты сайта


xrdp:xrdp

xrdp

Реализация сервера rdp с открытым исходным кодом в Linux.

http://www.xrdp.org/

https://github.com/neutrinolabs/xrdp

Настройка PulseAudio в xrdp

Клиенты:


Проект для автоматизированной сборки xrdp сервера: X11RDP-o-Matic.

Установка

apt install -t jessie-backports xrdp xorgxrdp

или

apt install -t stretch-backports xrdp xorgxrdp

Логотип

Формат графических файлов:

  • BMP
  • глубина цвета 24 бита
  • тип: windows

Важно, чтобы файл логотипа имел чётное число точек по вертикали и горизонтали.

Пример настроек описан здесь

logo.bmp

Пример настроек дан в разделе xrdp.ini

sesman.ini

:!: В xrdp 0.9.1-9~bpo8+1_amd64 не работает конституция MaxSessions=0 поэтому нужно ставить завышенное число сессией.

Пример sesman.ini

Пример sesman.ini

/etc/xrdp/sesman.ini
[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).

Пример настройки Xorg

Пример настройки Xorg

/etc/xrdp.ini
[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

Пример xrdp_keyboard.ini

Пример xrdp_keyboard.ini

/etc/xrdp/xrdp_keyboard.ini
#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

Список текущих сессий:

xrdp-status.sh
#!/bin/bash
ls -l /var/run/xrdp/sockdir
service xrdp status

Перезапуск

Сброс сессий путём перезапуска xrdp

/usr/local/sbin/xrdp-restart.sh
#!/bin/bash
 
/usr/bin/pkill -f xrdp-sesman --signal 9
/usr/sbin/service xrdp restart

Решение для Debian 9 (stretch)

/usr/local/sbin/xrdp-restart.sh
#!/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

Debian: Работа с PAM

/etc/pam.d/xrdp-sesman
#%PAM-1.0
@include common-auth
@include common-account
@include common-session
@include common-password

Клавиатура

Параметры задаются в файле xrdp_keyboard.ini

Настройки клавиатуры необходимо выполнять при создании сессии пользователя, вот пример для IceWM.

reconnectwm.sh

Скрипт выполняется при повторном подключении пользователя к существующей сессии.

Ниже приведён пример использования этого скрипта для применения настроек клавиатуры при работе в IceWM.

/etc/xrdp/reconnectwm.sh
#!/bin/bash
 
icewm --restart&
if pgrep -u $(whoami) xxkb>/dev/null; then
    pkill xxkb;xxkb&
fi
 
exit

На файл нужно дать права запуска для всех пользователей:

chmod +x /etc/xrdp/reconnectwm.sh

Особенности использования русского языка

  1. Чтобы избежать ошибок при вводе имени/пароля при подключении нужно по умолчанию установить английскую(латинскую) раскладка клавиатуры. Например, в FreeRDP нужно указать в строке запуска клиента параметр /kbd:0x00000409
  2. Не нужно использовать setxkbmap в при запуске IceWM и в reconnectwm.sh
  3. Для xrdp_keyboard.ini нужно использовать такой вариант такой вариант:

    Пример, включающий порядок раскладок клавиатуры с учётом использования XXKB:

    Если первой (по умолчанию) является английская раскладка, то в xrdp_keyboard.ini указываем это:

    /etc/xrdp/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

Решение проблем

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 нужно добавить стоку:

/lib/systemd/system/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

Не запускается сессия

Замечена на Debian 9

Решение: нужно

  • service xrdp stop
  • выполнить
    dpkg-reconfigure xserver-xorg-legacy

    и выбрать кому можно запускать его (кто угодно)

  • service xrdp start

Проблемы с авторизацией

Проблемы в PAM.

В Debian 10 обязательно закомментировать строку:

/etc/pam.d/common-auth
auth required pam_unix.so use_first_pass

Ссылки

xrdp/xrdp.txt · Последние изменения: 2024-03-12 16:30 — GreyWolf