Skip to content

[Bug] 2.4GHz Mode - Function Keys stuck in Multimedia Mode on MacOS and Linux #43

Open

Description

@KingJesus6

Describe the Bug

The function keys seem to be stuck in multimedia mode, where F1 is brightness down, F2 is brightness up, F3 is launchpad, etc. Pressing FN + desired function key still sends these multimedia keys. This issue occurs on both my MacOS and Linux system.

  • The issue does not occur in Wired nor Bluetooth mode.
  • I have tried remapping the function keys to completely different keys using via but these keys still perform the multimedia functions regardless. I tried remapping with both the battery switch ON and OFF.
  • Reflashing the 2.0.0 firmware did not fix the issue.
  • Swapping between Windows/Mac mode on the keyboard did not make a difference.
  • On my Windows system, the keyboard works as intended in 2.4GHz mode.

My Linux system is running Fedora 44 (7.1.3-200.fc44.x86_6). Not sure if this is useful, but after a refresh reflash and everything default, evtest logs this. (/dev/input/event4 seems to capture all normal keypresses like the letters, numbers, Shift, Enter, etc. Cycling through F1-F12 without the Fn key logs an event here):

user@linux-desktop:~$ sudo evtest
[sudo] password for user:
No device specified, trying to scan all of /dev/input/event*
Available devices:
/dev/input/event4: Bridge75 2.4G
/dev/input/event6: Bridge75 2.4G
/dev/input/event7: Bridge75 2.4G
Select the device event number [0-26]: 4
Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0x5ac product 0x24f version 0x100
Input device name: "Bridge75 2.4G"
Supported events:
...
Properties:
Testing ... (interrupt to exit)
Event: time 1784077693.059582, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70028
Event: time 1784077693.059582, type 1 (EV_KEY), code 28 (KEY_ENTER), value 0
Event: time 1784077693.059582, -------------- SYN_REPORT ------------
Event: time 1784077699.028739, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70004
Event: time 1784077699.028739, type 1 (EV_KEY), code 30 (KEY_A), value 1
Event: time 1784077699.028739, -------------- SYN_REPORT ------------
aEvent: time 1784077699.123735, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70004
Event: time 1784077699.123735, type 1 (EV_KEY), code 30 (KEY_A), value 0
Event: time 1784077699.123735, -------------- SYN_REPORT ------------
Event: time 1784077700.518781, type 4 (EV_MSC), code 4 (MSC_SCAN), value 7003a
Event: time 1784077700.518781, type 1 (EV_KEY), code 224 (KEY_BRIGHTNESSDOWN), value 1
Event: time 1784077700.518781, -------------- SYN_REPORT ------------
Event: time 1784077700.610777, type 4 (EV_MSC), code 4 (MSC_SCAN), value 7003a
Event: time 1784077700.610777, type 1 (EV_KEY), code 224 (KEY_BRIGHTNESSDOWN), value 0
Event: time 1784077700.610777, -------------- SYN_REPORT ------------
Event: time 1784077700.819779, type 4 (EV_MSC), code 4 (MSC_SCAN), value 7003b
Event: time 1784077700.819779, type 1 (EV_KEY), code 225 (KEY_BRIGHTNESSUP), value 1
Event: time 1784077700.819779, -------------- SYN_REPORT ------------
Event: time 1784077700.949781, type 4 (EV_MSC), code 4 (MSC_SCAN), value 7003b
Event: time 1784077700.949781, type 1 (EV_KEY), code 225 (KEY_BRIGHTNESSUP), value 0
Event: time 1784077700.949781, -------------- SYN_REPORT ------------
Event: time 1784077701.487794, type 4 (EV_MSC), code 4 (MSC_SCAN), value 7003c
Event: time 1784077701.487794, type 1 (EV_KEY), code 120 (KEY_SCALE), value 1
Event: time 1784077701.487794, -------------- SYN_REPORT ------------
Event: time 1784077701.620798, type 4 (EV_MSC), code 4 (MSC_SCAN), value 7003c
Event: time 1784077701.620798, type 1 (EV_KEY), code 120 (KEY_SCALE), value 0
Event: time 1784077701.620798, -------------- SYN_REPORT ------------
Event: time 1784077701.754797, type 4 (EV_MSC), code 4 (MSC_SCAN), value 7003d
Event: time 1784077701.754797, type 1 (EV_KEY), code 204 (KEY_DASHBOARD), value 1
Event: time 1784077701.754797, -------------- SYN_REPORT ------------
Event: time 1784077701.856802, type 4 (EV_MSC), code 4 (MSC_SCAN), value 7003d
Event: time 1784077701.856802, type 1 (EV_KEY), code 204 (KEY_DASHBOARD), value 0
Event: time 1784077701.856802, -------------- SYN_REPORT ------------
Event: time 1784077702.104810, type 4 (EV_MSC), code 4 (MSC_SCAN), value 7003e
Event: time 1784077702.104810, type 1 (EV_KEY), code 229 (KEY_KBDILLUMDOWN), value 1
Event: time 1784077702.104810, -------------- SYN_REPORT ------------
Event: time 1784077702.204808, type 4 (EV_MSC), code 4 (MSC_SCAN), value 7003e
Event: time 1784077702.204808, type 1 (EV_KEY), code 229 (KEY_KBDILLUMDOWN), value 0
Event: time 1784077702.204808, -------------- SYN_REPORT ------------
Event: time 1784077702.392817, type 4 (EV_MSC), code 4 (MSC_SCAN), value 7003f
Event: time 1784077702.392817, type 1 (EV_KEY), code 230 (KEY_KBDILLUMUP), value 1
Event: time 1784077702.392817, -------------- SYN_REPORT ------------
Event: time 1784077702.503821, type 4 (EV_MSC), code 4 (MSC_SCAN), value 7003f
Event: time 1784077702.503821, type 1 (EV_KEY), code 230 (KEY_KBDILLUMUP), value 0
Event: time 1784077702.503821, -------------- SYN_REPORT ------------
Event: time 1784077702.698833, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70040
Event: time 1784077702.698833, type 1 (EV_KEY), code 165 (KEY_PREVIOUSSONG), value 1
Event: time 1784077702.698833, -------------- SYN_REPORT ------------
Event: time 1784077702.808828, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70040
Event: time 1784077702.808828, type 1 (EV_KEY), code 165 (KEY_PREVIOUSSONG), value 0
Event: time 1784077702.808828, -------------- SYN_REPORT ------------
Event: time 1784077703.003834, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70041
Event: time 1784077703.003834, type 1 (EV_KEY), code 164 (KEY_PLAYPAUSE), value 1
Event: time 1784077703.003834, -------------- SYN_REPORT ------------
Event: time 1784077703.084837, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70041
Event: time 1784077703.084837, type 1 (EV_KEY), code 164 (KEY_PLAYPAUSE), value 0
Event: time 1784077703.084837, -------------- SYN_REPORT ------------
Event: time 1784077703.336842, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70042
Event: time 1784077703.336842, type 1 (EV_KEY), code 163 (KEY_NEXTSONG), value 1
Event: time 1784077703.336842, -------------- SYN_REPORT ------------
Event: time 1784077703.441850, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70042
Event: time 1784077703.441850, type 1 (EV_KEY), code 163 (KEY_NEXTSONG), value 0
Event: time 1784077703.441850, -------------- SYN_REPORT ------------
Event: time 1784077703.678849, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70043
Event: time 1784077703.678849, type 1 (EV_KEY), code 113 (KEY_MUTE), value 1
Event: time 1784077703.678849, -------------- SYN_REPORT ------------
Event: time 1784077703.775854, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70043
Event: time 1784077703.775854, type 1 (EV_KEY), code 113 (KEY_MUTE), value 0
Event: time 1784077703.775854, -------------- SYN_REPORT ------------
Event: time 1784077704.046859, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70044
Event: time 1784077704.046859, type 1 (EV_KEY), code 114 (KEY_VOLUMEDOWN), value 1
Event: time 1784077704.046859, -------------- SYN_REPORT ------------
Event: time 1784077704.175862, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70044
Event: time 1784077704.175862, type 1 (EV_KEY), code 114 (KEY_VOLUMEDOWN), value 0
Event: time 1784077704.175862, -------------- SYN_REPORT ------------
Event: time 1784077704.352865, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70045
Event: time 1784077704.352865, type 1 (EV_KEY), code 115 (KEY_VOLUMEUP), value 1
Event: time 1784077704.352865, -------------- SYN_REPORT ------------
Event: time 1784077704.466871, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70045
Event: time 1784077704.466871, type 1 (EV_KEY), code 115 (KEY_VOLUMEUP), value 0
Event: time 1784077704.466871, -------------- SYN_REPORT ------------

