Skip to content

Управление параметрами клиента FreeRDP

В статье описаны варианты использования wrapper-скрипта для перехвата и добавления параметров клиента xfreerdp.

Информация ниже основана на логике работы клиента:
Если по пути /usr/bin/udsrdp находится исполняемый файл, то этот путь считается более приоритетным по сравнению со стандартным /usr/bin/xfreerdp. Таким образом, при запросе сервиса параметры от брокера будут переданы именно udsrdp.

Передача дополнительных параметров для получения пароля учетной записи пользователя

В случае, когда клиенту необходимо подключиться к опубликованному приложению RemoteApp, но в параметрах запуска xfreerdp от брокера не поступает пароль для подключения пользователя - есть возможность получения пароля от пользователя в всплывающем диалоговом окне.

Для реализации необходимо наличие установленной утилиты zenity в окружении клиента.

Для этого необходимо разместить файл по пути /usr/bin/udsrdp со следующим содержимым:

#!/bin/bash
</strong>catchedArgs=""
for arg in "$@"
do
    catchedArgs="$catchedArgs $arg"
done

/usr/bin/xfreerdp ${catchedArgs} /p:$(zenity --entry --title="Password input" --text="Введите пароль:" --hide-text)

Исключение параметров для работы с xfreerdp3

По умолчанию брокер передает параметры в формате, адаптированном для xfreerdp версии 2. В 3й версии клиента xfreerdp был изменен формат передачи некоторых параметров, что может приводить к ошибкам при запуске сервиса. Рассмотрим перехват параметров старого формата, передача которых вызывает ошибки запуска.

Для этого необходимо разместить файл по пути /usr/bin/udsrdp со следующим содержимым:

#!/bin/bash
catchedArgs=""
for arg in "$@"
do
    catchedArgs="$catchedArgs $arg"
done

if [[ $catchedArgs == *"/app:"* ]]; then
    catchedArgs="${catchedArgs///app://app:program:}"
fi

if [[ $catchedArgs == *"/cert-ignore"* ]]; then
    catchedArgs="${catchedArgs///cert-ignore//cert:ignore}"
fi

exclude_catchedArgs=${catchedArgs//\/sec:rdp}
exclude_catchedArgs=${exclude_catchedArgs//\/bpp:24}

/usr/bin/xfreerdp ${exclude_catchedArgs}

Передача и исключение параметров для использования единого транспорта для версий xfreerdp2 и xfreerdp3

В случае, если версии клиента xfreerdp у пользователей могут отличаться, можно избежать необходимости создания дополнительных транспортов подключения, модифицируя передаваемые параметры на основании версии клиента.

Для этого необходимо разместить файл по пути /usr/bin/udsrdp со следующим содержимым:

#!/bin/bash
catchedArgs=""
for arg in "$@"
do
    catchedArgs="$catchedArgs $arg"
done

version=$(/usr/bin/xfreerdp /version)

major_rdp_version=$(echo "$version" | awk -F'[ .]' '/This is FreeRDP version/ {print $5}')

if [[ -z "$major_rdp_version" ]]; then
    echo "Не удалось установить версию клиента xfreerdp."
    /usr/bin/xfreerdp ${catchedArgs}
else
    echo "Обнаружен клиент xfreerdp$major_rdp_version."

    case $major_rdp_version in
        2)
            /usr/bin/xfreerdp ${catchedArgs}
            echo "$catchedArgs" > /home/anakim/udsrdp.log
            ;;
        3)
            if [[ $catchedArgs == *"/app:"* ]]; then
                catchedArgs="${catchedArgs///app://app:program:}"
            fi

            if [[ $catchedArgs == *"/cert-ignore"* ]]; then
                catchedArgs="${catchedArgs///cert-ignore//cert:ignore}"
            fi

            exclude_catchedArgs=${catchedArgs//\/sec:rdp}
            exclude_catchedArgs=${exclude_catchedArgs//\/bpp:24}

            #exclude_catchedArgs=${exclude_catchedArgs//\/cert-ignore}
            /usr/bin/xfreerdp ${exclude_catchedArgs}
          echo "$exclude_catchedArgs" > /home/anakim/udsrdp.log
            ;;
        *)
            echo "Обнаруженная версия xfreerdp $major_rdp_version не поддерживается."
            /usr/bin/xfreerdp ${catchedArgs}
            ;;
    esac
fi

Источник: https://kb.pvhostvm.ru/hostvm-vdi/hostvm-vdi-installation-guide/client/managing-freerdp-client

OpenUDS Professional