Заметки сисадмина
Назад

Установка FreeRDP в Ubuntu/Debian

Опубликовано: 24.11.2021
Время на чтение: 29 мин
0
7705

FreeRDP - это бесплатный клиент удаленного рабочего стола по протоколу RDP, выпущенный под лицензией Apache. В данной заметке рассмотрим варианты установки и настройки для работы с Winsows Server.

1. Установка из репозитория Ubuntu/FreeRDP

В самом простом случае установка из стандартного репозитория Ubuntu выглядит так:

apt install freerdp2-x11

Будет установлена версия 2.2.0 (n/a). Так же можно установить FreeRDP последней версии подключив репозиторий freerdp-nightly следующим образом:

sh -c 'echo "deb http://pub.freerdp.com/repositories/deb/$(lsb_release -cs)/ freerdp-nightly main" >> /etc/apt/sources.list'
wget -O - http://pub.freerdp.com/repositories/ADD6BF6D97CE5D8D.asc | sudo apt-key add -

И выполнить установку:

apt update 
apt install --yes freerdp-nightly

Будет установлена последняя актуальная на момент выхода статьи версия: 3.0.0-dev.

Запускать отсюда: /opt/freerdp-nightly/bin/./xfreerdp

Что бы каждый раз не набирать полный путь к исполняемому файлу создадим smlink:

ln -s /opt/freerdp-nightly/bin/xfreerdp /usr/bin/xfreerdp

2. Установка из исходников

Установка из исходников позволяет гибко добавлять или отключать определенные функции/фичи. Установим базовые компоненты/зависимости необходимые для успешной компиляции:

apt install cmake gcc g++ git ninja-build build-essential debhelper cdbs dpkg-dev autotools-dev pkg-config xmlto 
libssl-dev docbook-xsl xsltproc libxkbfile-dev libx11-dev libwayland-dev libxrandr-dev libxi-dev libxrender-dev libxext-dev 
libxinerama-dev libxfixes-dev libxcursor-dev libxv-dev libxdamage-dev libxtst-dev libcups2-dev libpcsclite-dev libasound2-dev 
libpulse-dev libjpeg-dev libgsm1-dev libusb-1.0-0-dev libudev-dev libdbus-glib-1-dev uuid-dev libxml2-dev libgstreamer1.0-dev 
libgstreamer-plugins-base1.0-dev libfaad-dev libfaac-dev ffmpeg libxkbcommon-dev zlib1g-dev libavcall1 libavcodec-dev libsystemd-dev

Создадим директорию где-нибудь в корне.  Склонируем репозиторий с исходниками FreeRDP к себе в каталог:

mkdir distr
git clone https://github.com/FreeRDP/FreeRDP.git
cd FreeRDP

Cгенерируем файлы управления сборкой с указанием необходимых фич при помощи утилиты cmake:

cmake -GNinja -DCHANNEL_URBDRC=ON -DWITH_DSP_FFMPEG=ON -DWITH_CUPS=ON -DWITH_PULSE=ON -DWITH_FAAC=ON -DWITH_FAAD2=ON -DWITH_GSM=ON .

В случае каких либо ошибок или нехватки компонентов, необходимо их установить, затем удалить фаил кэша: CMakeCache.txt и запустить cmake повторно. После чего запустить сборку:

cmake --build .

И затем установку:

cmake --build . --target install

На выходе получим xfreerdp последней версии, исполняемый файл которого будет находится в /usr/local/bin. Создадим smlink для запуска одной командой:

ln -s /usr/local/bin/xfreerdp xfreerdp

Для удаления FreeRDP используем следующую команду:

xargs rm -rf < install_manifest.txt

где, install_manifest.txt - содержит информацию о всех файлах FreeRDP установленных в систему. Будет создан сразу после установки.

3. Запуск и варианты использования

В самом простом случае для подключения к windows-серверу (Win7/2008R2 и выше) используем следующую команду:

xfreerdp /u:user /d:domain /v:server /p:PassWd /f /kbd-type:en-us /bpp:32 /network:auto /sec:tls /cert-ignore

где,

/u: имя пользователя зарегистрированного на сервере терминалов с правами на удалённый доступ

/d: имя домена или имя сервера терминалов

/v: имя сервера терминалов или его IP адрес

/p: пароль пользователя зарегистрированного на сервере терминалов (Если не указывать, пароль запрашиваться)

/f: полноэкранный режим удаленного рабочего стола. Комбинация <Ctrl>+<Alt>+<Enter>позволяет приключаться между оконным и полноэкранным режимами.

/kbd-type: раскладка клавиатуры. Вывести список всех раскладок можно при помощи опции /kbd-list

/bpp: глубина цвета (32, 16, 8)

/network: тип сетевого подключения (modem, broadband [-low|-high], wan, lan, auto)

