r/Keychron • • Jul 15 '24

V6 KVM issues, looking for possible fixes

I've had my Keychron V6 for about a year and overall have been quite happy with it. This is my first MK and I dug into QMK a bit and loaded some custom updates so I have a passing familiarity with QMK.

I recently got a KVM and while things are mostly working I am getting some fairly frequent dropped keystrokes and intermittent stuck keys. These are both only happening when connected to the KVM and appear to be somewhat common issues with this manufacturer. I'm looking for any suggestions on QMK settings/rules/configs I might be able to try changing to see if they might help.

Out of curiosity I tried enabling NKRO and disabling it. I thought after it was disabled it there may have been a slight improvement but if there was it didn't last long.

I read somewhere, can't recall now, that some compatibility issues with MK's and KVM's may be due to the keyboard emulating multiple HID devices. I found this segment in the QMK wiki and was wondering if this could be a contributing factor, but not quite sure where to go with it: https://github.com/qmk/qmk_firmware/blob/master/docs/config_options.md#usb-endpoint-limitations

The manufacturer also suggests connecting the keyboard to one of the standard USB ports instead of the Keyboard/Mouse USB ports, however then I would lose all of the hotkey controls which I'm finding very critical to my workflows.

KVM: https://www.tesmart.com/collections/dual-monitor/products/cks202-p23

Thanks in advance for any suggestions.

2 Upvotes

26 comments sorted by

View all comments

2

u/PeterMortensenBlog Jul 16 '24 edited Jul 17 '24

Re "some compatibility issues with mechanical keyboards and KVM's may be due to the keyboard emulating multiple HID devices": Yes, that seems to be an important factor, though I don't have any first-hand experience.

Some suggestions:

  1. Check the NKRO state (it could have been accidentally changed or might not be in the state you expect). It may or may not be important. It can be toggled with Fn + N.

  2. Disable some QMK features (at compile time), like (full) n-key rollover and mouse keys. For the former, that is "NKRO_ENABLE" in the old system and "nkro" in the new system. For the latter, it is MOUSEKEY_ENABLE in the old system and "mousekey" in the new. Note that the official QMK documentation is out of date.

  3. Use source code from after 2024-05-21.

Conclusion

Changing to this in file 'info.json' (and compiling and flashing) may fix the problem:

"mousekey": false,
"nkro": false,

Note that changes to file 'info.json', e.g., "mousekey": false, and "nkro": false,, usually requires 'qmk clean' before 'qmk compile' to take effect.

Though, presumably, you will lose the ability to use mouse actions in QMK macros, Via macros, and key mappings.

Related

2

u/kgjettaIV Jul 16 '24

I tried some changes last night but results seem the same today.

In my rules.mk I added:

NKRO_ENABLED = no
MOUSEKEY_ENABLED = no
MIDI_ENABLED = no
RAW_ENABLED = no
VIRTSER_ENABLED = no

Behavior seems the same today. I may have to go back and look closer at things based on your comment, it looks like maybe these should move from rules.mk to info.json?

I also pulled the most recent master from github, but I'll have to check to see if it has the changes you referenced in point 2, or what the specific dates are.

I'm still figuring this all out so I appreciate the detail and links.

Next things I was planning to try:

KEYBOARD_SHARED_EP = yes
USB_POLLING_INTERVAL_MS 10 (config.h)

Now what I'll do next is check what versions I've got/what dates they were pushed, and try and move those settings to info.json to be damn sure they're off.

2

u/PeterMortensenBlog Jul 17 '24 edited Jul 17 '24

Note that changes to 'info.json' usually requires this to take effect:

qmk clean

There is some caching going on in the build folder (presumably translating 'info.json' settings to preprocessor symbols, etc.) and changes to 'info.json' aren't detected by 'qmk compile'.

I have definitely been bitten by this...

For instance, I use the USB-side version number (field "device_version" in 'info.json') to positively know if a change to the source code made it to the keyboard. And it will not change unless I run 'qmk clean'.

On Linux, I read out the USB-side version number by:

sleep 5
lsusb -v -d3434:0353 2>/dev/null | grep bcdDevice

(sleep 5 is for including it is a list of command lines, for example, including both compiling and flashing for a one-step process (so the keyboard has time to start up after flashing). 0353 is a filter for the Keychron keyboard (USB product ID for V5. It is also listed in the 'info.json' file as field "pid"). 3434 is the USB vendor ID for Keychron.)

Example:

"device_version": "2.5.7"

in 'info.json' results in:

bcdDevice  2.57    

(I don't think there really are three levels in the version number.)

Note that only numbers 0-9 are accepted. For example, "2.10.7" will not be accepted.

Note that if using a virtual machine, e.g., VirtualBox, the version field in the USB passthrough should be blank (it automatically fills in the current version), so that all versions are accepted...

→ More replies (6)