I received my UHK 80 yesterday, and I’m so far loving the experience! I’m having to get used to the layout (first split keyboard for me), but I’m already feeling an easing in the discomfort I was starting to get with a “regular” keyboard.
Experience & Positives
-
The keyboard feels very solid and well-built! I’m loving the typing experience, it’s very comfortable and well-laid-out, feeling like a premium product (which you’d hope given the price, but I’m very happy to find the hardware exceeding expectations).
-
I ordered all of the right half mouse modules to find out which works best for me, and by far I find the Trackpoint to be the most ergonomic to me. I am biased by having used laptops with it in the past, but I love the lack of need to move my in large motions as I use it.
-
I’m already finding myself using the Mouse layer more than I expected. My usual mouse is the Logitech MX Master 3S (which I personally believe to be the best mouse ever manufactured), but I’ve been sticking more to the keyboard, either using the Trackpoint or the Mouse layer.
Issues & Bugs
- I haven’t been able to upgrade the Dongle firmware from 12.4.0. When I do the update from Agent (AppImage), it reports that
/dev/ttyACM1
doesn’t exist. I have confirmed that/dev/ttyACM1
does appear during the upgrade with awatch ls...
, and I’m in group with access to it (uucp
). A firmware upgrade (to the same firmware version, as my unit came with 13.0.1) without the dongle connected does however succeed on both halves (though the Trackpoint module stays stuck at 10.4.0). Unlike in Error updating UHK80 from 12.4.0 to 13.0.0: cannot open /dev/ttyACM0 · Issue #2573 · UltimateHackingKeyboard/agent · GitHub, the error I get is that the device isn’t found, not that permission is denied. The log is pasted below.
Dongle Firmware Upgrade Error Log
Start flashing firmware
[DeviceService] stop poll UHK Device
[DeviceService] stopped poll UHK Device
[DeviceService] Operating system: Linux 6.13.8-arch1-1 x64
[DeviceService] Agent version: 6.0.0
[DeviceService] New firmware version: 13.0.1
[DeviceService] New firmware user config version: 9.0.0
[DeviceService] UHK Dongle firmware upgrade starts: {"id":5,"asCliArg":"dongle","firmwareUpgradeMethod":"mcuboot","logName":"UHK Dongle","name":"UHK Dongle","keyboard":[{"vid":14248,"pid":5}],"bootloader":[{"vid":14248,"pid":4}],"buspal":[],"reportId":4}
[UhkHidDevice] Available devices changed.
[UhkHidDevice] Added: {"vendorId":"0x37A8","productId":"0x9","path":"/dev/hidraw0","serialNumber":"1235453265","manufacturer":"Ultimate Gadget Laboratories","product":"UHK 80 Right USB","release":1,"interface":0,"usagePage":1,"usage":6}
[UhkHidDevice] Added: {"vendorId":"0x37A8","productId":"0x9","path":"/dev/hidraw3","serialNumber":"1235453265","manufacturer":"Ultimate Gadget Laboratories","product":"UHK 80 Right USB","release":1,"interface":2,"usagePage":65280,"usage":1}
[UhkHidDevice] Added: {"vendorId":"0x37A8","productId":"0x9","path":"/dev/hidraw13","serialNumber":"1235453265","manufacturer":"Ultimate Gadget Laboratories","product":"UHK 80 Right USB","release":1,"interface":3,"usagePage":12,"usage":1}
[UhkHidDevice] Added: {"vendorId":"0x37A8","productId":"0x5","path":"/dev/hidraw4","serialNumber":"4294967295","manufacturer":"Ultimate Gadget Laboratories","product":"UHK dongle","release":1,"interface":0,"usagePage":1,"usage":6}
[UhkHidDevice] Added: {"vendorId":"0x37A8","productId":"0x5","path":"/dev/hidraw8","serialNumber":"4294967295","manufacturer":"Ultimate Gadget Laboratories","product":"UHK dongle","release":1,"interface":2,"usagePage":65280,"usage":1}
[UhkHidDevice] Added: {"vendorId":"0x37A8","productId":"0x5","path":"/dev/hidraw6","serialNumber":"4294967295","manufacturer":"Ultimate Gadget Laboratories","product":"UHK dongle","release":1,"interface":3,"usagePage":12,"usage":1}
[UhkHidDevice] Added: {"vendorId":"0x37A8","productId":"0x5","path":"/dev/hidraw9","serialNumber":"4294967295","manufacturer":"Ultimate Gadget Laboratories","product":"UHK dongle","release":1,"interface":4,"usagePage":1,"usage":5}
[UhkHidDevice] Used device: {"vendorId":"0x37A8","productId":"0x5","path":"/dev/hidraw8","serialNumber":"4294967295","manufacturer":"Ultimate Gadget Laboratories","product":"UHK dongle","release":1,"interface":2,"usagePage":65280,"usage":1}
[UhkHidDevice] productId: 5 protocol versions: {"firmwareVersion":"12.4.0","deviceProtocolVersion":"4.14.1","moduleProtocolVersion":"4.3.0","userConfigVersion":"8.3.0","hardwareConfigVersion":"1.0.0","smartMacrosVersion":"3.2.0"}
[DeviceService] Current Dongle built firmware checksum: f7d57b27642cdbd8d9f164bcf6cb9c7d
[DeviceService] New Dongle firmware checksum: cd5c6cbdbe028b188403f77b62967578
[UhkOperations] Start flashing device firmware with mcuboot
[UhkOperations] Start flashing UHK Dongle firmware with mcumgr
[UhkOperations] Reenumerate bootloader
[UhkHidDevice] Device communication closing.
[UhkHidDevice] Device communication closed.
[UhkHidDevice] Start reenumeration, mode: Bootloader, timeout: 5000ms
[UhkHidDevice] Reenumeration error. We hope it would not break the process TypeError: Cannot write to hid device at qr.reenumerate (/tmp/.mount_UHK.AgJQtm9v/resources/app.asar/electron-main.js:5:1104902) at async Vn.updateFirmwareWithMcuManager (/tmp/.mount_UHK.AgJQtm9v/resources/app.asar/electron-main.js:5:1137335) at async Fs.updateFirmware (/tmp/.mount_UHK.AgJQtm9v/resources/app.asar/electron-main.js:5:1192417) at async $s.process (/tmp/.mount_UHK.AgJQtm9v/resources/app.asar/electron-main.js:5:1184261)
[UhkHidDevice] closing normal keyboard after reenumeration
[UhkHidDevice] Could not find reenumerated device: Bootloader. Waiting...
[UhkHidDevice] Available devices changed.
[UhkHidDevice] Removed: {"vendorId":"0x37A8","productId":"0x9","path":"/dev/hidraw0","serialNumber":"1235453265","manufacturer":"Ultimate Gadget Laboratories","product":"UHK 80 Right USB","release":1,"interface":0,"usagePage":1,"usage":6}
[UhkHidDevice] Removed: {"vendorId":"0x37A8","productId":"0x9","path":"/dev/hidraw1","serialNumber":"1235453265","manufacturer":"Ultimate Gadget Laboratories","product":"UHK 80 Right USB","release":1,"interface":1,"usagePage":1,"usage":2}
[UhkHidDevice] Removed: {"vendorId":"0x37A8","productId":"0x9","path":"/dev/hidraw3","serialNumber":"1235453265","manufacturer":"Ultimate Gadget Laboratories","product":"UHK 80 Right USB","release":1,"interface":2,"usagePage":65280,"usage":1}
[UhkHidDevice] Removed: {"vendorId":"0x37A8","productId":"0x9","path":"/dev/hidraw13","serialNumber":"1235453265","manufacturer":"Ultimate Gadget Laboratories","product":"UHK 80 Right USB","release":1,"interface":3,"usagePage":12,"usage":1}
[UhkHidDevice] Removed: {"vendorId":"0x37A8","productId":"0x5","path":"/dev/hidraw4","serialNumber":"4294967295","manufacturer":"Ultimate Gadget Laboratories","product":"UHK dongle","release":1,"interface":0,"usagePage":1,"usage":6}
[UhkHidDevice] Removed: {"vendorId":"0x37A8","productId":"0x5","path":"/dev/hidraw7","serialNumber":"4294967295","manufacturer":"Ultimate Gadget Laboratories","product":"UHK dongle","release":1,"interface":1,"usagePage":1,"usage":2}
[UhkHidDevice] Removed: {"vendorId":"0x37A8","productId":"0x5","path":"/dev/hidraw8","serialNumber":"4294967295","manufacturer":"Ultimate Gadget Laboratories","product":"UHK dongle","release":1,"interface":2,"usagePage":65280,"usage":1}
[UhkHidDevice] Removed: {"vendorId":"0x37A8","productId":"0x5","path":"/dev/hidraw6","serialNumber":"4294967295","manufacturer":"Ultimate Gadget Laboratories","product":"UHK dongle","release":1,"interface":3,"usagePage":12,"usage":1}
[UhkHidDevice] Removed: {"vendorId":"0x37A8","productId":"0x5","path":"/dev/hidraw9","serialNumber":"4294967295","manufacturer":"Ultimate Gadget Laboratories","product":"UHK dongle","release":1,"interface":4,"usagePage":1,"usage":5}
[UhkHidDevice] Device communication closing.
[UhkOperations] Init SerialPeripheral: /dev/ttyACM1
[UhkOperations] Read UHK Dongle firmware from file
[UhkOperations] Write memory with mcumgr
[UhkHidDevice] Device communication closing..
[UhkHidDevice] Device communication closed.
[DeviceService] updateFirmware error {"message":"Error: No such file or directory, cannot open /dev/ttyACM1","stack":"Error: Error: No such file or directory, cannot open /dev/ttyACM1"}
[DeviceService] start poll UHK Device
Error: No such file or directory, cannot open /dev/ttyACM1
When I try to pair the keyboard to a Windows computer over BLE, I get a right-half crash and restart, without it ever prompting for a PIN (and the pairing fails).On my Linux desktop, pairing works fine, but I can’t get input to work. There’s no assigned device Connection for it on the keyboard, and no input seems to get sent to the computer.EDIT: Trying the firmware at [Dev build] Testing request: Bluetooth ble-hid-to-ble-hid switchovers has fixed some of the issues. I’m now able to pair and use the Linux computer, and pair the Windows device. I can initially use the Windows device but as soon as I switch away it gets stuck in a fast connect-disconnect loop (switching between the normal device name and the “NUS” one), and I can never switch back to it.
Minor Issues & “Feedback”
-
It would be nice to have a default pre-programmed macro for entering Bluetooth pairing mode. While Agent is required to take full advantage of the keyboard, out-of-the-box it would be handy to have the ability to force pairing mode.
-
When I plug in the Dongle on my Windows work computer, I get a pop-up asking me how I’d like to open an
ms-gamebar
URL (Gamebar isn’t installed on it, so it was prompting me to open the Microsoft Store to install it). -
I believe that it’s already planned, but I would like an option to limit battery charging to 80%. While I want batteries for the occasional wireless use, it would be nice to keep them as healthy as possible. I care more about long-term battery health than current usable capacity.
-
With the Riser 80, there’s some flex towards the front left corner of the right half. This isn’t an “issue” on the left half (20 deg) because of its shorter length (and maybe steeper angle), but the right half (15 deg) does noticeably flex under the weight of my wrist resting on it. It’s not a problem, just something I notice (though I can see having individual risers for each half significantly increasing cost).
-
I slightly wish that the right half modules had an extra key to use as “B”. I’m sure I’ll get used to it in time, but I find myself reaching for “B” in the empty space beside “N” when writing certain words. Though I can also see that being challenging for ergonomics.
Overall, I’m very happy with my purchase! I hope that the existing software bugs get fixed soon, but I already have others around me eyeing my keyboard with interest, considering getting one of their own.