Xrdp

Материал из support.qbpro.ru

Переключение клавиатуры с удаленной машины

Далее шрифты - этот бинарник ищет шрифты в /opt/X11rdp/lib/X11/fonts Создал каталоги /opt/X11rdp/lib/X11, сделал симлинк fonts на папку со шрифтами уже стоящего X-сервера (у меня лежали в /usr/share/X11/fonts) После этого X11rdp может запускаться, то есть уже можно виндовым клиентом терминалов заходить в sesman-X11rdp. Однако setxkbmap не работает, видимо этот бинарник X11rdp ищет папку xkb где-то в другом месте. Поэтому, создал в /usr/local/lib/xrdp файл rus.map следующего содержания:

xkb_keymap {
    xkb_keycodes  { include "xfree86+aliases(qwerty)"    };
    xkb_types     { include "complete"    };
    xkb_compat    { include "complete"    };
    xkb_symbols   { include "pc+ru(winkeys)+us:2+group(ctrl_shift_toggle)"    };
    xkb_geometry  { include "pc(pc104)"    };
};

Далее прописал в начале /usr/local/lib/xrdp/startwm.sh : для lxde - /usr/bin/startlxde

xkbcomp /usr/local/lib/xrdp/rus.map $DISPLAY

Все. Теперь при входе язык русский, Ctrl+Shift переключает на английский. взято: тут

if [ -r /etc/default/locale ]; then

. /etc/default/locale

export LANG LANGUAGE

fi

setxkbmap -layout "us,ru(winkeys)" -model "pc105" -option "grp:ctrl_shift_toggle,grp_led:scroll"


Удалённый рабочий стол в Ubuntu Linux

Сначала устанавливаем xrdp, он есть в репозиториях. Потом нужно установить последнюю версию x11rdp - это нормальный RDP сервер для Linux. Вся проблема лично для меня заключалась в нахождении его исходников. :)

Компилируем x11rdp:

# apt-get install subversion gcc libice-dev pkg-config zlib1g-dev cvs autoconf libtool libssl-dev libpam0g-dev libx11-dev libxfixes-dev xfonts-base   
$ svn co svn://server1.xrdp.org/srv/svn/repos/main/x11rdp_xorg71
$ mkdir /usr/local/X11rdp
$ cd x11rdp_xorg71
# sh buildx.sh /usr/local/X11rdp

Это займёт некоторое время. После успешной компиляции стоит сделать ссылки на xserver для xrdp:

# ln -s /usr/local/X11rdp/bin/X11rdp /usr/local/bin
# ln -s /usr/share/fonts/X11 /usr/local/X11rdp/lib/X11/fonts

И, наконец, указываем настройки для xrdp, чтобы он использовал x11rd. Правим /etc/xrdp/xrdp.ini:

[globals]
bitmap_cache=yes
bitmap_compression=yes
port=3389
crypt_level=low
channel_code=1

[xrdp0]
name=sesman-X11rdp
lib=libxup.so
username=ask
password=ask
ip=127.0.0.1
port=-1

Вот и всё :) На самом деле всё очень просто! Это позволяет устанавливать одновременно несколько подключений, при нормальном rdp клиенте работают все сочетания клавиш и смены раскладок происходят без проблем. Если активных клиентов нет, работает только один процесс - xrdp. Я сейчас сижу на работе через удалённый рабочий стол ;)

Debian 9 - настройка xrdp

Терминальный RDP сервер Debian 9 + Xrdp

Год назад, я описал установку терминального сервера Debian+xRDP+X11-rdp. В связи с переходом на другой гипервизор возникла необходимость его переустановки. Так как за это время вышел 9-й релиз Debian, то естественно решено ставить его. За этот год проект XRDP эволюционировал с версии 0.6.1 до версии 0.9.3 и установка сервера категорически упростилась. После установки системы (при установке ставлю только системные утилиты, LXDE, SSH сервер и по желанию сервера печати), достаточно просто поставить XRDP из пакетов:

  • Внимание версия пакета не ниже: 1:0.2.8-1~bpo9+1 (для Debian 9)

sudo apt update sudo apt install -y xrdp

Вместе с пакетом xrdp поставится xorgxrdp, который собственно и является рекомендуемым командой xrdp RDP сервером, обеспечивающим удаленное подключение, а XRDP это прокси сервер, обеспечивающий одновременное подключение множества пользователей. Во время установки сгенерируется сертификат безопасности, который потом, при желании можно перегенерировать(я не стал). После установки необходимо выполнить:

