All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
- DDC/CI monitor switching (Dell U3821DW) - HID++ Logitech peripheral switching (MX Keys S, MX Master 3S) - Scripts for bidirectional switching - Troubleshooting guide and reference Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
4.9 KiB
4.9 KiB
One-Key KVM: Mac ↔ Nobara
Status: WIP - Scripts created, needs testing
Hardware: Dell U3821DW, MX Keys S, MX Master 3S
Updated: 2026-02-01
Overview
Software KVM solution to switch the Dell U3821DW ultrawide monitor and Logitech MX peripherals between Mac (MacBook Pro M3) and Nobara Linux using DDC/CI and HID++ commands.
Hardware Mapping
Monitor Inputs
| Input | Code | Port | Computer |
|---|---|---|---|
| USB-C | 27 | USB-C | Mac |
| HDMI 2 | 18 | HDMI 2 | Nobara |
Peripheral Channels
| Channel | Code | Connection | Computer |
|---|---|---|---|
| 1 | 0x00 | Bluetooth | Mac |
| 2 | 0x01 | Logi Bolt USB | Nobara |
Devices
- Monitor: Dell U3821DW (38" Ultrawide, DDC/CI enabled)
- Keyboard: Logitech MX Keys S (Easy-Switch capable)
- Mouse: Logitech MX Master 3S (Easy-Switch capable)
- Receiver: Logi Bolt USB (PID: 046d:c548)
Prerequisites
Mac
# Install m1ddc (DDC control for Apple Silicon)
brew install m1ddc
# Install hidapitester (HID control)
curl -sL https://github.com/todbot/hidapitester/releases/latest/download/hidapitester-macos-arm64.zip -o /tmp/hidapitester.zip
unzip -o /tmp/hidapitester.zip -d ~/bin/
chmod +x ~/bin/hidapitester
Nobara (Linux)
# Install ddcutil
sudo dnf install ddcutil
# Add user to i2c group (requires reboot)
sudo usermod -aG i2c $USER
# Install hidapitester
curl -sL https://github.com/todbot/hidapitester/releases/latest/download/hidapitester-linux-amd64.zip -o /tmp/hidapitester.zip
unzip -o /tmp/hidapitester.zip -d ~/bin/
chmod +x ~/bin/hidapitester
# Udev rule for non-root HID access
echo 'SUBSYSTEM=="usb", ATTRS{idVendor}=="046d", ATTRS{idProduct}=="c548", MODE="0666"' | \
sudo tee /etc/udev/rules.d/99-logitech-bolt.rules
sudo udevadm control --reload-rules && sudo udevadm trigger
Scripts
Switch to Nobara (Run on Mac)
Location: ~/scripts/to_nobara.sh
#\!/bin/bash
# KVM Switch: Mac → Nobara
set -e
echo "Switching to Nobara..."
# Switch Monitor to HDMI 2
m1ddc set input 18
# Switch Mouse to Bolt (Channel 2)
~/bin/hidapitester --vid 046d --pid c548 --usage 0x0001 --usagePage 0xff00 \
--open --length 7 --send-output "0x10,0x01,0x09,0x1b,0x01,0x00,0x00"
# Switch Keyboard to Bolt (Channel 2)
~/bin/hidapitester --vid 046d --pid c548 --usage 0x0001 --usagePage 0xff00 \
--open --length 7 --send-output "0x10,0x02,0x09,0x1b,0x01,0x00,0x00"
echo "Done\!"
Switch to Mac (Run on Nobara)
Location: ~/scripts/to_mac.sh
#\!/bin/bash
# KVM Switch: Nobara → Mac
set -e
echo "Switching to Mac..."
# Switch Monitor to USB-C
ddcutil setvcp 60 27
# Switch Mouse to Bluetooth (Channel 1)
~/bin/hidapitester --vid 046d --pid c548 --usage 0x0001 --usagePage 0xff00 \
--open --length 7 --send-output "0x10,0x01,0x09,0x1b,0x00,0x00,0x00"
# Switch Keyboard to Bluetooth (Channel 1)
~/bin/hidapitester --vid 046d --pid c548 --usage 0x0001 --usagePage 0xff00 \
--open --length 7 --send-output "0x10,0x02,0x09,0x1b,0x00,0x00,0x00"
echo "Done\!"
Keyboard Shortcuts
Mac (Logi Options+)
- Logi Options+ → MX Keys S → Smart Actions
- Create "KVM Switch" action
- Trigger: F12
- Action: System → Open File →
~/scripts/to_nobara.sh
Nobara (GNOME)
- Settings → Keyboard → Custom Shortcuts
- Command:
/home/USER/scripts/to_mac.sh - Shortcut: F12
Troubleshooting
Monitor doesn't switch
- DDC/CI disabled: Monitor Menu → Others → DDC/CI → On
- USB-C hub blocking DDC: Connect monitor directly to Mac USB-C port
- Linux permissions: Ensure user in
i2cgroup, reboot after adding
Peripherals don't switch
- Wrong device index: The 0x01/0x02 values depend on Bolt pairing order
# Find correct indices on machine with Bolt receiver hidapitester --vid 046d --pid c548 --list-detail - Different Bolt PID: Some receivers have different product IDs
hidapitester --list | grep 046d
HID++ Command Reference
| Byte | Purpose | Values |
|---|---|---|
| 0x10 | Report ID (short) | Fixed |
| 0x01/0x02 | Device index | Mouse=0x01, Keyboard=0x02 (may vary) |
| 0x09 | Feature index | Change Host feature |
| 0x1b | Function | Set host |
| 0x00/0x01 | Channel | 0x00=Ch1, 0x01=Ch2, 0x02=Ch3 |
DDC Input Codes (Dell U3821DW)
| Input | Code | Hex |
|---|---|---|
| DisplayPort 1 | 15 | 0x0F |
| DisplayPort 2 | 16 | 0x10 |
| HDMI 1 | 17 | 0x11 |
| HDMI 2 | 18 | 0x12 |
| USB-C | 27 | 0x1B |
Files Location
Scripts are stored on Mac at ~/scripts/:
to_nobara.sh- Switch to Nobara (run on Mac)to_mac.sh- Switch to Mac (copy to Nobara)debug_kvm.sh- Diagnostic scriptsetup_nobara.sh- Nobara setup script
TODO
- Test monitor switching with DDC/CI enabled
- Verify Bolt receiver PID on Nobara
- Confirm device indices for keyboard/mouse
- Set up keyboard shortcuts on both machines
- Test bidirectional switching