Using Logitech MX Master 4 and MX Keys S simultaneously

Hei ho together,

I recently discovered with joy the native support of my MX Master 4 and really do enjoy the endless possibilities this offers. Once again, BTT is an amazing tool beyond anything else on the market!

In order to setup and use the mouse properly, I need to delete Logitech’s Option+ Software (wich isn’t a pity). Sadly, this also makes me lose the functions personalizable keys of my MX Keys S.

How can I use the MX Master 4 with BTT, and keep on the functions of the F5-F7 and F17-19 keys of the MX Keys S?

Thank you so much!

Bests and merry Xmas,

Caliguvara

Support for Logitech Keyboards will also soon be added, they speak the same protocol as their mice. Until then you probably need to stick to logitech options!

What kind of functions are you currently using on the keyboard tht can not be configured in BTT?

1 Like

The individually programmable keys (Dication, Emojipicker, Microphone, and on the right Calculator, Screenshot and Context Menu) are not recognized at all :slightly_frowning_face:

I would also like to add the brightness keys (F1 and 2) to toggle the brightness of my BenQ Display, but BTT does not “see” these entries.

thanks for the info! I have ordered some of these logitech keyboards, most likely I need to apply thr same logic as for the mice.

2 Likes

“Some” O_o

According to their never ending spam, you’ll get some desk pads for free till Christmas :sweat_smile:

That’s great news!!
We can’t use volume up/ins button on MX Keys Mini with BTT, because its not a function key and only logitech can access the key.

So when i use function keys as function keys (via Logitech options), volume up button goes to waste.

I love that this is about to change thanks to BTT

I have implemented support for the keyboards today (only tested with the MX Keys so far), I'll upload an alpha version later today.

2 Likes

I have just uploaded v5.806 alpha.

Currently to add a Logitech Keyboard Configuration you need to click on an existing shortcut and select this option:

Then you need to select your keyboard here and click the apply button:

There are currently no further options, right now it disables all of the special button's default behaviors and instead allows you to remap / override them in BTT:

1 Like

my keyboard is mx keys s. The function keys can not be recognized.

did you select the keyboard in the logitech keyboard configuration setup and click the apply button?
Also make sure all Logitech software is uninstalled.

I'll receive a mx keys s soon to test with!

sure

Same problem here. Hitting f.eg. the Calculator key ist not recognized. Neither are the Dictation and Microphone key. The Emoji key comes back as ^⌘Space.

I'll receive my MX Keys S tomorrow. However I will never have all Logitech products available for testing (there are even different models of the MX Keys S) so I added a button to retrieve Logitech Debug logs in v5.810. It will run for 10 seconds and copy some useful logs to your clipboard. It would be great if you could post these logs here:

Here is the log:

Summary

