Devolutions / IronRDP

Rust implementation of the Microsoft Remote Desktop Protocol (RDP)
Apache License 2.0
368 stars 48 forks source link

keyboard left shift and direction keys don't work #535

Open zombiehoffa opened 3 weeks ago

zombiehoffa commented 3 weeks ago

I have a keychron k10 pro keyboard connected via usb and the left shift and arrow keys don't work. I've tried the other ibm keyboard layouts via passing the cli option but it doens't appear to do anything. Any help would be much appreciated. I"m running latest gity code.

CBenoit commented 3 weeks ago

Hi!

Maybe our input event handling logic is lacking. Since you are building from master, I think you could easily provide us with more troubleshooting information.

At this place: https://github.com/Devolutions/IronRDP/blob/af7deae70ab21435e9f0a864210b17c63efdd9e3/crates/ironrdp-client/src/app.rs#L159-L172

Can you modify that in such way?

                if let Some(scancode) = event.physical_key.to_scancode() {
                    let scancode = ironrdp::input::Scancode::from_u16(u16::try_from(scancode).unwrap());

                    let operation = match event.state {
                        event::ElementState::Pressed => ironrdp::input::Operation::KeyPressed(scancode),
                        event::ElementState::Released => ironrdp::input::Operation::KeyReleased(scancode),
                    };

                    let input_events = self.input_database.apply(std::iter::once(operation));

                    send_fast_path_events(&self.input_event_sender, input_events);
                } else {
                    warn!(?event, "Unhandled keyboard event");
                }

And then, let’s see what kind of warnings we get.