On Mon, May 30, 2022 at 08:42:32AM +0800, Hilton Chain wrote: > > My understanding of Bryan's patch (in cc) was that the new config option > > worked out of the box for Keychron and Apple keyboards and allowed for > > manual configuration where required. > > > > Could you explain a bit which bug is fixed by reverting these 2 > > commits, please? I don't own a Keychron keyboard for testing, so it is > > not obvious to me why this change is required. > > I own a GANSS keyboard which encounters this issue as well, related device > information given by `lsusb -v` below: > > idVendor 0x05ac Apple, Inc. > idProduct 0x024f Aluminium Keyboard (ANSI) > iManufacturer 1 SONiX > iProduct 2 USB DEVICE > > As I searching through, I found similar reports regarding another GANSS > model[1], and other brands like Varmilo[2] (a lot!) and Keychron. As a > common pattern, they mostly use 05ac:024f. > > Currently I have two idea: > > 1. Modify Bryan's patch, so that fnmode default to 2 if device name not > starting with "Apple" (But I can't validate my assumption since I don't > own any Apple keyboards), I'll attach this patch in the next email. That could be problematic because Apple keyboards can be renamed after connecting them to a Mac. For example, the name of my keyboard is: "José Expósito’s Keyboard". > 2. Find out which quirk pattern solves this issue brute-forcely, I may > attach this patch later when I finally find a solution. > > What's your opinion? > > Stay boiled, > Hilton Chain > > --- > [1]: https://www.amazon.com/gp/customer-reviews/R1EV0B1FG21GGD > [2]: https://unix.stackexchange.com/questions/604791/keyboard-function-keys-always-trigger-media-shortcuts-regardless-of-whether-fn I think it'd be safer to assume that the device is an Apple keyboard and create exceptions for know non-Apple keyboards because the majority of the devices handled by this driver are Apple keyboards and because there is already a config option available (real_fnmode) to fix the problematic devices in the meanwhile. In my opinion, creating a function like "apple_is_non_apple_keyboard" (or similar) containing all the rules to identify devices from Keychron, GANSS, etc could do the trick. Something similar to: if (apple_is_non_apple_keyboard(hdev)) { hid_info(hdev, "Non-apple keyboard detected; function keys will default to fnmode=2 behavior\n"); asc->quirks |= APPLE_IS_NON_APPLE; } Unfortunately, I can't think of a generic way to detect those devices as they have the same vendor and product as the Apple ones :S Best wishes, Jose