LOGI LOG: ========================================
LOGI LOG: BTT Logitech Debug Information
LOGI LOG: Timestamp: 2025-12-21 17:17:04
LOGI LOG: macOS: Version 26.2 (Build 25C56)
LOGI LOG: ========================================
LOGI LOG:
LOGI LOG: Step 1: Stopping Logitech Manager...
LOGI LOG: BTTLogitechManager: Stopping...
LOGI LOG: BTTLogitechManager: Setting ONBOARD mode on 2 device(s) before shutdown...
LOGI LOG: BTTLogitechManager: :white_check_mark: ONBOARD mode set on 0 device(s), skipped 2 (shutdown complete)
LOGI LOG: BTTHIDPPProtocol: :cross_mark: Unregistered protocol 0xb47091d40 for deviceIndex 1 (remaining protocols for this device: 0)
LOGI LOG: BTTHIDPPProtocol: Last protocol for this device - will unregister callback
LOGI LOG: BTTHIDPPProtocol: Skipping all IOKit cleanup (shared device for receiver slot 1)
LOGI LOG: BTTHIDPPProtocol: Skipping all IOKit cleanup (shared device for receiver slot 1)
LOGI LOG: BTTHIDPPProtocol: :cross_mark: Unregistered protocol 0xb47091e00 for deviceIndex 0 (remaining protocols for this device: 1)
LOGI LOG: BTTLogitechManager: Stopped
LOGI LOG: Step 2: Restarting Logitech Manager...
LOGI LOG: BTTLogitechManager: Starting device discovery...
LOGI LOG: BTTLogitechManager: Started successfully
LOGI LOG: Step 3: Calling initializeLogitechMice...
LOGI LOG: Step 4: Waiting 5 seconds for device initialization...
LOGI LOG: BTTLogitechManager: Found HID interface - MX KEYS S - Interface: ?, Usage Page: 0x0001, Usage: 0x0006
LOGI LOG: BTTLogitechManager: :white_check_mark: Accepted - Bluetooth Logitech device (HID++ over keyboard interface) [known device]
LOGI LOG: BTTLogitechManager: Device connected - MX KEYS S (046d:b378)
LOGI LOG: BTTHIDPPDevice: Initializing with deviceIndex=1, IOHIDDevice retain count=3
LOGI LOG: BTTHIDPPDevice: Receiver slot 1 - using receiver IDs: 046d:b378
LOGI LOG: Known device: Logitech MX Keys S (046d:b378) with quirk: 0, type: 1, deviceIndex: 1, transport: USB
LOGI LOG: BTTHIDPPProtocol: Bluetooth device detected - forcing LONG reports only
LOGI LOG: BTTHIDPPProtocol: Starting protocol (deviceIndex: 1, isSharedDevice: 1)...
LOGI LOG: BTTHIDPPProtocol: :white_check_mark: Registered protocol 0xb484f79c0 for deviceIndex 1 (total protocols for this device: 1)
LOGI LOG: BTTHIDPPProtocol: Shared device - skipping open/schedule (already done by receiver setup)
LOGI LOG: BTTHIDPPProtocol: First protocol for this receiver - registering shared input callback
LOGI LOG: BTTHIDPPProtocol: Supports short reports: NO, long reports: YES
LOGI LOG: BTTLogitechManager: Bluetooth device detected - waiting 1.5s before starting feature discovery for Logitech MX Keys S...
LOGI LOG: BTTLogitechManager: Found HID interface - ERGO M575S - Interface: ?, Usage Page: 0x0001, Usage: 0x0002
LOGI LOG: BTTLogitechManager: :white_check_mark: Accepted - Bluetooth Logitech device (HID++ over mouse interface) [generic]
LOGI LOG: BTTLogitechManager: Device connected - ERGO M575S (046d:b041)
LOGI LOG: BTTHIDPPDevice: Initializing with deviceIndex=0, IOHIDDevice retain count=3
LOGI LOG: Unknown device: ERGO M575S (046d:b041) - using feature discovery, deviceIndex: 0, transport: Bluetooth Low Energy
LOGI LOG: BTTHIDPPProtocol: Bluetooth device detected - forcing LONG reports only
LOGI LOG: BTTHIDPPProtocol: Starting protocol (deviceIndex: 0, isSharedDevice: 0)...
LOGI LOG: BTTHIDPPProtocol: :white_check_mark: Registered Bluetooth protocol 0xb484f5860 for BOTH deviceIndex 0 and 255 (0xFF)
LOGI LOG: BTTHIDPPProtocol: Non-shared device - registering dedicated input callback
LOGI LOG: BTTHIDPPProtocol: :white_check_mark: Device opened successfully
LOGI LOG: BTTHIDPPProtocol: Supports short reports: NO, long reports: YES
LOGI LOG: BTTLogitechManager: Bluetooth device detected - waiting 1.5s before starting feature discovery for ERGO M575S...
LOGI LOG: BTTLogitechManager: Starting feature discovery for Logitech MX Keys S...
LOGI LOG: BTTHIDPPFeatureCache: :white_check_mark: Found cached features for 046d:b378:slot1 (cached 2025-12-17 00:05:41 +0000)
LOGI LOG: BTTHIDPPDevice: :high_voltage: Using cached features for Logitech MX Keys S (34 features)
LOGI LOG: BTTHIDPPProtocol: Pre-populated feature cache with 34 features
LOGI LOG: BTTHIDPPDevice: Cached protocol: 4.5
LOGI LOG: BTTHIDPPProtocol: :white_check_mark: Registered event handler for feature 0x1B04 (protocol 0xb484f79c0, deviceIndex 1)
LOGI LOG: Total event handlers registered: 1
LOGI LOG: Button Manager supported
LOGI LOG: Checking scroll wheel features...
LOGI LOG: SmartShift (0x2110): :cross_mark: NO
LOGI LOG: SmartShift Enhanced (0x2111): :cross_mark: NO
LOGI LOG: HiRes Wheel (0x2121): :cross_mark: NO
LOGI LOG: Thumbwheel (0x2150): :cross_mark: NO
LOGI LOG: Wheel Analytics (0x2250): :cross_mark: NO
LOGI LOG: Wheel Mode Status (0x2251): :cross_mark: NO
LOGI LOG: No scroll wheel features supported
LOGI LOG: BTTHIDPPDevice: Device type from database: KEYBOARD
LOGI LOG: Applying default device configuration...
LOGI LOG: :magnifying_glass_tilted_left: Attempting to query device name via HID++ feature 0x0005...
LOGI LOG: :white_check_mark: Device supports feature 0x0005, querying name length...
LOGI LOG: BTTLogitechManager: Starting feature discovery for ERGO M575S...
LOGI LOG: BTTHIDPPFeatureCache: :white_check_mark: Found cached features for 046d:b041 (cached 2025-12-17 00:05:40 +0000)
LOGI LOG: BTTHIDPPDevice: :high_voltage: Using cached features for ERGO M575S (28 features)
LOGI LOG: BTTHIDPPProtocol: Pre-populated feature cache with 28 features
LOGI LOG: BTTHIDPPDevice: Cached protocol: 4.5
LOGI LOG: BTTHIDPPProtocol: :white_check_mark: Registered event handler for feature 0x1B04 (protocol 0xb484f5860, deviceIndex 0)
LOGI LOG: Total event handlers registered: 1
LOGI LOG: Button Manager supported
LOGI LOG: DPI Manager supported
LOGI LOG: Checking scroll wheel features...
LOGI LOG: SmartShift (0x2110): :cross_mark: NO
LOGI LOG: SmartShift Enhanced (0x2111): :cross_mark: NO
LOGI LOG: HiRes Wheel (0x2121): :cross_mark: NO
LOGI LOG: Thumbwheel (0x2150): :cross_mark: NO
LOGI LOG: Wheel Analytics (0x2250): :white_check_mark: YES
LOGI LOG: Wheel Mode Status (0x2251): :cross_mark: NO
LOGI LOG: No scroll wheel features supported
LOGI LOG: BTTHIDPPDevice: Device type confirmed as MOUSE (has mouse-specific features)
LOGI LOG: Applying default device configuration...
LOGI LOG: :magnifying_glass_tilted_left: Attempting to query device name via HID++ feature 0x0005...
LOGI LOG: :white_check_mark: Device supports feature 0x0005, querying name length...
LOGI LOG: BTTHIDPPProtocol: :magnifying_glass_tilted_left: INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x03, address=0x08
LOGI LOG: BTTHIDPPProtocol: :magnifying_glass_tilted_left: Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: :white_check_mark: Matched to pending request (feat=0x03, func=0x00)
LOGI LOG: Device name length: 20 bytes
LOGI LOG: Reading device name chunk at offset 0/20...
LOGI LOG: BTTHIDPPProtocol: :magnifying_glass_tilted_left: INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x03, address=0x18
LOGI LOG: BTTHIDPPProtocol: :magnifying_glass_tilted_left: Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: :white_check_mark: Matched to pending request (feat=0x03, func=0x01)
LOGI LOG: Read 16 bytes: "ERGO M575S Track"
LOGI LOG: Reading device name chunk at offset 16/20...
LOGI LOG: BTTHIDPPProtocol: :magnifying_glass_tilted_left: INCOMING MESSAGE: deviceIdx=0x00, sub_id(featureIdx)=0x03, address=0x18
LOGI LOG: BTTHIDPPProtocol: :magnifying_glass_tilted_left: Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: :white_check_mark: Matched to pending request (feat=0x03, func=0x01)
LOGI LOG: Read 4 bytes: "ball"
LOGI LOG: :memo: Device name assembled: "ERGO M575S Trackball" (20 bytes)
LOGI LOG: :white_check_mark: Device name from HID++: ERGO M575S Trackball
LOGI LOG: BTTLogitechManager: :memo: Device name updated to: ERGO M575S Trackball
LOGI LOG: BTTLogitechManager: :white_check_mark: Device ready - ERGO M575S Trackball (Protocol 4.5)
LOGI LOG: BTTLogitechManager: :white_check_mark: Device ready - ERGO M575S Trackball (Protocol 4.5)
LOGI LOG: BTTLogitechManager: Device ERGO M575S Trackball has no onboard profiles - skipping auto ONBOARD mode
LOGI LOG: BTTHIDPPProtocol: :magnifying_glass_tilted_left: INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x03, address=0x08
LOGI LOG: BTTHIDPPProtocol: :magnifying_glass_tilted_left: Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: :white_check_mark: Matched to pending request (feat=0x03, func=0x00)
LOGI LOG: Device name length: 9 bytes
LOGI LOG: Reading device name chunk at offset 0/9...
LOGI LOG: BTTHIDPPProtocol: :magnifying_glass_tilted_left: INCOMING MESSAGE: deviceIdx=0x01, sub_id(featureIdx)=0x03, address=0x18
LOGI LOG: BTTHIDPPProtocol: :magnifying_glass_tilted_left: Checking 1 pending requests for match
LOGI LOG: BTTHIDPPProtocol: :white_check_mark: Matched to pending request (feat=0x03, func=0x01)
LOGI LOG: Read 9 bytes: "MX Keys S"
LOGI LOG: :memo: Device name assembled: "MX Keys S" (9 bytes)
LOGI LOG: :white_check_mark: Device name from HID++: MX Keys S
LOGI LOG: BTTLogitechManager: :memo: Device name updated to: MX Keys S
LOGI LOG: BTTLogitechManager: :white_check_mark: Device ready - MX Keys S (Protocol 4.5)
LOGI LOG: BTTLogitechManager: :white_check_mark: Device ready - MX Keys S (Protocol 4.5)
LOGI LOG: BTTLogitechManager: Device MX Keys S has no onboard profiles - skipping auto ONBOARD mode
LOGI LOG:
LOGI LOG: ========================================
LOGI LOG: Connected Devices Summary:
LOGI LOG: ========================================
LOGI LOG: - MX Keys S (VID:0x046d PID:0xb378) Ready:YES Type:Keyboard
LOGI LOG: - ERGO M575S Trackball (VID:0x046d PID:0xb041) Ready:YES Type:Mouse
LOGI LOG: ========================================
LOGI LOG: End of Debug Information
LOGI LOG: ========================================

