DOI :: Установка сервера удаленного рабочего стола XRDP в Linux и решение проблем с подключением | Installing the XRDP Remote Desktop Server on Linux and solving connection problems
Установка сервера удаленного рабочего стола XRDP в Linux и решение проблем с подключением
В статье рассказано о том, как настроить подключение к Linux через протокол RDP (Remote Desktop Protocol).
RDP - это наиболее распространённый протокол для удаленной работы (или администрирования ПК), при котором экран компьютера отображатеся на удалённом ПК, управление с мыши и клавиатуры. RDP может использоваться между ПК с различными ОС - как Windows, так и Linux.
Следующий гайд был написан по итогам успешной установки и запуска RDP сервера под Linux Runtu (Description: Ubuntu 20.04.3 LTS) и Linux Mint "Uma" Description: Linux Mint 20.2).
Установка и настройка RDP в Linux
-
Если до этого предпринимались неудачные попытки настройки xrdp, прежде всего нужно удалить пакеты xrdp и xorgrdp и их настройки, чтобы выполнить установку с чистого листа.
sudo apt-get purge xrdp xorgxrdp
-
Вначале нужно выполнить обновление версий пакетов:
sudo apt-get update & sudo apt-get upgrade & sudo apt-get dist-upgrade
-
Если операционная система Ubuntu Linux 16.04 или 18.04, либо 20.04 или 21.04, для установки xrdp советую воспользоваться готовым скриптом с сайта
https://c-nergy.be/downloads/xRDP/xrdp-installer-1.4.zip - скачать архив и извлечь скрипт.
Документация по программе "xrdp-installer" находится по адресу https://c-nergy.be/blog/?p=17810, а также в самой программе выводится краткая справка о возможных параметрах её вызова, при запуске sh-файла с ключом --help:
bash xrdp-installer-1.4.sh --help
Для запуска вводить команду sudo не нужно, когда надо она запросит пароль su. Запуск, например, так:
chmod +x xrdp-installer-1.4.sh
./xrdp-installer-1.4.sh
И затем перейти к разделам ОКОНЧАТЕЛЬНАЯ НАСТРОЙКА XRDP и "Диагностика".
Если операционная система не принадлежит к перечисленным, путь установки длиннее.
sudo apt-get install x-window-system xserver-xorg xserver-xorg-core
sudo apt-get install xserver-xorg-legacy
Выполняем реконфигурацию пакета
sudo apt-get install xserver-xorg-legacy
sudo dpkg-reconfigure xserver-xorg-legacy
окно для конфигурирования запуска Xorg:
в котором я ввбрал последний пункт, дающий наибольшие права - "Кто угодно".
Данной командой производится запись в файл cat
/etc/X11/Xwrapper.config:allowed_users=anybody
Установка пакетов, необходимых для запуска xrdp:
sudo apt-get install libx11-dev libxfixes-dev libssl-dev libpam0g-dev libtool libjpeg-dev flex bison gettext autoconf libxml-parser-perl libfuse-dev xsltproc libxrandr-dev python3-libxml2 nasm fuse pkg-config git intltool checkinstall
Установка двух основных пакетов XRDP:
sudo apt-get install xrdp xorgxrdp xserver-xorg-input-all
Можно заметить, что программа установки создаст RSA ключ.
Чтобы операционная система могла прочитать этот ключ, нужно добавить
пользователя xrdp
в группу ssl-cert
:
sudo adduser xrdp ssl-cert
Затем, нужно установить полностью графическую подсистему MESA и
драйверы видеокарты. Зачем?
Дело
в том, что имеет место цепочка: RDP client -> сеть -> Xrdp server -> Xsession -> Xorg
-> MESA -> OpenGL Driver -> видеокарта
При отсутствии возможности
запуска графического режима, RDP клиент также "отвалится" сразу после
входа.
sudo apt-get install libgl1-mesa-dri libglew1.5-dev libglew-dev libgles2-mesa-dev libglm-dev mesa-utils-extra mesa-common-dev freeglut3 freeglut3-dev
Наконец, видеокарта должна поддерживать режим OpenGL версии 2.1 и выше и иметь установленный драйвер для Linux.
- Если старый компьютер - на чипсетах Interl 945 (под общим названием i915) - нужно установить модифицированный, сторонний драйвер, т.к. на штатных драйверах по умолчанию включается режим OpenGL 1.4, тогда как нужен 2.1. Иначе будут ошибки (см. ниже раздел "Ошибки")
Если следующая команда выводит информацию, что OpenGL высокой версии, ничего делать не нужно:
glxinfo | grep OpenGL
Пример хорошая версия драйвера - равна 2.1 (обращаем внимание на
строчку OpenGL version string:OpenGL vendor string: Mesa Project
OpenGL renderer string: i915 (chipset: 945G)
OpenGL shading language version string: 1.20
OpenGL extensions:
OpenGL ES profile version string: OpenGL ES 2.0 Mesa 21.3.0-devel
(git-dfef775 2021-09-02 focal-oibaf-ppa)
OpenGL ES profile shading language version string: OpenGL ES GLSL
ES 1.0.16
OpenGL ES profile extensions:
Если версия 1.4 старая, которая не годится для XRDP, вывод команды glxinfo
следующий:OpenGL vendor string: Intel Open Source Technology Center
OpenGL renderer string: Mesa DRI Intel(R) 945G
OpenGL version string: 1.4 Mesa 21.0.3OpenGL extensions:
OpenGL ES profile version string: OpenGL ES 2.0 Mesa 21.0.3
OpenGL ES profile shading language version string: OpenGL ES GLSL
ES 1.0.16
OpenGL ES profile extensions:
Старая версия драйвера с поддержкой OpenGL 1.4 (установленная по умолчанию из пакета "xserver-xorg-video-intel"). данная версия OpenGL 1.4 не подходит.
Устанавливаем новую версию драйвера (ТОЛЬКО ДЛЯ СТАРЫХ ЧИПСЕТОВ ВСТРОЕННОЙ ГРАФИКИ i915 - i925 - i945)
sudo add-apt-repository ppa:oibaf/graphics-drivers && sudo apt-get update && sudo apt-get upgrade && sudo apt-get dist-upgrade && sudo reboot
Данная команда обновит пакеты графического драйвера для встроенной графики Intel и выполнит перезагрузку.
P.S. Если потребуется в-дальнейшем удаление PPA-репозитория, например, после установки новой видеокарты, команда для удаления: sudo ppa-purge ppa:oibaf/graphics-drivers.
-
Разрешение подключения к X-серверу "для всех" - дано ранее командой sudo dpkg-reconfigure xserver-xorg-legacy
Конфигурация записана в файлsudo ls -l /etc/X11/Xwrapper.config
Если необходимо, можно посмотреть его содержимое или отредактировать
sudo nano /etc/X11/Xwrapper.config
-
Примечание console - Xorg доступен только для пользователей из
консоли, anybody для всех. По умолчанию указано console.
Подробнее см командуman Xwrapper.config
.
- Настройка графики OpenGL (обязательно лишь для ПК старых чипсетов со встроенной графикой i915):
Вывод на экран модели графического адаптера:
lspci | grep VGA
Если графический адаптер - встроенная графика Intel чипсета 915 или 82945G переходим в каталог
cd /usr/share/X11/xorg.conf.d/
создаём файл 20-intel.conf
:
sudo nano 20-intel.conf
добаляем в него текст:Section "Device"
Identifier "Intel
Graphics"
Driver
"intel"
Option "TearFree"
"true"
Option
"AccelMethod" "SNA"
Option
"BackingStore" "true"
Option "DRI"
"3"
EndSection
Вариант для старых ПК: в строке "AccelMethod" вместо стандартного метода ускорения графики "SNA" указать "uxa".
Лучше использовать "SNA" - более современный метод встроенной графики x86. Где uxa - предыдущая архитектура.
Сохраняем и выходим Ctrl+O, Ctrl+X.
- Редактирование конфигурационного файла XRDP:
sudo nano /etc/xrdp/xrdp.ini
в середину файла после строки "background" добавить адрес по
умолчанию для XRDP.address=address=0.0.0.0
Перезапуск сервера:
sudo /etc/init.d/xrdp stop
sudo /etc/init.d/xrdp start
ОКОНЧАТЕЛЬНАЯ НАСТРОЙКА XRDP
-
Добавляем пользователя xrdp в группу tty и даём права на последовательный порт (для решения проблемы начала сессии Xorg, что 'tty0 access denied')
sudo usermod -a -G tty xrdp
sudo chmod g+r /dev/tty0 -
Разрешаем запуск сервиса "xrdp"
sudo systemctl start xrdp
sudo systemctl enable xrdp -
ВАЖНО: Копируем файл скрипт для запуска сессии и исправляем его
cp /etc/X11/xinit/xinitrc ~/.xinitrc
Узнаём тип установленной оболочки рабочего стола:
echo $XDG_CURRENT_DESKTOP
Если вывод команды пустой, попробовать
cat /etc/X11/default-display-manager
Редактируем файл ~/.xinitrc
для запуска сеанса (сессии):
nano ~/.xinitrc
комментируем или удаляем строчку /etc/X11/Xsession
, вместо неё пишем:
exec startlxde
или
exec openbox-session
- для ОС Runtu
или
exec startxfce4
для Linux Mint с оболочкой рабочего стола XFCE
или
exec startlxqt
для Lubuntu или Linux Mint с оболочкой рабочего стола LXQT (если такой вывод у команды
echo $XDG_CURRENT_DESKTOP).
Таким образом, файл .xinitrc в домашнем каталоге пользователя, запускаемый во время старта сеанса XRDP, принял следующий компактный вид:
#!/bin/sh
exec startlxqt
Примечание от 09.09.2021: В этот файл можно добавить запуск любых нужных программ, например, запуск сервера звука pulseaudio и загрузку и переключение национальной раскладки клавиатуры. Тогда файл .xinitrc примет вид:
#!/bin/sh
pulseaudio &
setxkbmap -layout 'us,ru' -option
'grp:ctrl_shift_toggle,grp_led:scroll' &
exec startlxqt
Содержимое файла ~/.xinitrc, если серверная ОС - Linux Mint с оболочкой XFCE:
#!/bin/sh
pulseaudio &
setxkbmap -layout 'us,ru' -option
'grp:alt_shift_toggle,grp_led:scroll' &
exec startxfce4
Когда рабочий стол сервера - LXQT, мой файл ~/.xinitrc следующий:#!/bin/sh
pulseaudio &
setxkbmap -layout 'us,ru' -option
'grp:alt_shift_toggle,grp_led:scroll' &
exec startlxqt
И для OpenBox (Runtu Linux) работающий вариант файла ~/.xinitrc
следующий:#!/bin/sh
pulseaudio &
setxkbmap -layout 'us,ru' -option
'grp:ctrl_shift_toggle,grp_led:scroll' &
exec openbox-session
exec startlxde
Диагностика
Перезагружаем ПК, который выполняет роль сервера.
Проверяем с него же, что сервер Xorg запускается без ошибок:
sudo Xorg :10 -auth .Xauthority -config xrdp/xorg.conf -noreset -nolisten tcp
На этом этапе экран может погаснуть, если вы проверяете XRDP с того
же ПК, на котором запущена начальная сессия Xorg. Нужно
нажать Ctrl+Alt+F1 ввести имя и пароль, при помощи команды ps -aux | grep xrdp
найти номер процесса "sudo xrdp
" и завершить его командой "sudo kill <номер процесса>
".
В текстовом выводе результата этой команды будет содержаться причина ошибки.
Если же сообщение "(EE) Cannot establish any listening sockets - Make
sure an X server isn't already running(EE)",
нужно перезагрузить ПК и повторить диагностику.
Второй вариант проверки - перед первым подключением к серверу XRDP, завершаем текущий сеанс "Пуск" - "Выйти" - "Выйти из системы". Так как клиент RDP не сможет создать второй сеанс такого же пользователя (с ошибкой в файле ~/.xorgxrdp.10.log: "(EE) Caught signal 11 (Segmentation fault). Server aborting").
Либо, нужно создать второго пользователя для тестирования подключения к xRDP, которым будем подключаться по протоколу RDP:
sudo useradd -m ivanov-rdp
passwd ivanov-rdp
Ошибки xRDP сервера в Linux и их решения
Настройка брандмауэра
При невозможности подключения по протоколу RDP к серверу, прежде всего проверить открытие порта на FireWall:
sudo apt install nmap
sudo nmap 192.168.55.100 -p 3389
где вместо 192.168.55.100 укажите IP-адрес сервера в локальной
сети.
Не забываем открыть
локальный порт 3389 на бранмауэре:
sudo ufw allow 3389
Если порт открыт, то вывод:
PORT
STATE SERVICE
3389/tcp open
ms-wbt-server
Проблема "При подключении с клиента по RDP виден чёрный пустой экран"
На сервере не установлен пакет xorgxrdp
- программная "прослойка" между xorg и rdp сервером, который
отображает графику - Рабочий стол, указатель мыши и иконки.
Решение - установить на сервер пакет xorgxrdp
:
sudo apt-get install xorgxrdp
sudo service xrdp restart
Примечание: Пакет "xorgxrdp - Remote Desktop Protocol (RDP) modules for X.org" входит в большинство дистрибутивов Debian, а также Ubuntu 18.04 "bionic", 20.04 LTS "focal", 21.04 "hirsute", 21.10 "impish", 22.04 LTS "jammy" (вышла 21.04.2022), и производных ОС на основе DEB-пакетной базы Ubuntu (таких как Runtu, Lubuntu, Xubuntu, Kubuntu и др.), а также дистрибутивы на основе RPM: Fedora, Arch и др.. Поэтому данная инструкция должна работать с множеством версий Linux.
Remmina RDP Client - подключение к серверу
sudo apt-get install remmina remmina-plugin-rdp remmina-plugin-secret
sudo reboot
remmina
Добавляем подключение - тип RDP.
Если VPN не используется, то в IP адрес вводим "белый" IP-адрес
домашнего роутера.
При работе
через VPN IP адрес относится к внутренней (локальной, домашней)
сети.
Имя и пароль - такие же как
при входе "с клавиатуры" на сервере.
Нижние кнопки окна Remmina на нетбуках с разрешением экрана 1024x600
пикселей могут быть обрезаны и видны частично.
"Отменить" - "Сохранить как значения по умолчанию" - "Сохранить" -
"Подключиться" - "Сохранить и подключиться"
Нажимаем крайнюю правую кнопку "Сохранить и подключиться".
Различные проблемы
Журналы ошибок в системной каталоге /var/log/:
- xrdp.log
- xrdp-sesman.log
- Xorg.0.log, Xorg.10.log
Журналы ошибок в каталоге пользователя ~:
- ~/.xorgxrdp.10.log
Просмотреть их можно командами:
sudo cat /var/log/xrdp.log
sudo cat /var/log/xrdp-sesman.log
sudo cat /var/log/Xorg.0.log
sudo cat /var/log/Xorg.10.log
sudo cat ~/.xorgxrdp.log
Если при подключении с ПК под управлением Windows к ПК под
управлением Linux после ввода имени пользователя пароля виден
сине-зелёный однотонный фон без текста и иконок,
или в файле XRDP.LOG многочисленные ошибки, значит подключение
произошло, но не запустилась графика Xorg - скорее всего из-за старой
версии OpenGL, либо прав, см. выше.
Пример ошибки на стороне клиента при попытке подключения с помощью
программы MSTSC.EXE:
Сообщения об ошибка в журнале XRDP.LOG на стороне сервера:
или аналогичная [DEBUG] Closed socket 17 (AF_UNIX)
Решение - диагностика командой с рабочего стола машины-сервера:
sudo Xorg :10 -auth .Xauthority -config xrdp/xorg.conf -noreset -nolisten tcp
Если при подключении с ПК под управлением Windows виден на мгновение чёрный экран, который тут же закрывается, один из вариантов:
- неправильной имя/пароль пользователя
- неправильный скрипт ~/.xinitrc (не запустилась сессия рабочего стола). Проверьте файл ~/.xinitrc на наличие команды exec <имя оболочки>.
- пользователь, которым вы подключаетесь к ПК удалённо, имеет открытую сессию в операционной системе локально (использует компьютер в данный момент).
Безопасность
Теперь любой ПК в локальной сети сможет подключаться к вашему компьютеру по протоколу RDP. Следует установить для учётной записи пользователя сложный пароль. Если подключение к ПК из Интернет - можно дополнительно использовать VPN с шифрованием трафика.
Коментарі
Дописати коментар
Олег Мічман в X: «Donations and support for media resources, bloggers, projects, and individuals. https://t.co/HPKsNRd4Uo https://t.co/R6NXVPK62M» / X
https://twitter.com/olukawy/status/1703876551505309973