mirror of
https://github.com/jetkvm/kvm.git
synced 2026-03-02 22:58:00 -05:00
Ignores keyboard mapping and doesn't have a correct mapping in the keyboard settings #350
Labels
No labels
component/keyboard-layout
component: cloud
component: device screen
component: extensions
component: hid/keyboard
component: hid/mouse
component: network
component: timesync
component: ui
component: updater
component: usb
component: usb/hid
component: usb/storage
component: video
component: webrtc
component: webserver
need-more-details
status: working-in-progress
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
starred/kvm#350
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @plastikos on GitHub (Jun 27, 2025).
JetKVM somehow grabs the raw keystrokes before they are mapped. It does not have a U.S. Dvorak mapping in the Keyboard settings and there is no way to map keys in addition to any selected base mapping. I have tried this in two different browsers and neither of them honor the desktop keyboard mapping. I've never had a keyboard mapping problem with other HTML5 KVMs nor with Java KVMs.
Debian GNU/Linux 13 (trixie)
Kernel 6.11.10-amd64
Firefox 139.0 and Chromium 136.0.7103.113
JetKVM App 0.4.4 / System 0.2.4
@macdja38 commented on GitHub (Jun 27, 2025):
I'm having the same issue.
@IDisposable commented on GitHub (Jul 1, 2025):
They need to completely revamp the keyboard support to include the concepts introduced (partially) in the Paste-Keyboard option. I'm soliciting opinions on if I should just build in keyboard.info imports so we can support everything :)
@didierb99 commented on GitHub (Aug 2, 2025):
Same here. Very annoying bug
@plastikos commented on GitHub (Aug 6, 2025):
The business I work for wants to purchase a pile of JetKVMs but I'm telling them it's a non-starter since it uses the raw keycodes rather than the cooked keycodes. It completely ignores all keymappings and makes it impossible to type for anyone that uses any keymapping that is not part of the configuration list. Having to specifically set the keymap on the JetKVM configuration rather than just use the cooked keycodes from the desktop is a completely broken approach. While there should be a special input method for sending keycodes that the desktop does not usually pass (e.g.
<ESC>,<F1>, etc) that should be an exception to sending all cooked keycodes.@IDisposable commented on GitHub (Aug 7, 2025):
I'm working on redoing the entire keyboard processing... but I want to be sure I understand what you mean about Cooked vs. Raw? What exactly are you asking it to do? We're in a browser, so we get the native-machine's key down/key up/key press messages and pass them directly through (with modifier tracking).
Please be specific, so I am sure I'm addressing your use-case. Please differentiate between Physical Keyboard (on browser), Browser OS Language and Keyboard Layout setting, Host (controlled machine) OS language and Keyboard Layout. Also noted that Virtual Keyboard is a totally different issue, because we're showing a keyboard on-screen that needs to match the host's keyboard layout, Paste also needs that information, and then there's Macros, which are basically half-way between simulating physical keyboard with paste-character logic.
@rgl commented on GitHub (Sep 8, 2025):
@IDisposable, I have a couple of use-cases, maybe these can be taken into consideration?
I would like to use Puppeteer to drive/test the JetKVM connected device using headless chrome/chromium. I'm trying to use the Puppeteer Keyboard class, more exactly, the Keyboard.type function, but it seems the keyboard layout is at play here, as its not working as expected, e.g., typing/pasting
Aa|!"#$%&/()=?«»<>,;.:-_\zZends up being mangled/mistyped in the device.I would like to have some way to call into the JetKVM JavaScript code. That is, Puppeteer allows us to inject JavaScript code into the page, but, how do we call into the JetKVM JavaScript code? E.g. How to call some JavaScript global function like,
JetKvm.pasteText("Aa|!"#$%&/()=?«»<>,;.:-_\\zZ")?I would like to have support for some kind of inline markup like the packer
boot_command.@IDisposable commented on GitHub (Sep 8, 2025):
@rgl I like the idea, it's not quite as simple as exposing a function since this is a React/stateful application, but perhaps we can make it happen. Please create a distinct Issue for this as this thread is getting really haphazard.
@rgl commented on GitHub (Sep 9, 2025):
@IDisposable I've created https://github.com/jetkvm/kvm/issues/787, please have a look. Thank you!
@plastikos commented on GitHub (Sep 26, 2025):
@IDisposable, here are details of my situation:
My physical keyboard is English U.S. QWERTY with the short key.
My keyboard layout is English U.S. Dvorak.
I have additional keys mapped such as <CAPS_LOCK> as an additional <L_CTRL>.
When I have input focus to any of the apps on my desktop I get the English U.S. Dvorak with the <CAPS_LOCK> as <L_CTRL> ... except when I use JetKVM which somehow ignores all key mappings and gets raw keycodes as the physical QWERTY keyboard. It might be tolerable if there was at least an English U.S. Dvorak mapping in the JetKVM settings but there is not and I don't see any way for me to load my own keyboard mapping without changing the key mapping for all other users of the JetKVM. This underscores why JetKVM should work like all other applications on my desktop: process the remapped keycodes rather than the raw keycodes - then it works for everyone all the time without needing to mess with settings or require having the correct keymap built-in to JetKVM.
@IDisposable commented on GitHub (Sep 26, 2025):
I see what your situation is, perhaps there is a way we can support your setup with an addition option (per host? / per browser?) but the reason this doesn't work the way you're hoping is that it is by design using the HID keycode and sending that to the remote because the host/remote is not necessarily running the keyboard OR language that you are on your client/browser. Be sending the HID keycodes (which are what all USB keyboards send to the host, by HID specification). That keycode is not language or keyboard-mapping controlled at all... it's up the receiving host and the OS (or in the case of boot BIOS, the BIOS settings) to map those HID codes to characters... which is controlled by the host (and not even known to the remote).
To put a fine point on it, the JetKVM is pretending to be a USB HID Keyboard, so the HID keycodes (e.g KeyA, LeftShift, etc.) that the host receives are interpreted by the host+host OS. There is NO WAY to change that part of the equation.
Even more fun awaits when the Host OS lets you select your active keyboard on the fly (e.g. change the keyboard in Windows or MacOS) while you are already connected. The way things are now, your "physical keyboard" is treated "as-if" it was a physical keyboard attached to the host's USB port... so of course the host OS (and nothing else!) controls what the interpretation of the HID Keycode means.
Even, even MORE fun if the JetKVM is attached to a physical KVM, and that physical KVM is attached to multiple machines, each running a different language+keyboard layout+host OS!
In fact, that's why the Virtual Keyboard and Paste need the setting for what keyboard is desired for the host device.
What happens with Paste in that case is that we know what character the user wants typed, so we know what physical key that's located on, based on the JetKVM Keyboard Layout setting, so it actually maps to key-down/key-up on that specific physical key.
For Virtual Keyboard, we know how to map the characters shown on the virtual keycap to the HID keycode and thus we key-down/key-up that HID keycode. Noted that at this time we don't update the Virtual Keyboard appearance based on keyboard language (but we should, it's in my backlog, along with tons of keyboards including DVORAK English, etc). (Sadly, we don't currently change what's displayed for the keyboard... that's in the backlog).
What the language/keyboard setting on the JetKVM reflects what is installed/expected by the host machine+OS... because that's the machine the USB cable is connected to, It has nothing to do with what's on your side. To your point, if the remote user is using a German keyboard, connects to a US machine, it is really a matter of desire whether the pressing key next to the TAB key should result in a Q or an A... as currently specified, the character would be an A (because that's what HID KeyQ maps to in a German keyboard layout)
So what I see needing to happen to get the "finish line" is:
In a perfect world, we could sense the host's language/keyboard layout/OS and know what to do... but unfortunately that's not possible from the HID Keyboard (from the host's perspective, it's an input device). If you've ever connected a new keyboard to a MacOS, you know that it pops up a dialog to ask you to press a couple specific keys, and from that combined with the UI language selected on the MacOS it can "guess" what the layout of the physical keyboard you just plugged in has...
See this:
@plastikos commented on GitHub (Sep 30, 2025):
I see what it means to process HID keyboard events - there's utility in that. Regardless of how keyboards and events get processed it's a serious problem for using JetKVM. Until there's a way to have a unique configuration for each JetKVM connection it's effectively broken-by-design. Right now I have no way to select the keymap I need because it's not available in the JetKVM list. Even if the keymap gets added no one should rely on waiting for JetKVM to add their specific keymap - that should be something that each user can select or upload. Additional, individual key mapping overrides should also be available - such as <CAPS_LOCK> as <L_CTRL>.
Right now keymapping is so bad it's unusable.
@plastikos commented on GitHub (Sep 30, 2025):
FWIW I'm using Linux with Firefox - not Windows nor Mac OS.
@IDisposable commented on GitHub (Sep 30, 2025):
For some use-cases, we agree. For many folks who are running it as a KVM to a server, they're almost insured to be running the same keyboard on the client/browser machine as they are on the host, especially if multiple people are using the same JetKVM from different clients
Agreed that adding the ability to remember client-side preferences would be helpful, but calling it broken-by-design is a bit harsh. It works fantastically for me (as a user) when controlling a MacOS machine from a Windows machine.
Yes, I am trying to address the mappings, but understand that the only way to really do what you're hoping for is to have the client/browser be cognizant of the controller's keyboard layout, and be able to forward logical character (not keystrokes) to the device using the device's setting of the keyboard layout (as the Paste and Virtual Keyboard currently do). This is FAR less supportable/maintainable from the JetKVM side.
Totally agree. My hope is now that we have a more reliable keyboard stack that we will just allow uploading of KLC files or such so you can declare the host's keyboard layout in-use as desired.
Note that while you might have the ability to set it... there is a lot of potential for confusion if multiple people use the same JetKVM device... and then log into an OS that allows per-user keyboard layouts. Imagine trying to get that right!
That's a central part of the concept of keyboard layouts, I agree.
That's certainly your opinion, I'm sorry. I know a lot of folks are using the de-DE and they've just merged a da-DK so some folks are finding it useful.
@IDisposable commented on GitHub (Sep 30, 2025):
... and Colemac, you're not a typical user, can we agree on that point and try less "my way or the highway"?
@plastikos commented on GitHub (Sep 30, 2025):
The lantronix Spider KVM (https://www.lantronix.com/products/lantronix-spider/) passes mapped key events rather than raw HID events. There should be a connection-specific setting to choose how key events should be passed to the controlled device.
@IDisposable commented on GitHub (Nov 21, 2025):
This is coming, in my backlog
@Anachron commented on GitHub (Feb 17, 2026):
I bought a JetKVM and I'm also only now figuring all of this out.
Have a german keyboard/locale both on my host OS and the KVM client I want to remotely control.
Is there any ETA on when we can expect a first release of a remapping? Right now I can only do certain stuff, as many keys are not working ...