XRDP Удалённый рабочий стол в CentOS
Введение
xrdp-это бесплатная и открытая реализация сервера Microsoft RDP (Remote Desktop Protocol),
которая позволяет операционным системам, отличным от
Microsoft Windows
(таким как
Linux
и операционные системы в стиле
BSD
), обеспечить полностью функциональный RDP-совместимый
удаленный рабочий стол.
Он работает путем соединения графики из системы X Window с клиентом и ретрансляции элементов
управления из клиента обратно в
X
.
По словам разработчиков, протокол работает с rdesktop, FreeRDP и собственным
клиентом удаленного рабочего стола Microsoft
Подготовка к установке
Перед установкой xrdp убедитесь, что у вас установлен epel-release
yum list epel-release
Loaded plugins: fastestmirror, langpacks Determining fastest mirrors * base: mirror.hosthink.net * epel: www.nic.funet.fi * extras: mirror.hosthink.net * updates: mirror.hosthink.net Installed Packages epel-release.noarch
Installed означает, что у меня epel-release установлен
Если вместо Installed вы видите Available - тогда установите командой
sudo yum -y install epel-release
Чтобы пользоваться xrdp нужно сперва установить X-сервер . Например, Gnome или Xfce.
Установить Gnome:
sudo yum update
sudo yum -y install centos-desktop
Установить xfce:
sudo yum -y update
sudo yum -y install xcentos-desktop
После установки X сервера и epel-release можно перейти непосредственно к установке xrdp
Установка
Проверить наличие xrdp можно выполнив
yum list xrdp
Loaded plugins: fastestmirror, langpacks, product-id, search-disabled-repos, subscription-manager Loading mirror speeds from cached hostfile * base: mirror.hosthink.net * epel: mirrors.dotsrc.org * extras: mirror.hosthink.net * updates: mirror.hosthink.net Available Packages xrdp.x86_64 1:0.9.15-3.el7 epel
Available означает, что пакет не установлен но доступен для установки.
В последней строке можно увидеть, что xrdp.x86_64 доступен из epel репозитория. Поэтому и нужно было сперва установить epel-release
Установить xrdp можно командой
sudo yum -y install xrdp
Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: ftp.funet.fi * epel: mirror.cspacehostings.com * extras: ftp.funet.fi * updates: ftp.funet.fi Resolving Dependencies --> Running transaction check ---> Package xrdp.x86_64 1:0.9.15-3.el7 will be installed --> Finished Dependency Resolution Dependencies Resolved ====================================================================================================================================================================== Package Arch Version Repository Size ====================================================================================================================================================================== Installing: xrdp x86_64 1:0.9.15-3.el7 epel 434 k Transaction Summary ====================================================================================================================================================================== Install 1 Package Total download size: 434 k Installed size: 2.1 M Is this ok [y/d/N]:
y
Обратите внимание на Dependencies Resolved, если там не упоминается tigervnc, то рекомендую установить tigervnc-server самостоятельно.
sudo yum -y install tigervnc-server
Как вариант - при установке xrdp в Dependencies Resolved может присутствовать tigervnc-license и tigervnc-server-minimal. Это означает что про tigervnc не забыли.
Если вы не обратили внимание на логи установки - можно проверить что же всё-таки было установлено при посленем использовании yum install - достаточно выполнить
yum history info
Если нужно удалить всё что было только что установлено - выполните
yum history undo 7
Настройка после установки
После установки содержимое директории с xrdp выглядит примерно так
ls /etc/xrdp
cert.pem km-00000407.ini km-0000040b.ini km-00000411.ini km-00000415.ini km-0000041d.ini km-0000080a.ini km-00000816.ini km-19360409.ini rsakeys.ini xrdp_keyboard.ini key.pem km-00000409.ini km-0000040c.ini km-00000412.ini km-00000416.ini km-00000807.ini km-0000080c.ini km-0000100c.ini openssl.conf sesman.ini km-00000406.ini km-0000040a.ini km-00000410.ini km-00000414.ini km-00000419.ini km-00000809.ini km-00000813.ini km-00010409.ini pulse xrdp.ini
Проверить режим работы SELinux можно командой
getenforce
Enforcing
Не будем менять Enforcing на Permissive и тем более Disabled а постараемся настроить всё в этом режиме.
cd /usr/sbin/
ls -Z xrdp*
-rwxr-xr-x. root root system_u:object_r:bin_t:s0 xrdp -rwxr-xr-x. root root system_u:object_r:bin_t:s0 xrdp-chansrv -rwxr-xr-x. root root system_u:object_r:bin_t:s0 xrdp-sesman
У вас также может присутствовать xrdp-sessvc
Если xrdp и xrdp-sesman (Session Manager) имеют тип unconfined_exec_t возможно вам придётся
вручную изменить его на bin_t это можно сделать командой
chcon -t bin_t xrdp xrdp-sesman
Настройка startwm.
Скрипт
startwm.sh
может лежать как в /etc/xrdp так и в /usr/libexec/xrdp
ls /usr/libexec/xrdp
reconnectwm.sh startwm-bash.sh startwm.sh
Пример файла startwm.sh и варианты модификаций вы можете найти в статье startwm
Запуск xrdp
systemctl start xrdp
systemctl enable xrdp
Проверить статус
Проверить слушается ли порт 3389
netstat -ltn | grep 3389
tcp 0 0 0.0.0.0:3389 0.0.0.0:* LISTEN
Проверить статус xrdp
sudo systemctl status -l xrdp
-l выводит предложения до конца
Если всё работает, то вы увидите что-то похожее:
● xrdp.service - xrdp daemon Loaded: loaded (/lib/systemd/system/xrdp.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2021-01-19 15:21:51 EET; 5min ago Docs: man:xrdp(8) man:xrdp.ini(5) Main PID: 188751 (xrdp) Tasks: 1 (limit: 38009) Memory: 1.9M CGroup: /system.slice/xrdp.service └─188751 /usr/sbin/xrdp Sep 09 09:09:53 andrei xrdp[188750]: (188750)(139708266788672)[INFO ] address [0.0.0.0] port [3389] mode 1 Sep 09 09:09:53 andrei xrdp[188750]: (188750)(139708266788672)[INFO ] listening to port 3389 on 0.0.0.0 Sep 09 09:09:53 andrei xrdp[188750]: (188750)(139708266788672)[INFO ] xrdp_listen_pp done Sep 09 09:09:53 andrei xrdp[188750]: (188750)(139708266788672)[DEBUG] Closed socket 7 (AF_INET6 :: port 3389) Sep 09 09:09:53 andrei systemd[1]: xrdp.service: Can't open PID file /run/xrdp/xrdp.pid (yet?) after start: Operation > Sep 09 09:09:53 andrei systemd[1]: Started xrdp daemon. Sep 09 09:09:53 andrei xrdp[188751]: (188751)(139708266788672)[INFO ] starting xrdp with pid 188751 Sep 09 09:09:53 andrei xrdp[188751]: (188751)(139708266788672)[INFO ] address [0.0.0.0] port [3389] mode 1 Sep 09 09:09:53 andrei xrdp[188751]: (188751)(139708266788672)[INFO ] listening to port 3389 on 0.0.0.0 Sep 09 09:09:53 andrei xrdp[188751]: (188751)(139708266788672)[INFO ] xrdp_listen_pp done
Перезапуск xrdp
sudo systemctl restart xrdp
Клиенты
Обычно мне хватает xfreerdp но при соединении через посредника на нестандартном порту добиться результата смог только с Remmina.
Remmina
Подробнее про установку, настройку и работу с Remmina читайте здесь
xfreerdp
xfreerdp /v:192.168.56.113 /u:"andrei" /p:"password" /port:"3389"
Открыть порт
Чтобы открыть стандартный RDP порт 3389 выполните следующие действия.
sudo firewall-cmd --permanent --zone=public --add-port=3389/tcp
success
sudo firewall-cmd --reload
success
Изменить порт
Чтобы изменить порт, на котором XRDP ждёт подключения со стандартного 3389 на, например, 3999 выполните следующие действия.
sudo firewall-cmd --permanent --zone=public --add-port=3999/tcp
sudo systemctl stop xrdp
sudo vi /etc/xrdp/xrdp.ini
#port=3389 port=3999
sudo systemctl start xrdp
sudo systemctl status -l xrdp
● xrdp.service - xrdp daemon Loaded: loaded (/usr/lib/systemd/system/xrdp.service; enabled; vendor preset: disabled) Active: active (running) since Mon 2024-Sep-09 09:09:53 EET; 15s ago Docs: man:xrdp(8) man:xrdp.ini(5) Main PID: 10015 (xrdp) Tasks: 1 CGroup: /system.slice/xrdp.service └─10015 /usr/sbin/xrdp --nodaemon Sep 09 09:09:53 host113.andrei.com systemd[1]: Started xrdp daemon. Sep 09 09:09:53 host113.andrei.com xrdp[10015]: [INFO ] starting xrdp with pid 10015 Sep 09 09:09:53 host113.andrei.com xrdp[10015]: [INFO ] address [0.0.0.0] port [3999] mode 1 Sep 09 09:09:53 host113.andrei.com xrdp[10015]: [INFO ] listening to port 3999 on 0.0.0.0 Sep 09 09:09:53 host113.andrei.com xrdp[10015]: [INFO ] xrdp_listen_pp done
РЕКЛАМА хостинга Beget, которым я пользуюсь более десяти лет
Конец рекламы хостинга Beget, который я всем рекомендую.
Решение проблем
Если вы сделали всё по инструкции, но подключение не работает, а когда проверяете статус получаете что-то похожее
● xrdp.service - xrdp daemon Loaded: loaded (/usr/lib/systemd/system/xrdp.service; disabled; vendor preset: disabled) Active: failed (Result: exit-code) since Sun 2021-04-18 22:39:44 EEST; 12h ago Docs: man:xrdp(8) man:xrdp.ini(5) Process: 11923 ExecStart=/usr/sbin/xrdp $XRDP_OPTIONS --nodaemon (code=exited, status=1/FAILURE) Main PID: 11923 (code=exited, status=1/FAILURE) Sep 09 09:09:53 localhost.localdomain xrdp[11923]: [ERROR] trans_listen_addre... Sep 09 09:09:53 localhost.localdomain xrdp[11923]: [ERROR] xrdp_listen_main_l... Sep 09 09:09:53 localhost.localdomain xrdp[11923]: logging configuration: Sep 09 09:09:53 localhost.localdomain xrdp[11923]: LogFile: /var/log/xr... Sep 09 09:09:53 localhost.localdomain xrdp[11923]: LogLevel: [INFO ] Sep 09 09:09:53 localhost.localdomain xrdp[11923]: ConsoleLevel: <disabled> Sep 09 09:09:53 localhost.localdomain xrdp[11923]: SyslogLevel: [INFO ] Sep 09 09:09:53 localhost.localdomain systemd[1]: xrdp.service: main process ... Sep 09 09:09:53 localhost.localdomain systemd[1]: Unit xrdp.service entered f... Sep 09 09:09:53 localhost.localdomain systemd[1]: xrdp.service failed. Hint: Some lines were ellipsized, use -l to show in full.
● xrdp.service - xrdp daemon Loaded: loaded (/usr/lib/systemd/system/xrdp.service; enabled; vendor preset: disabled) Active: failed (Result: exit-code) since Thu 2021-04-15 12:06:37 EEST; 2min 57s ago Docs: man:xrdp(8) man:xrdp.ini(5) Main PID: 5017 (code=exited, status=1/FAILURE) Sep 09 09:09:53 localhost.localdomain xrdp[5017]: [ERROR] trans_listen_address failed Sep 09 09:09:53 localhost.localdomain xrdp[5017]: [ERROR] xrdp_listen_main_loop: xrdp_listen_get_port failed Sep 09 09:09:53 localhost.localdomain xrdp[5017]: logging configuration: Sep 09 09:09:53 localhost.localdomain xrdp[5017]: LogFile: /var/log/xrdp.log Sep 09 09:09:53 localhost.localdomain xrdp[5017]: LogLevel: [INFO ] Sep 09 09:09:53 localhost.localdomain xrdp[5017]: ConsoleLevel: <disabled> Sep 09 09:09:53 localhost.localdomain xrdp[5017]: SyslogLevel: [INFO ] Sep 09 09:09:53 localhost.localdomain systemd[1]: xrdp.service: main process exited, code=exited, status=1/FAILURE Sep 09 09:09:53 localhost.localdomain systemd[1]: Unit xrdp.service entered failed state. Sep 09 09:09:53 localhost.localdomain systemd[1]: xrdp.service failed.
Если вы этого ещё не сделали - попробуйте установить tigervnc-server (В соединении скорее всего участвует VNC порт).
sudo yum -y install tigervnc-server
Если сразу не помогло - перезагрузите всё что сможете. Возможно, стоить проверить обновление xrdp
Если в ошибке присутствует строка похожая на g_tcp_bind(11, 3389) - возможно проблема в порте.
Попробуйте освободить порт, либо
используйте другой порт для XRDP
● xrdp.service - xrdp daemon Loaded: loaded (/usr/lib/systemd/system/xrdp.service; disabled; vendor preset: disabled) Active: failed (Result: exit-code) since Wed 2022-08-24 09:36:08 EEST; 1s ago Docs: man:xrdp(8) man:xrdp.ini(5) Process: 21829 ExecStart=/usr/sbin/xrdp $XRDP_OPTIONS --nodaemon (code=exited, status=1/FAILURE) Main PID: 21829 (code=exited, status=1/FAILURE) Sep 09 09:09:53 localhost.localdomain systemd[1]: Started xrdp daemon. Sep 09 09:09:53 localhost.localdomain xrdp[21829]: [INFO ] starting xrdp with pid 21829 Sep 09 09:09:53 localhost.localdomain xrdp[21829]: [INFO ] address [0.0.0.0] port [3389] mode 1 Sep 09 09:09:53 localhost.localdomain xrdp[21829]: [INFO ] listening to port 3389 on 0.0.0.0 Sep 09 09:09:53 localhost.localdomain xrdp[21829]: [ERROR] g_tcp_bind(11, 3389) failed bind IPv6 (errno=98) and IPv4 (errno=22). Sep 09 09:09:53 localhost.localdomain xrdp[21829]: [ERROR] trans_listen_address failed Sep 09 09:09:53 localhost.localdomain xrdp[21829]: [ERROR] xrdp_listen_main_loop: xrdp_listen_get_port failed Sep 09 09:09:53 localhost.localdomain systemd[1]: xrdp.service: main process exited, code=exited, status=1/FAILURE Sep 09 09:09:53 localhost.localdomain systemd[1]: Unit xrdp.service entered failed state. Sep 09 09:09:53 localhost.localdomain systemd[1]: xrdp.service failed.
GNUmakefile
Пример файла для установки с помощью make
.PHONY: xrdp-ce7 xrdp-ce7: sudo yum -y update sudo yum -y upgrade sudo yum -y install epel-release sudo yum -y update sudo yum -y install xrdp tigervnc-server sudo systemctl enable xrdp sudo systemctl start xrdp
CentOS | |
X Window System CentOS | |
XRDP: Удалённый рабочий стол | |
VNC: Удалённый рабочий стол | |
keymap: Клавиатура | |
startwm |
РЕКЛАМА от Яндекса. Может быть недоступна в вашем регионе
Конец рекламы от Яндекса. Если в блоке пусто считайте это рекламой моей телеги