/sec: принудительно использовать протокол безопасности (rdp | tls | nla | ext)

/cert-ignore: игнорировать сертификат сервера терминалов

Для подключения к серверу через шлюз удаленных рабочих столов используем дополнительные ключи:

xfreerdp /u:user /d:domain /v:server /p:PassWd /f /g:gate:mydomain.ru:23400 /gu:GateUser /gd:GateDomainUser /gp:GateUserPassword /kbd-type:en-us /bpp:32 /network:auto /sec:tls /cert-ignore

/g: указать шлюз удаленных рабочих столов + порт (по умолчанию если не настроен то 443, тогда можно не указывать), например: gate.mydomain.ru:23400.

/gu: указать пользователя имеющего права авторизоваться через шлюз удаленных рабочих столов.

/gd: указать домен/имя компьютера для авторизации пользователя через шлюз удаленных рабочих столов.

/gp: указать пароль пользователя для авторизации через шлюз удаленных рабочих столов.

Ознакомится с полным перечнем всевозможных ключей можно на сайте  проекта FreeRDP или в руководстве пользователя доступном по команде: xfreerdp /help

Проверяем/тестируем на Windows Server 2012R2 и через какое то время в процессе работы видим самопроизвольные вылетания/разрывы сессии.

Включаем логирование добавив опцию /log:level, и следующую запись перед командной xfreerdp /u...

WLOG_APPENDER=file WLOG_FILEAPPENDER_OUTPUT_FILE_NAME=freerdp.log WLOG_FILEAPPENDER_OUTPUT_FILE_PATH=/tmp

Итого, команда примет следующий вид:

WLOG_APPENDER=file WLOG_FILEAPPENDER_OUTPUT_FILE_NAME=freerdp.log WLOG_FILEAPPENDER_OUTPUT_FILE_PATH=/tmp xfreerdp /u:user /d:domain /v:server /f /kbd-type:en-us /bpp:32 /network:broadband /sec:tls /cert-ignore /log:level:error

где, /log-level может принимать следующие значения: FATAL, ERROR, WARN, INFO, DEBUG, TRACE.

Для того что бы запускать данную конструкцию при помощи ярлыка/кнопки запуска с рабочего стола пользователя, добавим код в отдельный .sh файл и разместим его например в корне диска в каталоге /freerdp.

mkdir freerdp
cd freerdp
nano rdp.sh
chmod +x rdp.sh

После чего запускаем фаил и ждем когда наш лог-фаил появится в каталоге /tmp, где будет ошибка следующего содержания:

[08:12:55:200] [48815:48816] [ERROR][com.freerdp.core] - rdp_set_error_info:freerdp_set_last_error_ex ERRINFO_GRAPHICS_SUBSYSTEM_FAILED [0x0001112F]
[08:12:55:201] [48815:48816] [ERROR][com.freerdp.core.transport] - BIO_read returned a system error 104: Соединение разорвано другой стороной

или такого:

[16:06:03:762] [11388:11389] [ERROR][com.freerdp.core.transport] - BIO_should_retry returned a system error 104: Соединение разорвано другой стороной
[16:06:03:762] [11388:11389] [ERROR][com.freerdp.core] - transport_default_write:freerdp_set_last_error_ex ERRCONNECT_CONNECT_TRANSPORT_FAILED [0x0002000D]
[16:06:03:763] [11388:11389] [ERROR][com.freerdp.core.transport] - transport_check_fds: transport->ReceiveCallback() - -1

Согласно рекомендациям разработчика надо изменить "тип сетевого подключения" на auto и добавить поддержку кодеков RemoteFX (/rfx)  и h264 AVC444 (/gfx:avc444)

WLOG_APPENDER=file WLOG_FILEAPPENDER_OUTPUT_FILE_NAME=freerdp.log WLOG_FILEAPPENDER_OUTPUT_FILE_PATH=/tmp xfreerdp /u: /d:pkm /v:Server /kbd-type:en-us /f /bpp:16 /rfx /network:auto /sec:tls /cert-ignore /log-level:error

К слову сказать, для устранения данной ошибки достаточно добавить ключ /network:auto. RemoteFX - будет работать только если данный протокол включен на сервере. AVC444 - работает начиная с Windows Server 2016 и RDP 10-й версии.

4. Известные проблемы и их решения

// license connection sequence aborted или дословно Последовательность подключения лицензии прервана. Вполне возможно что ошибка в истекшем сроке действия ранее полученной временной лицензии, наподобие того как это бывает в Windows. Подробнее.

[19:52:42:854] [1540:1541] [ERROR][com.freerdp.core.connection] - license connection sequence aborted

Достаточно грохнуть каталог freerdp находящийся в /home/user/.config/ и при следующем запуске проблема не возникнет.

Поделиться
Похожие записи