dpkg-reconfigure xserver-xorg-legacy
  • Выбрать - Кто угодно

Все, можно подключаться. В случае необходимости конфигурируем RDP параметры путем изменения настроек в /etc/xrdp/xrdp.ini и

/etc/xrdp/sesman.ini

в /etc/xrdp/xrdp.ini можно закомментировать ненужные варианты подключений, например так: в /etc/xrdp/sesman.ini настраиваем параметры сессии, использование буфера обмена и прочее(оба файла отлично комментированы и настройка не должна вызвать сложности)

mcedit /etc/xrdp/sesman.ini
= необходимое изменение =
[Security]
# Авторизация root. true - разрешено false - запрещено
AllowRootLogin=false
  • Одна сессия для пользователя XRDP
mcedit /etc/xrdp/sesman.ini
= вывод команды с необходимыми настройками =
[Globals]
ListenAddress=127.0.0.1
ListenPort=3350
EnableUserWindowManager=true
UserWindowManager=startwm.sh
DefaultWindowManager=startwm.sh

[Security]
AllowRootLogin=false
MaxLoginRetry=4
TerminalServerUsers=tsusers
TerminalServerAdmins=tsadmins
; When AlwaysGroupCheck=false access will be permitted
; if the group TerminalServerUsers is not defined.
AlwaysGroupCheck=false

[Sessions]
;; X11DisplayOffset - x11 display number offset
; Type: integer
; Default: 10
X11DisplayOffset=10 #

;; MaxSessions - maximum number of connections to an xrdp server
; Type: integer
; Default: 0
# Выставляем количество пользователей для одновременной работе на сервере
MaxSessions=3

;; KillDisconnected - kill disconnected sessions
; Type: boolean
; Default: false
; if 1, true, or yes, kill session after 60 seconds
# Не разрываем сеанс при отключении пользователя чтобы потом попасть в туже сессию
KillDisconnected=true

;; IdleTimeLimit - when to disconnect idle sessions
; Type: integer
; Default: 0
; if not zero, the seconds without mouse or keyboard input before disconnect
; not complete yet
IdleTimeLimit=0

;; DisconnectedTimeLimit - when to kill idle sessions
; Type: integer
; Default: 0
; if not zero, the seconds before a disconnected session is killed
; min 60 seconds
DisconnectedTimeLimit=0

;; Policy - session allocation policy
; Type: enum [ "Default" | "UBD" | "UBI" | "UBC" | "UBDI" | "UBDC" ]
; Default: Xrdp:<User,BitPerPixel> and Xvnc:<User,BitPerPixel,DisplaySize>
; "UBD" session per <User,BitPerPixel,DisplaySize>
; "UBI" session per <User,BitPerPixel,IPAddr>
; "UBC" session per <User,BitPerPixel,Connection>
; "UBDI" session per <User,BitPerPixel,DisplaySize,IPAddr>
; "UBDC" session per <User,BitPerPixel,DisplaySize,Connection>
Policy=Default

[Logging]
LogFile=/var/log/xrdp/xrdp-sesman.log
LogLevel=DEBUG
EnableSyslog=1
SyslogLevel=DEBUG

[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]
; drive redirection, defaults to xrdp_client if not set
FuseMountName=/tmp/thinclient_drives

[SessionVariables]
PULSE_SCRIPT=/etc/xrdp/pulse/default.pa
CHANSRV_LOG_PATH=/var/log/xrdp

Обязательно создать каталог: /var/log/xrdp

mkdir -p /var/log/xrdp
chown -R xrdp:xrdp /var/log/xrdp
  • Раскладка клавиатуры
$ sudo nano /etc/xrdp/xrdp_keyboard.ini

Изменить:

(-) rdp_layout_us=us
(+) rdp_layout_us=us,ru

Добавить:

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

в комментах

[rdp_keyboard_ru]
keyboard_type=4
keyboard_type=7
keyboard_subtype=1
model=pc105
options=grp:alt_shift_toggle
rdp_layouts=default_rdp_layouts
layouts_map=layouts_map_ru

[layouts_map_ru]
rdp_layout_us=us,ru
rdp_layout_ru=us,ru 


перезапускаем XRDP

systemctl restart xrdp

Все, можно подключаться. Настоятельно рекомендую удалить хранитель экрана, чтоб не грузить процессор.

apt remove xscreensaver

Если по какой то причине xorgrdp не устраивает вот ссыдка на документацию как собрать X11-rdp.

Обратил внимание, что начинают появляться средства мониторинга и администрирования сессий и хотя они находятся в зачаточном состоянии, сама тенденция обнадеживает - вот вывод man:

xrdp-sesadmin [options] -c=command


  • файл /etc/xrdp/xrdp.ini
[Globals]
; xrdp.ini file version number
ini_version=1

; fork a new process for each incoming connection
fork=false
; tcp port to listen
port=3389
; 'port' above should be connected to with vsock instead of tcp
use_vsock=false
; regulate if the listening socket use socket option tcp_nodelay
; no buffering will be performed in the TCP stack
tcp_nodelay=true
; regulate if the listening socket use socket option keepalive
; if the network connection disappear without close messages the connection will be closed
tcp_keepalive=true
#tcp_send_buffer_bytes=32768
#tcp_recv_buffer_bytes=32768

; security layer can be 'tls', 'rdp' or 'negotiate'
; for client compatible layer
security_layer=rdp
; minimum security level allowed for client
; can be 'none', 'low', 'medium', 'high', 'fips'
crypt_level=high
; X.509 certificate and private key
; openssl req -x509 -newkey rsa:2048 -nodes -keyout key.pem -out cert.pem -days 365
; certificate=
; key_file=
certificate=/etc/xrdp/certificate/cert.pem
key_file=/etc/xrdp/certificate/key.pem
; set SSL protocols
; can be comma separated list of 'SSLv3', 'TLSv1', 'TLSv1.1', 'TLSv1.2'
ssl_protocols=TLSv1, TLSv1.1, TLSv1.2
; set TLS cipher suites
#tls_ciphers=HIGH

; Section name to use for automatic login if the client sends username
; and password. If empty, the domain name sent by the client is used.
; If empty and no domain name is given, the first suitable section in
; this file will be used.
autorun=

allow_channels=true
allow_multimon=true
bitmap_cache=true
bitmap_compression=true
bulk_compression=true
#hidelogwindow=true
max_bpp=16
new_cursors=false
; fastpath - can be 'input', 'output', 'both', 'none'
use_fastpath=both
; when true, userid/password *must* be passed on cmd line
#require_credentials=true
; You can set the PAM error text in a gateway setup (MAX 256 chars)
#pamerrortxt=change your password according to policy at http://url

;
; colors used by windows in RGB format
;
blue=009cb5
grey=dedede
#black=000000
#dark_grey=808080
#blue=08246b
#dark_blue=08246b
#white=ffffff
#red=ff0000
#green=00ff00
#background=626c72

;
; configure login screen
;

; Login Screen Window Title
#ls_title=My Login Title

; top level window background color in RGB format
ls_top_window_bg_color=009cb5

; width and height of login screen
ls_width=350
ls_height=430

; login screen background color in RGB format
ls_bg_color=dedede

; optional background image filename (bmp format).
#ls_background_image=

; logo
; full path to bmp-file or file in shared folder
ls_logo_filename=
ls_logo_x_pos=55
ls_logo_y_pos=50

; for positioning labels such as username, password etc
ls_label_x_pos=30
ls_label_width=60

; for positioning text and combo boxes next to above labels
ls_input_x_pos=110
ls_input_width=210

; y pos for first label and combo box
ls_input_y_pos=220

; OK button
ls_btn_ok_x_pos=142
ls_btn_ok_y_pos=370
ls_btn_ok_width=85
ls_btn_ok_height=30

; Cancel button
ls_btn_cancel_x_pos=237
ls_btn_cancel_y_pos=370
ls_btn_cancel_width=85
ls_btn_cancel_height=30

[Logging]
LogFile=/var/log/xrdp/xrdp.log
LogLevel=DEBUG
EnableSyslog=true
SyslogLevel=DEBUG
; LogLevel and SysLogLevel could by any of: core, error, warning, info or debug

[Channels]
; Channel names not listed here will be blocked by XRDP.
; You can block any channel by setting its value to false.
; IMPORTANT! All channels are not supported in all use
; cases even if you set all values to true.
; You can override these settings on each session type
; These settings are only used if allow_channels=true
rdpdr=true
rdpsnd=true
drdynvc=true
cliprdr=true
rail=true
xrdpvr=true
tcutils=true

; for debugging xrdp, in section xrdp1, change port=-1 to this:
#port=/tmp/.xrdp/xrdp_display_10

; for debugging xrdp, add following line to section xrdp1
#chansrvport=/tmp/.xrdp/xrdp_chansrv_socket_7210


;
; Session types
;

