diff --git a/crates/ironrdp-client/src/config.rs b/crates/ironrdp-client/src/config.rs index e31cb21c..fc51116d 100644 --- a/crates/ironrdp-client/src/config.rs +++ b/crates/ironrdp-client/src/config.rs @@ -289,6 +289,7 @@ impl Config { enable_credssp: !args.no_credssp, keyboard_type: KeyboardType::parse(args.keyboard_type), keyboard_subtype: args.keyboard_subtype, + keyboard_layout: 0, // the server SHOULD use the default active input locale identifier keyboard_functional_keys_count: args.keyboard_functional_keys_count, ime_file_name: args.ime_file_name, dig_product_id: args.dig_product_id, diff --git a/crates/ironrdp-connector/src/connection.rs b/crates/ironrdp-connector/src/connection.rs index 01866273..ad55926d 100644 --- a/crates/ironrdp-connector/src/connection.rs +++ b/crates/ironrdp-connector/src/connection.rs @@ -630,7 +630,7 @@ fn create_gcc_blocks<'a>( desktop_height: config.desktop_size.height, color_depth: ColorDepth::Bpp8, // ignored because we use the optional core data below sec_access_sequence: SecureAccessSequence::Del, - keyboard_layout: 0, // the server SHOULD use the default active input locale identifier + keyboard_layout: config.keyboard_layout, client_build: config.client_build, client_name: config.client_name.clone(), keyboard_type: config.keyboard_type, diff --git a/crates/ironrdp-connector/src/lib.rs b/crates/ironrdp-connector/src/lib.rs index 724fdf47..5680fe13 100644 --- a/crates/ironrdp-connector/src/lib.rs +++ b/crates/ironrdp-connector/src/lib.rs @@ -133,6 +133,7 @@ pub struct Config { pub keyboard_type: gcc::KeyboardType, pub keyboard_subtype: u32, pub keyboard_functional_keys_count: u32, + pub keyboard_layout: u32, pub ime_file_name: String, pub bitmap: Option, pub dig_product_id: String, diff --git a/crates/ironrdp-web/src/session.rs b/crates/ironrdp-web/src/session.rs index 43c0e883..3b3b6000 100644 --- a/crates/ironrdp-web/src/session.rs +++ b/crates/ironrdp-web/src/session.rs @@ -777,6 +777,7 @@ fn build_config( enable_credssp: true, keyboard_type: ironrdp::pdu::gcc::KeyboardType::IbmEnhanced, keyboard_subtype: 0, + keyboard_layout: 0, // the server SHOULD use the default active input locale identifier keyboard_functional_keys_count: 12, ime_file_name: String::new(), dig_product_id: String::new(), diff --git a/crates/ironrdp/examples/screenshot.rs b/crates/ironrdp/examples/screenshot.rs index 3bbca428..59d7a285 100644 --- a/crates/ironrdp/examples/screenshot.rs +++ b/crates/ironrdp/examples/screenshot.rs @@ -181,6 +181,7 @@ fn build_config(username: String, password: String, domain: Option) -> c enable_credssp: true, keyboard_type: KeyboardType::IbmEnhanced, keyboard_subtype: 0, + keyboard_layout: 0, keyboard_functional_keys_count: 12, ime_file_name: String::new(), dig_product_id: String::new(), diff --git a/ffi/src/connector/config.rs b/ffi/src/connector/config.rs index dc55f0ca..f2a657ed 100644 --- a/ffi/src/connector/config.rs +++ b/ffi/src/connector/config.rs @@ -26,6 +26,7 @@ pub mod ffi { pub enable_credssp: Option, pub keyboard_type: Option, pub keyboard_subtype: Option, + pub keyboard_layout: Option, pub keyboard_functional_keys_count: Option, pub ime_file_name: Option, pub dig_product_id: Option, @@ -89,6 +90,10 @@ pub mod ffi { self.enable_credssp = Some(enable_credssp); } + pub fn set_keyboard_layout(&mut self, keyboard_layout: u32) { + self.keyboard_layout = Some(keyboard_layout); + } + pub fn set_keyboard_type(&mut self, keyboard_type: KeyboardType) { self.keyboard_type = Some(keyboard_type.into()); } @@ -151,7 +156,7 @@ pub mod ffi { domain: self.domain.clone(), enable_tls: self.enable_tls.unwrap_or(false), enable_credssp: self.enable_credssp.unwrap_or(true), - + keyboard_layout: self.keyboard_layout.unwrap_or(0), keyboard_type: self .keyboard_type .unwrap_or(ironrdp::pdu::gcc::KeyboardType::IbmEnhanced),