Freerdp

Материал из ALT Linux Wiki
FreeRDP
Логотип 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>

Параметры принятия сертификата. Используйте с осторожностью!

  • deny ... Автоматически отменить соединение, если сертификат не совпадает, без взаимодействия с пользователем.
  • ignore ... Игнорировать сертификат, не проверяет вообще (пропускает все остальные варианты)
  • name ... Использовать альтернативное <имя> вместо указанного сертификата, сертификат выбирается из локального хранилища
  • tofu ... Безоговорочно принять сертификат при первом подключении и отклонить при последующих соединениях, если сертификат не соответствует
  • fingerprint ... Список хэшей сертификатов, которые безоговорочно принимаются для подключения
Удаленное приложение /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

Connector

См. MyConnector

Remmina

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=""

Freerdp-yad-1.png

Вариант 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

Freerdp-yad-2.png

Вариант 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

Freerdp-yad-3.png -->