[client,common] allow adding a named keyboard pipe

This allows starting FreeRDP clients with a named pipe that will type in
text written to the named pipe as keyboard input
This commit is contained in:
akallabeth
2023-06-30 14:09:51 +02:00
committed by Martin Fleisz
parent 382ef13b1d
commit a01f3ec5ab
6 changed files with 25 additions and 3 deletions

View File

@@ -2173,6 +2173,11 @@ static int parse_kbd_options(rdpSettings* settings, const COMMAND_LINE_ARGUMENT_
bval != PARSE_OFF))
rc = COMMAND_LINE_ERROR_UNEXPECTED_VALUE;
}
else if (option_starts_with("pipe:", val))
{
if (!freerdp_settings_set_string(settings, FreeRDP_KeyboardPipeName, &val[5]))
rc = COMMAND_LINE_ERROR_UNEXPECTED_VALUE;
}
#if defined(WITH_FREERDP_DEPRECATED_COMMANDLINE)
else if (count == 1)
{

View File

@@ -248,12 +248,13 @@ static const COMMAND_LINE_ARGUMENT_A global_cmd_args[] = {
#endif
{ "kbd", COMMAND_LINE_VALUE_REQUIRED,
"[layout:[0x<id>|<name>],lang:<0x<id>>,fn-key:<value>,type:<value>,subtype:<value>,unicode[:"
"on|off],remap:<key1>=<value1>,remap:<key2>=<value2>]",
"on|off],remap:<key1>=<value1>,remap:<key2>=<value2>,pipe:<filename>]",
NULL, NULL, -1, NULL,
"Keyboard related options:"
"* layout: set the keybouard layout announced to the server"
"* lang: set the keyboard language identifier sent to the server"
"* fn-key: Function key value" },
"* fn-key: Function key value"
"* pipe: Name of a named pipe that can be used to type text into the RDP session" },
#if defined(WITH_FREERDP_DEPRECATED_COMMANDLINE)
{ "kbd-lang", COMMAND_LINE_VALUE_REQUIRED, "0x<id>", NULL, NULL, -1, NULL,
"[DEPRECATED, use / kbd:lang:<value>] Keyboard active language identifier" },

View File

@@ -845,6 +845,7 @@ extern "C"
#define FreeRDP_HasHorizontalWheel (2634)
#define FreeRDP_HasExtendedMouseEvent (2635)
#define FreeRDP_SuspendInput (2636)
#define FreeRDP_KeyboardPipeName (2637)
#define FreeRDP_BrushSupportLevel (2688)
#define FreeRDP_GlyphSupportLevel (2752)
#define FreeRDP_GlyphCache (2753)
@@ -1463,7 +1464,8 @@ extern "C"
* input
*/
ALIGN64 BOOL SuspendInput; /* 2636 */
UINT64 padding2688[2688 - 2637]; /* 2637 */
ALIGN64 char* KeyboardPipeName; /* 2637 */
UINT64 padding2688[2688 - 2638]; /* 2638 */
/* Brush Capabilities */
ALIGN64 UINT32 BrushSupportLevel; /* 2688 */

View File

@@ -2685,6 +2685,9 @@ const char* freerdp_settings_get_string(const rdpSettings* settings, size_t id)
case FreeRDP_KerberosStartTime:
return settings->KerberosStartTime;
case FreeRDP_KeyboardPipeName:
return settings->KeyboardPipeName;
case FreeRDP_KeyboardRemappingList:
return settings->KeyboardRemappingList;
@@ -2960,6 +2963,9 @@ char* freerdp_settings_get_string_writable(rdpSettings* settings, size_t id)
case FreeRDP_KerberosStartTime:
return settings->KerberosStartTime;
case FreeRDP_KeyboardPipeName:
return settings->KeyboardPipeName;
case FreeRDP_KeyboardRemappingList:
return settings->KeyboardRemappingList;
@@ -3244,6 +3250,9 @@ BOOL freerdp_settings_set_string_(rdpSettings* settings, size_t id, char* val, s
case FreeRDP_KerberosStartTime:
return update_string_(&settings->KerberosStartTime, cnv.c, len);
case FreeRDP_KeyboardPipeName:
return update_string_(&settings->KeyboardPipeName, cnv.c, len);
case FreeRDP_KeyboardRemappingList:
return update_string_(&settings->KeyboardRemappingList, cnv.c, len);
@@ -3544,6 +3553,9 @@ BOOL freerdp_settings_set_string_copy_(rdpSettings* settings, size_t id, const c
case FreeRDP_KerberosStartTime:
return update_string_copy_(&settings->KerberosStartTime, cnv.cc, len, cleanup);
case FreeRDP_KeyboardPipeName:
return update_string_copy_(&settings->KeyboardPipeName, cnv.cc, len, cleanup);
case FreeRDP_KeyboardRemappingList:
return update_string_copy_(&settings->KeyboardRemappingList, cnv.cc, len, cleanup);

View File

@@ -475,6 +475,7 @@ static const struct settings_str_entry settings_map[] = {
{ FreeRDP_KerberosRenewableLifeTime, FREERDP_SETTINGS_TYPE_STRING,
"FreeRDP_KerberosRenewableLifeTime" },
{ FreeRDP_KerberosStartTime, FREERDP_SETTINGS_TYPE_STRING, "FreeRDP_KerberosStartTime" },
{ FreeRDP_KeyboardPipeName, FREERDP_SETTINGS_TYPE_STRING, "FreeRDP_KeyboardPipeName" },
{ FreeRDP_KeyboardRemappingList, FREERDP_SETTINGS_TYPE_STRING,
"FreeRDP_KeyboardRemappingList" },
{ FreeRDP_NtlmSamFile, FREERDP_SETTINGS_TYPE_STRING, "FreeRDP_NtlmSamFile" },

View File

@@ -385,6 +385,7 @@ static const size_t string_list_indices[] = {
FreeRDP_KerberosRealm,
FreeRDP_KerberosRenewableLifeTime,
FreeRDP_KerberosStartTime,
FreeRDP_KeyboardPipeName,
FreeRDP_KeyboardRemappingList,
FreeRDP_NtlmSamFile,
FreeRDP_Password,