; Some session types such as Xorg, X11rdp and Xvnc start a display server.
; Startup command-line parameters for the display server are configured
; in sesman.ini. See and configure also sesman.ini.
[Xorg]
name=Xorg
lib=libxup.so
username=ask
password=ask
ip=127.0.0.1
port=-1
code=20

[X11rdp]
name=X11rdp
lib=libxup.so
username=ask
password=ask
ip=127.0.0.1
port=-1
xserverbpp=24
code=10

[Xvnc]
name=Xvnc
lib=libvnc.so
username=ask
password=ask
ip=127.0.0.1
port=-1
#xserverbpp=24
#delay_ms=2000

[console]
name=console
lib=libvnc.so
ip=127.0.0.1
port=5900
username=na
password=ask
#delay_ms=2000

[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

[sesman-any]
name=sesman-any
lib=libvnc.so
ip=ask
port=-1
username=ask
password=ask
#delay_ms=2000

[neutrinordp-any]
name=neutrinordp-any
lib=libxrdpneutrinordp.so
ip=ask
port=ask3389
username=ask
password=ask

; You can override the common channel settings for each session type
#channel.rdpdr=true
#channel.rdpsnd=true
#channel.drdynvc=true
#channel.cliprdr=true
#channel.rail=true
#channel.xrdpvr=true
  • Курсор в черном квадрате при подключении по RDP

Неожиданно после обновления системы Calculate Linux обнаружилось что стрелка курсора показывается черном квадрате. Проблема решается редактированием файла:

mcedit /etc/xrdp/xrdp.ini
= часть вывода команды с необходимыми изменениями =
# подбираем по скорости канала 16,24,32
max_bpp=32
# Было true и с Сalculate Linux при подключении курсор в квадрате
new_cursors=false
  • Сертификат при работе сервера XRDP

По умолчанию сертификат работает с сертификатами созданными при установке о чем свидетельствует информация в логе xrdp:

cat /var/log/xrdp.log
= необходимая информация =
 Using default X.509 certificate: /etc/xrdp/cert.pem
 Using default X.509 key file: /etc/xrdp/key.pem
  • Выпустим свой сертификат на 1 год по команде указанном в файле настройки xrdp. Создадим папку, перейдем туда и запустим команду генерации ключа:
mkdir -p /etc/xrdp/certificate
cd /etc/xrdp/certificate
openssl req -x509 -newkey rsa:2048 -nodes -keyout key.pem -out cert.pem -days 1365
chown -R xrdp:xrdp /etc/xrdp/certificate
  • Отредактируем файл настройки:
mcedit /etc/xrdp/xrdp.ini
= необходимые изменения =
; security layer can be 'tls', 'rdp' or 'negotiate'
; for client compatible layer
security_layer=negotiate
; minimum security level allowed for client
; can be 'none', 'low', 'medium', 'high', 'fips'
crypt_level=high
; X.509 certificate and private key
; openssl req -x509 -newkey rsa:2048 -nodes -keyout key.pem -out cert.pem -days 365
certificate=/etc/xrdp/certificate/cert.pem
key_file=/etc/xrdp/certificate/key.pem
; specify whether SSLv3 should be disabled
#disableSSLv3=true
; set TLS cipher suites
#tls_ciphers=HIGH

* Возможные проблемы:
Появление в каталоге пользователя файла с запретом .thinclient_drives
и лог файла от xrdp.

* Решение: внести в файл /etc/xrdp/xrdp.ini

 [Logging]
LogFile=/var/log/xrdp/xrdp-sesman.log

..
 [Chansrv]
; drive redirection, defaults to xrdp_client if not set
;FuseMountName=thinclient_drives
FuseMountName=/tmp/thinclient_drives
..
 [SessionVariables]
PULSE_SCRIPT=/etc/xrdp/pulse/default.pa
CHANSRV_LOG_PATH=/var/log/xrdp

и дополнительно создать каталог:

mkdir -p /var/log/xrdp

перезапускаем службу xrdp.

/etc/init.d/xrdp restart

Debian 11 установка XRDP

  • Установка:
sudo apt update
sudo apt install xrdp
  • Проверка работы демона:
sudo systemctl status xrdp
  • Настройка XRDP:

Добавляем пользователя xrdp от имени которого работает служба, в группу ssl-cert:

adduser xrdp ssl-cert
  • Затем добавьте службу xrdp в автозапуск и перезапустите ее, чтобы изменения вступили в силу:
sudo systemctl restart xrdp
sudo systemctl enable xrdp
  • Xrdp прослушивает порт 3389 на всех интерфейсах, не забываем настроить файрволл, если он включен.

ИСТОЧНИКИ