evtest on /dev/input/event7 logs events when I press Fn + Function key. Fn + F4 reports "KEY_UNKNOWN" as seen below. Fn + F5 & Fn + F6 actually instead registers events on /dev/input/event4 but respectively send KEY_KBDILLUMDOWN and KEY_KBDILLUMUP.

Select the device event number [0-26]: 7
Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0x5ac product 0x24f version 0x100
Input device name: "Bridge75 2.4G"
...
Testing ... (interrupt to exit)
Event: time 1784077987.261926, type 4 (EV_MSC), code 4 (MSC_SCAN), value c0070
Event: time 1784077987.261926, type 1 (EV_KEY), code 224 (KEY_BRIGHTNESSDOWN), value 1
Event: time 1784077987.261926, -------------- SYN_REPORT ------------
Event: time 1784077987.348920, type 4 (EV_MSC), code 4 (MSC_SCAN), value c0070
Event: time 1784077987.348920, type 1 (EV_KEY), code 224 (KEY_BRIGHTNESSDOWN), value 0
Event: time 1784077987.348920, -------------- SYN_REPORT ------------
Event: time 1784077988.559959, type 4 (EV_MSC), code 4 (MSC_SCAN), value c006f
Event: time 1784077988.559959, type 1 (EV_KEY), code 225 (KEY_BRIGHTNESSUP), value 1
Event: time 1784077988.559959, -------------- SYN_REPORT ------------
Event: time 1784077988.680958, type 4 (EV_MSC), code 4 (MSC_SCAN), value c006f
Event: time 1784077988.680958, type 1 (EV_KEY), code 225 (KEY_BRIGHTNESSUP), value 0
Event: time 1784077988.680958, -------------- SYN_REPORT ------------
Event: time 1784077989.267969, type 4 (EV_MSC), code 4 (MSC_SCAN), value c029f
Event: time 1784077989.267969, type 1 (EV_KEY), code 120 (KEY_SCALE), value 1
Event: time 1784077989.267969, -------------- SYN_REPORT ------------
Event: time 1784077989.363970, type 4 (EV_MSC), code 4 (MSC_SCAN), value c029f
Event: time 1784077989.363970, type 1 (EV_KEY), code 120 (KEY_SCALE), value 0
Event: time 1784077989.363970, -------------- SYN_REPORT ------------
Event: time 1784077989.539974, type 4 (EV_MSC), code 4 (MSC_SCAN), value c02a0
Event: time 1784077989.539974, type 1 (EV_KEY), code 240 (KEY_UNKNOWN), value 1
Event: time 1784077989.539974, -------------- SYN_REPORT ------------
Event: time 1784077989.618977, type 4 (EV_MSC), code 4 (MSC_SCAN), value c02a0
Event: time 1784077989.618977, type 1 (EV_KEY), code 240 (KEY_UNKNOWN), value 0
Event: time 1784077989.618977, -------------- SYN_REPORT ------------
Event: time 1784077990.387990, type 4 (EV_MSC), code 4 (MSC_SCAN), value c00b6
Event: time 1784077990.387990, type 1 (EV_KEY), code 165 (KEY_PREVIOUSSONG), value 1
Event: time 1784077990.387990, -------------- SYN_REPORT ------------
Event: time 1784077990.474997, type 4 (EV_MSC), code 4 (MSC_SCAN), value c00b6
Event: time 1784077990.474997, type 1 (EV_KEY), code 165 (KEY_PREVIOUSSONG), value 0
Event: time 1784077990.474997, -------------- SYN_REPORT ------------
Event: time 1784077990.659004, type 4 (EV_MSC), code 4 (MSC_SCAN), value c00cd
Event: time 1784077990.659004, type 1 (EV_KEY), code 164 (KEY_PLAYPAUSE), value 1
Event: time 1784077990.659004, -------------- SYN_REPORT ------------
Event: time 1784077990.757007, type 4 (EV_MSC), code 4 (MSC_SCAN), value c00cd
Event: time 1784077990.757007, type 1 (EV_KEY), code 164 (KEY_PLAYPAUSE), value 0
Event: time 1784077990.757007, -------------- SYN_REPORT ------------
Event: time 1784077991.298030, type 4 (EV_MSC), code 4 (MSC_SCAN), value c00b5
Event: time 1784077991.298030, type 1 (EV_KEY), code 163 (KEY_NEXTSONG), value 1
Event: time 1784077991.298030, -------------- SYN_REPORT ------------
Event: time 1784077991.386020, type 4 (EV_MSC), code 4 (MSC_SCAN), value c00b5
Event: time 1784077991.386020, type 1 (EV_KEY), code 163 (KEY_NEXTSONG), value 0
Event: time 1784077991.386020, -------------- SYN_REPORT ------------
Event: time 1784077991.565025, type 4 (EV_MSC), code 4 (MSC_SCAN), value c00e2
Event: time 1784077991.565025, type 1 (EV_KEY), code 113 (KEY_MUTE), value 1
Event: time 1784077991.565025, -------------- SYN_REPORT ------------
Event: time 1784077991.648027, type 4 (EV_MSC), code 4 (MSC_SCAN), value c00e2
Event: time 1784077991.648027, type 1 (EV_KEY), code 113 (KEY_MUTE), value 0
Event: time 1784077991.648027, -------------- SYN_REPORT ------------
Event: time 1784077993.100065, type 4 (EV_MSC), code 4 (MSC_SCAN), value c00ea
Event: time 1784077993.100065, type 1 (EV_KEY), code 114 (KEY_VOLUMEDOWN), value 1
Event: time 1784077993.100065, -------------- SYN_REPORT ------------
Event: time 1784077993.203066, type 4 (EV_MSC), code 4 (MSC_SCAN), value c00ea
Event: time 1784077993.203066, type 1 (EV_KEY), code 114 (KEY_VOLUMEDOWN), value 0
Event: time 1784077993.203066, -------------- SYN_REPORT ------------
Event: time 1784077993.367071, type 4 (EV_MSC), code 4 (MSC_SCAN), value c00e9
Event: time 1784077993.367071, type 1 (EV_KEY), code 115 (KEY_VOLUMEUP), value 1
Event: time 1784077993.367071, -------------- SYN_REPORT ------------
Event: time 1784077993.444074, type 4 (EV_MSC), code 4 (MSC_SCAN), value c00e9
Event: time 1784077993.444074, type 1 (EV_KEY), code 115 (KEY_VOLUMEUP), value 0
Event: time 1784077993.444074, -------------- SYN_REPORT ------------