Thank you!
BTT 5.814 (uploading now) should add support for the MX Keys S and various other logitech keyboards.

Also added two new predefined actions: "Logitech: Increase Keyboard Brightness" and "Logitech: Decrease Keyboard Brightness".

I’d like to ditch Logitech options+ since it’s not realiable.
shortcuts, sometimes fail if the app isn’t opened in the background.

Is there a guide on how to customize the MOUSE buttons, to keyboard shortcuts in an effective way?

Everytime I try a solution by adding a mouse shortcut, it doesn’t trigger. On the Mx Master.

One example of a shortcut would be the “BACK” button, to be “F5” instead. So that I can use it with modifiers for different functions.

Or the “Horizontal scroll right” to be “F6”, etc.

this is my setup:

it doesn’t “listen” to the currently pressed modifier keys, limiting the shortcuts available on my workflow. Is there a workaround for this?

I'm not 100% sure I understood the issue correctly, but have you tried this option for your shortcuts?

tested it right now, so if I hold “shift” and “scroll left” only “F6” is being sent as a shortcut, not “shift+F6”. I checked both boxes for “auto adapt to current…” and “include currently…”

How did you test it?

I just tried to reproduce the issue by setting mission control in system settings => keyboard => shortcuts to shift+f7, then I configured the mouse button like this:

It seems to work fine here, i.e. pressing shift while clicking the right-mouse button results in showing mission control.