I'm not from GL. I write my own USB HID handlers and I'm being nosy about bad protocol that exists in the wild. Was the 0 byte in some input report? In a descriptor? Somewhere else?
TLDR - GLKVM's kernel emits a trailing 0-byte DATA packet (ZLP) (which PiKVM does not)
Supposedly, this is due to the `req->zero = ((count % maxpacket) == 0)` line in the kernel's f_hid.c - which, for 8-byte HID keyboard reports, makes it append a trailer packet. Strict BIOS HID stacks treat this 0-byte packet as malformed and beep.
Interesting. My first thought is wondering whether the keyboard HID is adding report IDs to its input reports, because it isn't in boot mode or something. That would have that effect.