Provide feedback
Saved searches
Use saved searches to filter your results more quickly
Sign up
Время на прочтение3 мин
Количество просмотров426K
Не секрет, что в современном мире без продуктов Microsoft практически не обойтись. Однако во многих случаях получается так, что гораздо эффективней использовать на рабочих компьютерах системы на базе GNU/Linux, а не Windows. Это значительно упрощает администрирование и сокращает расходы, предоставляя при этом пользователям гораздо больше легкодоступного функционала. Но что делать с теми приложениями, которые работают только под Windows и которым нет подходящего аналога в мире Linux? Поскольку обычно таких приложений единицы (иначе просто нету смысла ставить Linux на рабочий компьютер), то разумным выбором может стать использование терминальных серверов, работающих под серверными ОС от Microsoft. Кроме того, Linux лучше всего подходит для любых тонких клиентов, поскольку адекватных версий Windows для них просто не существует.
В любом случае необходимо уметь подключаться к терминальным серверам Windows. Для этого в MS был разработан свой протокол удалённого рабочего стола — RDP. Однако до недавнего времени для Linux существовал единственный открытый клиент для работы с этим протоколом — rdesktop. К сожалению, его развитие давно остановилось, и он испытывает огромные трудности при взаимодействии с современными версиями Windows.
Но недавно тихо и незаметно проект rdesktop был форкнут, в результате чего на свет появился новый открытый RDP клиент — FreeRDP. Первый же релиз этой программы разом исправил большинство известных проблем rdesktop, и проект продолжает активно развиваться. Почему-то появление столь полезного приложение обошли вниманием, поэтому я и решил опубликовать этот пост, чтобы хоть как-то исправить эту ситуацию и рассказать всем о существовании нормального RDP клиента для Linux. Под катом — описание возможностей FreeRDP и немного про отличную графическую оболочку Remmina для него.
FreeRDP
Официальный сайт проекта — www.freerdp.com
Там же можно найти описание возможностей текущей версии и планы на будущее. Основные отличия от rdesktop:
- Произведён значительный рефакторинг кода. Пользовательский интерфейс полностью переписан и отделён от основной библиотеки, реализована система плагинов.
- Код максимально приведён в соответствие со спецификацией RDP от Microsoft и подробно комментирован.
- Переписана работа с клавиатурой — больше никаких проблем с раскладками.
- Переписана работа с принтерами, звуком и другими пробрасываемыми устройствами и сервисами.
- Исправлены проблемы с указателем и лицензиями при подключении к серверу терминалов Windows 2008.
- Реализовано кеширование графики (bitmap caching), что позволяет значительно повысить производительность.
Поломанные и убранные возможность rdesktop:
- В данный момент не реализована поддержка проброса COM портов и поддержка смарт-карт.
- Убрана поддержка режима SeamlessRDP в пользу реализации RemoteApp, которой правда тоже пока что нет.
Remmina
Кроме того, один из самых удобных графических менеджеров подключений к удалённым рабочим столам Remmina с версии 0.8 перешёл на использование FreeRDP в качестве RDP клиента.
В версии 0.8 также реализована поддержка .rdp файлов Windows, все протоколы теперь являются отдельными плагинами, добавлена поддержка IPv6 и произведено много мелких улучшений и исправлений ошибок.
Скачать последние версии FreeRDP и Remmina можно с официальных сайтов:
- Официальный сайт Remmina
- Официальный сайт FreeRDP
Для пользователей Ubuntu также доступен PPA репозиторий от разработчика FreeRDP и Remmina с самыми последними версиями этих программ:
- https://launchpad.net/~llyzs/+archive/ppa
Установка freerdp
Варианты использования freerdp для подключения к удаленному рабочему столу
xfreerdp_gui — графическая оболочка для работы с freerdp
RemoteApp — запуск приложений
Окружение
- Версия РЕД ОС: 7.3
- Конфигурация: Рабочая станция, Сервер графический
- Версия ПО: freerdp-3:3.8.0-1, freerdp-gui-3.0-2
freerdp — клиент с открытым кодом для подключения к удаленному рабочему столу по протоколу RDP.
Установка FreeRDP
Для установки пакета выполните команду:
dnf install xfreerdp
Описание часто используемых параметров:
Параметр |
Описание |
/u: | Имя пользователя |
/d: | Имя домена |
/v: | ip-адрес или имя хоста |
/p: | Пароль |
/w: /h: | Значения ширины и высоты |
/smartcard: | Проброс токенов |
/a:printer | Подключение принтера |
/cert:ignore | Игнорировать сертификат |
/app:program: | Запуск удаленного приложения |
/drive: | Подключение каталога |
/sound: | Перенаправление звука |
/microphone: | Активация микрофона |
Полный список параметров представлен на официальной странице проекта FreeRDP.
Варианты использования FreeRDP для подключения к удаленному рабочему столу
Подключение папки
xfreerdp /u:bob /d:win.redos /v:192.168.1.196 /cert:ignore /sec:rdp /p:my_password /drive:folder,/home/bob@win.redos/temp
Подключение принтера
Названия подключенных принтеров можно вывести командой lpstat -a.
xfreerdp /u:bob /d:win.redos /v:192.168.1.196 /cert:ignore /sec:rdp /p:my_password /a:printer,"Kyocera-Kyocera-ECOSYS-P2335dn-(KPDL)"
Подключение токена
С помощью pcsc_scan узнаем имя токена, например, Reader 0: Aladdin R.D. JaCarta 00 00 достаточно указать первое вхождение в имени Aladdin.
xfreerdp /u:user /p:my_password /smartcard:Aladdin /v:192.168.1.196
Перенаправление звука и микрофона в сессию
xfreerdp /v:192.168.1.196 /u:user /p:my_password /sound:sys:oss,dev:1,format:1 /sound:sys:alsa /microphone:sys:oss,dev:1,format:1 /microphone:sys:alsa
где sys:alsa — явное указание какой звуковой поддержки выбрать (alsa/pulse).
Подключение к сессии с явным указанием размеров окна
xfreerdp /v:192.168.1.196 /u:user /p:my_password /w:800 /h:600
Данное явное указание полезно в тех случаях, когда стандартное разрешение не умещается на мониторе.
freerdp-gui — графическая оболочка для работы с freerdp
Утилита freerdp-gui представляет собой графическую оболочку для работы с FreeRDP.
Данная утилита устанавливается следующей командой:
sudo -E dnf install freerdp-gui
Запуск утилиты доступен из «Главного меню» — «Интернет» — «Оболочка для FreeRDP» или из терминала командой:
freerdp-gui
Главное окно утилиты представляет функционал по подключению к xrdp или Windows RDP серверу.
Пользователь может задать для своих целей параметры, представленные на снимке основного окна утилиты.
Для выбора необходимого разрешения экрана и дополнительных параметров предусмотрена вкладка «Экран».
Если требуется работа с пробросом папки или устройств, таких как принтер, токен или звук на серверную часть — для этого предусмотрена вкладка «Устройства».
Для настройки протоколирования событий предусмотрена вкладка «Протоколирование».
RemoteApp — запуск приложений
RemoteApp — позволяет запускать приложения по rdp, как если бы они были запущены на локальном компьютере пользователя, т.е пользователь запускает приложение, которое выполняется на сервере, но внешне выглядит, будто оно запущено на локальном компьютере. Для доступа к приложению, оно предварительно должно быть опубликовано на сервере rdp. В строке подключения укажите приложение, доступное на сервере приложений.
xfreerdp /u:user /d:win.redos /v:192.168.1.196 /cert:ignore /p:my_password /app:program:"||word"
GUI запрос пароля:
xfreerdp /u:user /d:win.redos /v:192.168.1.196 /cert:ignore /p:$(zenity --entry --title="Domain Password" --text="Enter your password:" --hide-text)
В данном примере используется zenity — утилита, которая позволяет выводить на экран диалоговые окна. В данном случае — это диалог ввода пароля.
Эта информация оказалась полезной? ДА НЕТ
Дата последнего изменения: 10.12.2024
Если вы нашли ошибку, пожалуйста, выделите текст и нажмите Ctrl+Enter.
FreeRDP | |
---|---|
|
|
Разработчик(и) | FreeRDP Team |
Первый выпуск | 2009 |
Лицензия | Apache 2.0 |
Репозиторий | freerdp freerdp3 |
Сайт | freerdp.com |
Сервер
FreeRDP — свободная реализация протокола удаленного рабочего стола (RDP), выпущенная под лицензией Apache. Является форком rdesktop.
Функции
Удаленный доступ к рабочему столу
- Удалённый доступ к рабочему столу: позволяет подключаться к удалённым сессиям по протоколу RDP.
- Шифрование соединения: поддержка различных уровней безопасности, включая TLS и NLA (Network Level Authentication).
- Поддержка нескольких пользователей: одновременная работа нескольких удалённых сессий.
- Мультиплатформенность: работает на Linux, Windows, macOS, Android и других системах.
Доступ к удаленным ресурсам
- Передача аудио и видео: поддержка передачи мультимедийного контента с удалённого устройства.
- Поддержка USB и других устройств: проброс устройств (например, принтеров, смарт-карт) с клиента на сервер.
Установка
В ALT Linux есть две версии версии сервера FreeRDP:
- freerdp-server — сервер v2
- freerdp3-server — сервер v3
Но лучше ставить 3-ю версию.
Выберите нужную и установите командой:
# apt-get install freerdp3-server
Примечание: Сервер корректно работает только при запуске от пользователя. Ему нужен запущенный Xorg-сервер. Попытки создать службу от системного пользователя/от root не удаются.
Примечание: FreeRDP (freerdp-shadow-cli) в режиме Shadow позволяет расшаривать только один локальный сеанс.
Техническая часть
Согласно https://miloserdov.org/?p=4508:
Примечание: В статье используется утилита winpr-hash. Она из пакета xfreerdp3.
# apt-get install xfreerdp3
- Для графического подключения используется бинарник freerdp-shadow-cli. Он из пакета freerdp3-server.
# apt-get install freerdp3-server
Разрешить доступ всем (PAM и X11)
Запускаем бинарник как службу:
$ freerdp-shadow-cli -auth
Если включена аутентификация параметром -auth, используется PAM с подсистемой X11. Запуск от имени root не требуется, однако, если сервер запущен от имени пользователя, аутентификацию может пройти только тот пользователь, который запустил freerdp-shadow.
Внимание! Если аутентификация отключена, подключаться могут все.
Разрешить вход ограниченным пользователям
Любая сетевая служба без аутентификации — это катастрофа для безопасности системы. Поэтому рассмотрим, как запустить freerdp-shadow с поддержкой NLA.
В первую очередь для NLA необходимо создать файл, в котором будет строка вида:
USER:::HASH:::
Мы знаем имя пользователя Linux, для вычисления хеша нам нужно выполнить команду вида:
$ winpr-hash -u USER -p PASSWORD
Например, имя пользователя mial , а пароль 2 , тогда команда будет следующей:
$ winpr-hash -u mial -p 2
Рассчитанный хэш: 8f33e2ebe5960b8738d98a80363786b0
Создайте текстовый файл SAM и запишите в него строку
mial:::8f33e2ebe5960b8738d98a80363786b0:::
Теперь запустите freerdp-shadow-cli с двумя опциями:
/sam-file:FILE – указывает местоположение файла NTLM SAM для аутентификации NLA /sec:nla - принудительная аутентификация NLA
Итак, команда такая:
$ freerdp-shadow-cli /sam-file:SAM /sec:nla
Внимание! При создании нескольких пользователей в файле SAM, даже если они соответствуют системным, они оба будут подключаться разными сессиями к одному сеансу активного пользователя сервера с которого запущен freerdp-shadow-cli
Чтобы заработало подключение из Windows (Win7/8.1/10)
Mtsc из Windows подключается к FreeRDP при параметре freerdp-shadow-cli -auth
Управление сервисом (службой)
При установке конфигурационный файл службы располагается в /usr/lib/systemd/user/freerdp-server.service.
$ rpm -ql freerdp3-server |grep .service /usr/lib/systemd/user/freerdp-server.service
Файл службы выглядит так:
[Unit] Description=Remote access to desktop via RDP PartOf=graphical-session.target [Service] EnvironmentFile=-/etc/sysconfig/freerdp-server ExecStart=/usr/bin/freerdp-shadow-cli $FREERDP_SERVER_ARGS [Install] WantedBy=graphical-session.target
Переменные окружения указанные в файле — EnvironmentFile=-/etc/sysconfig/freerdp-server — содержат следующую информацию:
# Block monitors and input devices upon connection #FREERDP_SERVER_ARGS="/on-connect:/etc/freerdp/freerdp-login.sh /on-disconnect:/etc/freerdp/freerdp-logout.sh" FREERDP_SERVER_ARGS=""
Если закомментировать вторую строчку и раскомментировать первую, то сервер будет работать наподобие удаленного рабочего стола в Windows (не терминального сервиса) — при подключении через удаленный рабочий стол сессия будет блокироваться.
Включение автозапуска службы:
$ systemctl enable freerdp-server --user
Запуск службы:
$ systemctl start freerdp-server --user
Остановка службы:
$ systemctl stop freerdp-server --user
Статус службы:
$ systemctl status freerdp-server --user
Клиент
Основные возможности FreeRDP (xfreerdp):
- Поддержка современных версий RDP
- Совместимость с RDP 7.1 и выше (вплоть до RDP 10.x).
- Полная поддержка NLA (Network Level Authentication), необходимого для новых версий Windows Server и Windows 10/11.
- Многофункциональность
- Передача звука: звук с удалённого рабочего стола воспроизводится на клиенте.
- Перенаправление устройств: проброс USB-устройств, дисков, смарт-карт, принтеров.
- Поддержка RemoteApp: запуск отдельных приложений Windows, без необходимости отображать весь рабочий стол.
- Работа с несколькими мониторами: можно использовать несколько дисплеев при удалённом подключении.
- Аппаратное ускорение: поддержка OpenGL, DirectX для оптимизации графики.
- Безопасность
- Шифрование TLS.
- Поддержка CredSSP (Credential Security Support Provider).
- NLA для безопасного обмена учётными данными.
- Поддержка стандартов и расширений
- Умеет работать с FreeRDP Gateway (RD Gateway).
- Поддержка RDP Dynamic Virtual Channels.
- Кроссплатформенность
- Работает на Linux, Windows, macOS, Android и других системах.
Установка
В ALT Linux есть четыре версии клиента FreeRDP:
- xfreerdp — клиент для X.org v2
- wlfreerdp — клиент для Wayland v2
- xfreerdp3 — клиент для X.org v3
- wlfreerdp3 — клиент для Wayland v3
Выберите нужную и установите командой:
# apt-get install xfreerdp3
Использование
xfreerdp [file] [options] [/v:<server>[:port]]
Синтаксис:
/flag (включить флаг) /option:<value> (указать параметр со значением) +toggle -toggle (включить или выключить переключатель, где '/' синоним '+')
Заголовок | ||
---|---|---|
Параметр | Описание | |
Включить возможность | ||
Производительность | ||
-fonts | Отключить сглаживание шрифтов (ClearType) | |
-wallpaper | Отключить обои рабочего стола | |
-themes | Отключить темы | |
+aero | Включить композицию рабочего стола | |
-decorations | Отключить оформление окон | |
Безопасность | ||
+auth-only | Разрешить доступ только по аутентификации | |
-authentication | Отключить аутентификацию (экспериментально) | |
+enforce-tlsv1_2 | Включить принудительное использование TLS1.2 для подключения. Некоторые серверы имеют ошибочное согласование версии TLS и могут не дать подключиться без этого параметра | |
+password-is-pin | Включить использование аутентификации смарт-карты с паролем в качестве PIN-кода смарт-карты | |
Разное | +auto-reconnect | Включить автоматическое переподключение |
-toggle-fullscreen | Отключить Alt+Ctrl+Enter для переключения на весь экран | |
+home-drive | Включить перенаправление домашней папки пользователя в качестве сетевого ресурса на удаленный стол | |
-grab-keyboard | Отключить захват клавиатуры | |
-grab-mouse | Отключить захват мыши | |
+clipboard | Буфер обмена | |
Параметры возможностей | ||
Экран | /f | Полноэкранный режим (<Ctrl>+<Alt>+<Enter> так же переключает в полноэкранный режим) |
/w:знач /h:знач | Разрешение экрана — длина/ширина. Используются вместе или в одиночку | |
/size:WxH | Разрешение экрана — длина/ширина. | |
Безопасность | /cert:[deny,ignore,name:<name>,tofu,fingerprint:<hash>:<hash as hex> |
Параметры принятия сертификата. Используйте с осторожностью!
|
Удаленное приложение | /app:<path> или ||<alias> | Запуск удаленного приложения |
/app-cmd:<parameters> | Параметры командной строки для удаленного приложения | |
/app-file:<file-name> | Файл для открытия удаленным приложением | |
/app-cmd:<parameters> | Параметры командной строки удаленного приложения | |
/app-file:<имя-файла> | Файл для открытия с помощью удаленного приложения | |
/app-icon:<icon-path> | Значок удаленного приложения для пользовательского интерфейса | |
/app-name:<app-name> | Имя удаленного приложения для пользовательского интерфейса | |
/app-workdir:<workspace path> | Путь к рабочему пространству удаленного приложения | |
Автоматическое переподключение | /auto-reconnect-max-retries:<повторения> | Максимальное количество попыток автоматического переподключения: 0 для неограниченного [0,1000] |
Пользователь | /d:<домен> | Домен |
/p:<password> | Пароль | |
/u:[[<domain>\]<user>|<user>[@<domain>]] | Пользователь | |
Сервер | /v:<server>[:port] | Сервер |
/port:<number> | Порт сервера | |
Оборудование | /printer[:<name>[,<driver>]] | Перенаправление принтера |
/smartcard[:<str>[,<str>…]] | Перенаправление смарткарт | |
/usb:[dbg,][id:<vid>:<pid>#…,][addr:<bus>:<addr>#…,][auto] | Перенаправление USB | |
/drive:<name>,<path> | Перенаправить каталог <path> как общий ресурс с именем <name>. | |
/sound | Перенаправить звук |
Подробный Man:
Syntax: /flag (enables flag) /option:<value> (specifies option with value) +toggle -toggle (enables or disables toggle, where '/' is a synonym of '+') /a:<addin>[,<options>] Addin /action-script:<file-name> Action script /admin Admin (or console) session +aero Enable desktop composition /app:<path> or ||<alias> Remote application program /app-cmd:<parameters> Remote application command-line parameters /app-file:<file-name> File to open with remote application /app-guid:<app-guid> Remote application GUID /app-icon:<icon-path> Remote application icon for user interface /app-name:<app-name> Remote application name for user interface /app-workdir:<workspace path> Remote application workspace path /assistance:<password> Remote assistance password /auto-request-control Automatically request remote assistance input control +async-channels Enable Asynchronous channels (experimental) +async-input Enable Asynchronous input +async-update Enable Asynchronous update /audio-mode:<mode> Audio output mode +auth-only Enable Authenticate only -authentication Disable Authentication (experimental) +auto-reconnect Enable Automatic reconnection /auto-reconnect-max-retries:<retries> Automatic reconnection maximum retries, 0 for unlimited [0,1000] +bitmap-cache Enable bitmap cache /bpp:<depth> Session bpp (color depth) /buildconfig Print the build configuration /cert:[deny,ignore,name:<name>,tofu,fingerprint:<hash>:<hash as hex> [,fingerprint:<hash>:<another hash>]] Certificate accept options. Use with care! * deny ... Automatically abort connection if the certificate does not match, no user interaction. * ignore ... Ignore the certificate checks altogether (overrules all other options) * name ... Use the alternate <name> instead of the certificate subject to match locally stored certificates * tofu ... Accept certificate unconditionally on first connect and deny on subsequent connections if the certificate does not match * fingerprints ... A list of certificate hashes that are accepted unconditionally for a connection /cert-deny [deprecated, use /cert:deny] Automatically abort connection for any certificate that can not be validated. /cert-ignore [deprecated, use /cert:ignore] Ignore certificate /cert-name:<name> [deprecated, use /cert:name:<name>] Certificate name /cert-tofu [deprecated, use /cert:tofu] Automatically accept certificate on first connect /client-build-number:<number> Client Build Number sent to server (influences smartcard behaviour, see [MS-RDPESC]) /client-hostname:<name> Client Hostname to send to server -clipboard[:[use-selection:<atom>]] Disable Redirect clipboard. * use-selection:<atom> ... (X11) Specify which X selection to access. Default is CLIPBOARD. PRIMARY is the X-style middle-click selection. /codec-cache:[rfx|nsc|jpeg] Bitmap codec cache -compression Disable compression /compression-level:<level> Compression level (0,1,2) +credentials-delegation Enable credentials delegation /d:<domain> Domain -decorations Disable Window decorations /disp Display control /drive:<name>,<path> Redirect directory <path> as named share <name>. Hotplug support is enabled with /drive:hotplug,*. This argument provides the same function as "Drives that I plug in later" option in MSTSC. +drives Enable Redirect all mount points as shares /dvc:<channel>[,<options>] Dynamic virtual channel /dynamic-resolution Send resolution updates when the window is resized /echo Echo channel -encryption Disable Encryption (experimental) /encryption-methods:[40,][56,][128,][FIPS] RDP standard security encryption methods /f Fullscreen mode (<Ctrl>+<Alt>+<Enter> toggles fullscreen) -fast-path Disable fast-path input/output +fipsmode Enable FIPS mode /floatbar[:sticky:[on|off],default:[visible|hidden],show: [always|fullscreen||window]] floatbar is disabled by default (when enabled defaults to sticky in fullscreen mode) -fonts Disable smooth fonts (ClearType) /frame-ack:<number> Number of frame acknowledgement /from-stdin[:force] Read credentials from stdin. With <force> the prompt is done before connection, otherwise on server request. /g:<gateway>[:<port>] Gateway Hostname /gateway-usage-method:[direct|detect] Gateway usage method /gd:<domain> Gateway domain /gdi:sw|hw GDI rendering /geometry Geometry tracking channel +gestures Enable Consume multitouch input locally /gfx[:[[RFX|AVC420|AVC444],mask:<value>]] RDP8 graphics pipeline /gfx-h264[:[[AVC420|AVC444],mask:<value>] [DEPRECATED] use /gfx:avc420 instead] RDP8.1 graphics pipeline using H264 codec +gfx-progressive Enable RDP8 graphics pipeline using progressive codec +gfx-small-cache Enable RDP8 graphics pipeline using small cache mode +gfx-thin-client Enable RDP8 graphics pipeline using thin client mode +glyph-cache Enable Glyph cache (experimental) /gp:<password> Gateway password -grab-keyboard Disable Grab keyboard -grab-mouse Disable Grab mouse /gt:[rpc|http[,no-websockets]|auto[,no-websockets]] Gateway transport type /gu:[[<domain>\]<user>|<user>[@<domain>]] Gateway username /gat:<access token> Gateway Access Token /h:<height> Height -heartbeat Disable Support heartbeat PDUs /help Print help +home-drive Enable Redirect user home as share /ipv6 Prefer IPv6 AAA record over IPv4 A record /jpeg JPEG codec support /jpeg-quality:<percentage> JPEG quality /kbd:0x<id> or <name> Keyboard layout /kbd-lang:0x<id> Keyboard active language identifier /kbd-fn-key:<value> Function key value /kbd-list List keyboard layouts /kbd-lang-list List keyboard languages /kbd-remap:List of <key>=<value>,... pairs to remap scancodes Keyboard scancode remapping /kbd-subtype:<id> Keyboard subtype /kbd-type:<id> Keyboard type /load-balance-info:<info-string> Load balance info /log-filters:<tag>:<level>[,<tag>:<level>[,...]] Set logger filters, see wLog(7) for details /log-level:[OFF|FATAL|ERROR|WARN|INFO|DEBUG|TRACE] Set the default log level, see wLog(7) for details /max-fast-path-size:<size> Specify maximum fast-path update size /max-loop-time:<time> Specify maximum time in milliseconds spend treating packets +menu-anims Enable menu animations /microphone[:[sys:<sys>,][dev:<dev>,][format:<format>,][rate:<rate>,] [channel:<channel>]] Audio input (microphone) /monitor-list List detected monitors /monitors:<id>[,<id>[,...]] Select monitors to use -mouse-motion Disable Send mouse motion /multimon[:force] Use multiple monitors +multitouch Enable Redirect multitouch input +multitransport Enable Support multitransport protocol -nego Disable protocol security negotiation /network:[modem|broadband|broadband-low|broadband-high|wan|lan|auto] Network connection type /nsc NSCodec support +offscreen-cache Enable offscreen bitmap cache /orientation:[0|90|180|270] Orientation of display in degrees +old-license Enable Use the old license workflow (no CAL and hwId set to 0) /p:<password> Password /parallel[:<name>[,<path>]] Redirect parallel device /parent-window:<window-id> Parent window id +password-is-pin Enable Use smart card authentication with password as smart card PIN /pcb:<blob> Preconnection Blob /pcid:<id> Preconnection Id /pheight:<height> Physical height of display (in millimeters) /play-rfx:<pcap-file> Replay rfx pcap file /port:<number> Server port -suppress-output Disable suppress output when minimized +print-reconnect-cookie Enable Print base64 reconnect cookie after connecting /printer[:<name>[,<driver>]] Redirect printer device /proxy:[<proto>://][<user>:<password>@]<host>:<port> Proxy settings: override env. var (see also environment variable below). Protocol "socks5" should be given explicitly where "http" is default. /pth:<password-hash> Pass the hash (restricted admin mode) /pwidth:<width> Physical width of display (in millimeters) /rdp2tcp:<executable path[:arg...]> TCP redirection /reconnect-cookie:<base64-cookie> Pass base64 reconnect cookie to the connection /redirect-prefer:<FQDN|IP|NETBIOS>,[...] Override the preferred redirection order /relax-order-checks Do not check if a RDP order was announced during capability exchange, only use when connecting to a buggy server /restricted-admin Restricted admin mode /rfx RemoteFX /rfx-mode:[image|video] RemoteFX mode /scale:[100|140|180] Scaling factor of the display /scale-desktop:<percentage> Scaling factor for desktop applications (value between 100 and 500) /scale-device:100|140|180 Scaling factor for app store applications /sec:[rdp|tls|nla|ext] Force specific protocol security +sec-ext Enable NLA extended protocol security -sec-nla Disable NLA protocol security -sec-rdp Disable RDP protocol security -sec-tls Disable TLS protocol security /serial[:<name>[,<path>[,<driver>[,permissive]]]] Redirect serial device /shell:<shell> Alternate shell /shell-dir:<dir> Shell working directory /size:<width>x<height> or <percent>%[wh] Screen size /smart-sizing[:<width>x<height>] Scale remote desktop to window size /smartcard[:<str>[,<str>...]] Redirect the smartcard devices containing any of the <str> in their names. /smartcard-logon Activates Smartcard Logon authentication. (EXPERIMENTAL: NLA not supported) /sound[:[sys:<sys>,][dev:<dev>,][format:<format>,][rate:<rate>,] [channel:<channel>,][latency:<latency>,][quality:<quality>]] Audio output (sound) /span Span screen over multiple monitors /spn-class:<service-class> SPN authentication service class /ssh-agent SSH Agent forwarding channel /t:<title> Window title -themes Disable themes /timeout:<time in ms> Advanced setting for high latency links: Adjust connection timeout, use if you encounter timeout failures with your connection /tls-ciphers:[netmon|ma|ciphers] Allowed TLS ciphers /tls-seclevel:<level> TLS security level - defaults to 1 +enforce-tlsv1_2 Enable Force use of TLS1.2 for connection. Some servers have a buggy TLS version negotiation and might fail without this -toggle-fullscreen Disable Alt+Ctrl+Enter to toggle fullscreen /tune:<setting:value>,<setting:value> [experimental] directly manipulate freerdp settings, use with extreme caution! /tune-list Print options allowed for /tune /u:[[<domain>\]<user>|<user>[@<domain>]] Username +unmap-buttons Enable Let server see real physical pointer button /usb:[dbg,][id:<vid>:<pid>#...,][addr:<bus>:<addr>#...,][auto] Redirect USB device /v:<server>[:port] Server hostname /vc:<channel>[,<options>] Static virtual channel /version Print version /video Video optimized remoting channel /vmconnect[:<vmid>] Hyper-V console (use port 2179, disable negotiation) /w:<width> Width -wallpaper Disable wallpaper +window-drag Enable full window drag /window-position:<xpos>x<ypos> window position /wm-class:<class-name> Set the WM_CLASS hint for the window instance /workarea Use available work area
Примеры
Простое подключение:
$ xfreerdp /u:JohnDoe /p:Pwd123! /v:192.168.1.100:4489
Примечание: Если вы с freerdp подключаетесь к freerdp и у вас выдается ошибка по поводу шифрования, попробуйте указать ключ tls:
$ xfreerdp /u:JohnDoe /p:Pwd123! /v:192.168.1.100:4489 /sec:tls
Файл с параметрами подключения на весь экран:
$ xfreerdp /v:192.168.1.100:4489 /u:JohnDoe /p:Pwd123! /f
Доменный пользователь к серверу с доменным именем:
$ xfreerdp /u:CONTOSO\JohnDoe /p:Pwd123! /v:rdp.contoso.com $ xfreerdp /u:JohnDoe /p:Pwd123! /d:rdp.contoso.com /v:rdp.contoso.com
Подключение к серверу с указанием разрешения экрана:
$ xfreerdp /u:JohnDoe /p:Pwd123! /w:1366 /h:768 /v:192.168.1.100:4489 $ xfreerdp /u:JohnDoe /p:Pwd123! /size:1920x1080 /v:192.168.1.100:4489
Подключение без проверки сертификата (нужен, если у сервера самоподписанный сертификат):
$ xfreerdp /u:JohnDoe /p:Pwd123! /v:192.168.1.100:4489 /cert:ignore
Перенаправление папки:
$ xfreerdp /u:JohnDoe /p:Pwd123! /v:192.168.1.100:4489 /drive:MyLocalFolder,/home/user/shared
Перенаправление звука:
$ xfreerdp /u:JohnDoe /p:Pwd123! /v:192.168.1.100:4489 /sound
Перенаправление USB-устройства:
$ xfreerdp /u:JohnDoe /p:Pwd123! /v:192.168.1.100:4489 /usb:id,dev:VID:PID
- Где VID и PID — идентификаторы устройства (можно посмотреть через lsusb).
Подключение с шифрованием NLA (Network Level Authentication)
$ xfreerdp /u:JohnDoe /p:Pwd123! /v:192.168.1.100:4489 /sec:nla
- Если сервер требует обязательного использования NLA.
- Другие варианты /sec:rdp, /sec:tls, /sec:neg (автоматический выбор).
Подключение к удаленному сеансу
$ xfreerdp /u:JohnDoe /p:Pwd123! /v:192.168.1.100:4489 /shadow
GUI
MyConnector
См. MyConnector
Remmina
См. Remmina.
GUI на Yad
Вариант 1 (подключение, краткий)
Установите freerdp и yad и создайте и запустите следующий скрипт:
# apt-get install xfreerdp3 yad
#!/bin/bash # XFreeRDP RemoteApp W/ Prompt Script # Version 0.3 # Description: # XFreeRDP Remote App Script utilizing Zentity to populate variables # Written by Jarrett Higgins 12-2015 OUTPUT=$(zenity --forms --title="Connection Information" \ --text="Enter information about your Remote Connection" \ --separator="," \ --add-entry="Server" \ --add-entry="Port (Default: 3389)" \ --add-entry="Domain (Optional)" \ --add-entry="Username" \ --add-password="Password" \ --add-entry="Remote App Name (Optional)") OUTPUT_RESULTS=$? if ((OUTPUT_RESULTS != 0)); then echo "something went wrong" exit 1 fi Blank="" Server=$(awk -F, '{print $1}' <<<$OUTPUT) Port=$(awk -F, '{print $2}' <<<$OUTPUT) if ["$Port" = "$Blank"] then Port="3389" else Port="$Port" fi Domain=$(awk -F, '{print $3}' <<<$OUTPUT) Username=$(awk -F, '{print $4}' <<<$OUTPUT) Password=$(awk -F, '{print $5}' <<<$OUTPUT) App=$(awk -F, '{print $6}' <<<$OUTPUT) if ["$App" = "$Blank"] then App="$App" Title="$Server" else AppName="$App" Title="$AppName on $Server" App="/app:||$App" fi #zenity --info --title="Information Return" --text="$Server $Port $Domain $Username $Password $App" xfreerdp /t:"$Title" /v:$Server:$Port /d:$Domain /u:$Username /p:$Password $App /cert:ignore /workarea +clipboard Password=""
Вариант 2 (подключение, подробный)
Установите freerdp и yad и создайте и запустите следующий скрипт:
# apt-get install xfreerdp3 yad
#!/bin/bash CONFIG_FILE="/tmp/rdp_settings.conf" # === 📦 Получаем список доступных принтеров printers=$(lpstat -p 2>/dev/null | awk '{print $2}') printer_list="None" for p in $printers; do printer_list+="!$p" done [ -z "$printers" ] && printer_list="None!Printer1!Printer2" # fallback # === 🔐 Получаем список доступных токенов (простая проверка по dev) tokens=$(ls /dev 2>/dev/null | grep -E 'token|pcsc|smartcard|hid|usb' | sort -u) token_list="None" for t in $tokens; do token_list+="!$t" done [ -z "$tokens" ] && token_list="None!token0!token1" # fallback # === Загружаем предыдущее состояние if [ -f "$CONFIG_FILE" ]; then IFS="|" read -r -a data < "$CONFIG_FILE" else data=("" "" "" "" "" "" "TRUE" "TRUE" "TRUE" "TRUE" "TRUE" "None" "None" "" "shared" "nla") fi # === Основной цикл while true; do form=$(yad --notebook \ --title="Подключение к RDP (FreeRDP)" \ --width=550 --height=500 \ --center \ --separator="|" \ --form \ --tab="Основное" \ --field="Сервер (обязательно):" "${data[0]}" \ --field="Порт:" "${data[1]}" \ --field="Имя пользователя:" "${data[2]}" \ --field="Пароль (скрыт):H" "${data[3]}" \ --field="Домен (опционально):" "${data[4]}" \ --field="Разрешение экрана:" "${data[5]}" \ --tab="Параметры" \ --form \ --field="Полноэкранный режим:CHK" "${data[6]}" \ --field="Динамическое изменение экрана:CHK" "${data[7]}" \ --field="Отключить проверку сертификата:CHK" "${data[8]}" \ --field="Перенаправлять звук:CHK" "${data[9]}" \ --field="Переподключаться при обрыве:CHK" "${data[10]}" \ --field="Принтер:CB" "${data[11]:-None}!${printer_list#None!}" \ --field="Смарт-карта (токен):CB" "${data[12]:-None}!${token_list#None!}" \ --field="Папка для перенаправления:DIR" "${data[13]}" \ --field="Имя общей папки (в сессии):" "${data[14]}" \ --tab="Безопасность" \ --form \ --field="Тип шифрования:CB" "${data[15]:-nla}!nla!tls!rdp!neg" ) [ $? -ne 0 ] && exit 0 echo "$form" > "$CONFIG_FILE" IFS="|" read server port username password domain resolution \ fullscreen dynres cert_ignore sound autoreconnect \ printer_choice smartcard_choice folder_redirect folder_name encryption <<< "$form" cmd="xfreerdp /v:$server" [ -n "$port" ] && cmd+=":$port" cmd+=" /u:$username /p:$password" [ -n "$domain" ] && cmd+=" /d:$domain" if [ "$fullscreen" = "TRUE" ]; then cmd+=" /f" elif [ -n "$resolution" ]; then width=$(echo "$resolution" | cut -d'x' -f1) height=$(echo "$resolution" | cut -d'x' -f2) cmd+=" /size:${width}x${height}" fi [ "$dynres" = "TRUE" ] && cmd+=" +dynamic-resolution" [ "$cert_ignore" = "TRUE" ] && cmd+=" /cert:ignore" [ "$sound" = "TRUE" ] && cmd+=" /sound" [ "$autoreconnect" = "TRUE" ] && cmd+=" /auto-reconnect" if [ "$printer_choice" != "None" ]; then cmd+=" /printer:$printer_choice" fi if [ "$smartcard_choice" != "None" ]; then cmd+=" /smartcard:$smartcard_choice" fi if [ -n "$folder_redirect" ]; then safe_name="${folder_name:-shared}" cmd+=" /drive:$safe_name,$folder_redirect" fi case "$encryption" in nla) cmd+=" /sec:nla" ;; tls) cmd+=" /sec:tls" ;; rdp) cmd+=" /sec:rdp" ;; neg) cmd+=" /sec:neg" ;; esac yad --question --title="Подтверждение" --text="Выполнить следующую команду?\n\n<b>$cmd</b>" --width=400 [ $? -ne 0 ] && continue eval "$cmd" result=$? if [ $result -eq 0 ]; then rm -f "$CONFIG_FILE" break else yad --error --title="Ошибка подключения" --text="Подключение не удалось (код $result). Повторите попытку." fi done
Вариант 3 (вывод команды)
Установите freerdp и yad и создайте и запустите следующий скрипт:
# apt-get install xfreerdp3 yad
#!/bin/bash # === 📦 Принтеры printers=$(lpstat -p 2>/dev/null | awk '{print $2}') printer_list="None" for p in $printers; do printer_list+="!$p" done [ -z "$printers" ] && printer_list="None!Printer1!Printer2" # === 🔐 Токены tokens=$(ls /dev 2>/dev/null | grep -E 'token|pcsc|smartcard|hid|usb' | sort -u) token_list="None" for t in $tokens; do token_list+="!$t" done [ -z "$tokens" ] && token_list="None!token0!token1" # === Загрузка data=("" "" "" "" "" "" "TRUE" "TRUE" "TRUE" "TRUE" "TRUE" "None" "None" "" "shared" "nla" "FALSE" "") while true; do form=$(yad --notebook \ --title="Подключение к RDP (FreeRDP)" \ --width=600 --height=540 \ --center \ --separator="|" \ --form \ --tab="Основное" \ --field="Сервер (обязательно):" "${data[0]}" \ --field="Порт:" "${data[1]}" \ --field="Имя пользователя:" "${data[2]}" \ --field="Пароль (скрыт):H" "${data[3]}" \ --field="Домен (опционально):" "${data[4]}" \ --field="Разрешение экрана:" "${data[5]}" \ --tab="Параметры" \ --form \ --field="Полноэкранный режим:CHK" "${data[6]}" \ --field="Динамическое изменение экрана:CHK" "${data[7]}" \ --field="Отключить проверку сертификата:CHK" "${data[8]}" \ --field="Перенаправлять звук:CHK" "${data[9]}" \ --field="Переподключаться при обрыве:CHK" "${data[10]}" \ --field="Принтер:CB" "${data[11]:-None}!${printer_list#None!}" \ --field="Смарт-карта (токен):CB" "${data[12]:-None}!${token_list#None!}" \ --field="Папка для перенаправления:DIR" "${data[13]}" \ --field="Имя общей папки (в сессии):" "${data[14]}" \ --tab="Безопасность" \ --form \ --field="Тип шифрования:CB" "${data[15]:-nla}!nla!tls!rdp!neg" \ --field="Команда подключения:TXT" "${data[17]}" ) [ $? -ne 0 ] && exit 0 IFS="|" read server port username password domain resolution \ fullscreen dynres cert_ignore sound autoreconnect \ printer_choice smartcard_choice folder_redirect folder_name encryption save_on_exit show_command <<< "$form" # Формируем команду cmd="xfreerdp /v:$server" [ -n "$port" ] && cmd+=":$port" cmd+=" /u:$username /p:$password" [ -n "$domain" ] && cmd+=" /d:$domain" if [ "$fullscreen" = "TRUE" ]; then cmd+=" /f" elif [ -n "$resolution" ]; then width=$(echo "$resolution" | cut -d'x' -f1) height=$(echo "$resolution" | cut -d'x' -f2) cmd+=" /size:${width}x${height}" fi [ "$dynres" = "TRUE" ] && cmd+=" +dynamic-resolution" [ "$cert_ignore" = "TRUE" ] && cmd+=" /cert:ignore" [ "$sound" = "TRUE" ] && cmd+=" /sound" [ "$autoreconnect" = "TRUE" ] && cmd+=" /auto-reconnect" [ "$printer_choice" != "None" ] && cmd+=" /printer:$printer_choice" [ "$smartcard_choice" != "None" ] && cmd+=" /smartcard:$smartcard_choice" if [ -n "$folder_redirect" ]; then safe_name="${folder_name:-shared}" cmd+=" /drive:$safe_name,$folder_redirect" fi case "$encryption" in nla) cmd+=" /sec:nla" ;; tls) cmd+=" /sec:tls" ;; rdp) cmd+=" /sec:rdp" ;; neg) cmd+=" /sec:neg" ;; esac # Показываем в текстовом поле data=("$server" "$port" "$username" "$password" "$domain" "$resolution" \ "$fullscreen" "$dynres" "$cert_ignore" "$sound" "$autoreconnect" \ "$printer_choice" "$smartcard_choice" "$folder_redirect" "$folder_name" \ "$encryption" "$save_on_exit" "$cmd") # Следующий запуск покажет обновлённое значение done
—>
Information about FreeRDP and how to configure the client
FreeRDP is, as the name implies, a free and open-source client for the RDP protocol. NoTouch includes FreeRDP and uses it as the primary RDP client for connections to Windows desktops, Microsoft terminal servers and Hyper-V VDI. The alternative, legacy RDP client RDesktop is still part of NoTouch but its use is discouraged in favor of FreeRDP.
** Update** With the release of NoTouch OS 3.5.1 the Microsoft RDS/RDP connection type is now supported.
Basic configuration
To create a FreeRDP session only a few steps are to be done:
- Create a connection
- Set the «Connection mode» parameter to «RDP/FreeRDP»
- Enter the host name to connect to into the parameter «Connection target» (if using RD gateway, please see below)
- Save changes
- FreeRDP Version is set to Default, AS such the latest version will be utilized. If you need to specify an earlier version, you may do so via the drop down dialogue
- If desired, navigate to the FreeRDP subgroup and edit values there
Remote Desktop Gateway support
The following parameters are most important with Remote Desktop gateway support:
- Gateway hostname. The host name or IP address of the Remote Desktop gateway.
- Load balancing info. This is where you put the RDWeb tsv URL into. For instance, an example value would look like tsv://VMResource.1.Win8x64-POC
- Gateway usage method. This corresponds to the Microsoft strategies of «Detect» and «Direct». Most people will be fine with the default of «No setting».
- Direct — Do Not Use RD Gateway
- Detect — Use an RD Gateway server if a direct connection cannot be made the RD Session Host Server
We suggest to leave the Gateway username, Gateway password and Gateway domain parameters blank. If you do so, NoTouch will use the user credentials that the end user types in for both gateway and actual RDP connection. Thus, entering something into these parameters only makes sense if you have different user accounts for the gateway that you want to preset.
For Remote Desktop gateway support, FreeRDP version 1.2 or newer must be selected! Gateways are not supported with 1.0 or 1.1.
FreeRDP configuration
FreeRDP offers a vast variety of parameters. These relate to RDP protocol behaviour as well as FreeRDP behavior. Most of these parameters are self-explanatory and the defaults are reasonable. Please refer to FreeRDP and RDP documentation for further explanation.
Image sample reflects the user parameter that may improve session performance when using FreeRDP on Raspberry Pi based devices using NoTouch OS
2021 FreeRDP update
With the 2021 updates to FreeRDP, the client now requires the use of OpenH264 libraries. If you update or receive an error related to OpenH264, please use the steps below to add the OpenH264 libraries to the NoTouch OS devices
Log into NoTouch Center and go to ‘Configuration’ Scroll down to ‘Download OpenH264 Libraries’ and select ‘Download Now’
When asked if you want to download the latest H264 libraries click ‘OK’
If successful, you will see the libraries that have been downloaded, and then click save. To ensure all libraries are downloaded by the NoTouch OS endpoints a reboot will be required.
If your NoTouch Center appliance has no direct access to the internet It is possible to download these files separately and then upload them to NoTouch Center for deployment via the Extension Module feature.
You can download the latest version from here and then upload it to Misc.Files as shown below.
Once the file has been uploaded you can then deploy the files using the Extension Modules option. Go to your Group Settings/Extension and configure the parameters as shown below.
Next go to Group Settings/Security and ensure ‘Check Certificates on System Downloads’ is set to off. Then announce the changes and reboot your endpoints, and the file will be deployed once the devices have rebooted.
You can check the status of the install by connecting to the web interface of the device and under Diagnostic go to Debug Information/Cache and you should see that the files have been deployed.