Keyboard Used

Bridge75 Plus ANSI

Link to product page (if applicable)

No response

Operating System

No response

qmk doctor Output


Is AutoHotKey / Karabiner installed

  • AutoHotKey (Windows)
  • Karabiner (macOS)

Other keyboard-related software installed

No response

Additional Context

No response

Activity

  1. grantfanian commented on Aug 16, 2026

    @grantfanian

    The root cause is that the wireless controller (CH582F) and 2.4 GHz dongle hardcode Apple vendor ID 0x05AC and product ID 0x024F across both 2.4 GHz wireless and Bluetooth LE modes like this.

    Bus 006 Device 010: ID 05ac:024f Apple, Inc. Aluminium Keyboard (ANSI)
    

    Because the device advertises 05ac:024f:

    • Linux matches the ID and binds the hid-apple kernel driver to both USB (0003:05AC:024F, the 2.4 GHz receiver) and Bluetooth (0005:05AC:024F, bus IDs and device numbers vary per system). By default, hid-apple sets fnmode=1, which intercepts standard F1 to F12 scan codes (0x7003a to 0x70045) in kernel space and translates them into media events (KEY_BRIGHTNESSDOWN, KEY_VOLUMEUP, etc.). Changing assignments in VIA has no effect because hid-apple translates whatever F-key code arrives at the kernel level.
    • macOS treats 05ac:024f as an official Apple keyboard, binding the top row to system controls unless overridden in system settings.
    • Windows binds generic USB HID drivers without Apple-specific remapping, leaving the F-row alone.

    Workaround

    Linux: Set fnmode=2 on hid_apple so F1 to F12 default to standard function keys without requiring the Fn key:

    echo "options hid_apple fnmode=2" | sudo tee /etc/modprobe.d/hid_apple.conf
    echo 2 | sudo tee /sys/module/hid_apple/parameters/fnmode

    If hid_apple is included in your initramfs, rebuild it to persist across reboots (sudo dracut -f on Fedora or sudo update-initramfs -u on Debian/Ubuntu).

    Note: This setting applies globally to all devices managed by hid_apple. If you also use a genuine Apple keyboard on the same system, you can isolate settings per device or physical port using custom udev rules or sysfs attributes.

    macOS: Open System Settings > Keyboard > Keyboard Shortcuts > Function Keys and enable "Use F1, F2, etc. keys as standard function keys".

    Potential permanent fix (through proprietary firmware)

    In wired USB mode, the board enumerates with its configured VID/PID (22E1:F00D).

    For wireless modes:

    • 2.4 GHz Dongle: The main MCU (WB32 running QMK) already sends the 0xAD (md_send_vpid()) configuration packet containing VENDOR_ID and PRODUCT_ID over UART during pairing. However, the payload is either not forwarded over RF by the CH582F wireless slave or ignored/unpersisted by the USB receiver firmware, leaving the receiver's USB Device Descriptor fixed to 05AC:024F. Updating the wireless firmware stack to handle and persist 0xAD (or defaulting the receiver to the board's native VID/PID) will resolve this in 2.4 GHz mode.
    • Bluetooth LE: The CH582F UART protocol only provides command 0xA9 to configure the device name string; it has no command to set the BLE PnP ID (GATT characteristic 0x2A50). Changing the BLE Vendor/Product ID requires updating the CH582F binary image to change its default GATT DIS records.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workinghelp wantedExtra attention is needed

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions