Published on

External Keypad for OBS Controls

Authors

The idea: use a cheap USB numeric keypad as a dedicated control surface for OBS, with each key remapped to a distinct hotkey combination that OBS can listen for.

The Open Source tool for the job is keyd - a key remapping daemon that works at the kernel level, so it applies system-wide before any application sees the input.

FWIW, I bought the extra keypad itself from Aliexpress for <USD 15.

Install keyd

su

cd ~
git clone https://github.com/rvaiya/keyd
cd keyd/
make
make install

systemctl enable --now keyd

Identify the keypad’s device ID

Plug in the keypad and run keyd monitor while pressing a few keys. The output will show the device ID — look for the first 4:4 hex digits at the start:

keyd monitor

For example, the device ID might look like 13ba:0001.

Configure the key remapping

Create /etc/keyd/default.conf with the keypad’s device ID in the [ids] section, then map each keypad key to a unique Ctrl+Shift+Alt+Fn combination that OBS hotkeys can be bound to:

joe /etc/keyd/default.conf
[ids]

# This file applies to the external numberpad only (look at keyd monitor)
# uses the first 4:4 digits
13ba:0001

[main]
# keypress (from keyd monitor) -> key output 
#   Note that OBS does not allow for function keys F13+, 
#     so we have to use unusual key combos (the following were all unused)

kp0 = C-S-A-f1

kp1 = C-S-f1
kp2 = C-S-f2
kp3 = C-S-f3

kp4 = C-S-f4
kp5 = C-S-f5
kp6 = C-S-f6

kp7 = C-S-f7
kp8 = C-S-f8
kp9 = C-S-f9

kpdot     = C-S-A-f2
kpenter   = C-S-A-f3
backspace = C-S-A-f4

kpplus    = C-S-A-f5
kpminus   = C-S-A-f6
kpasterisk= C-S-A-f7
kpslash   = C-S-A-f8

# use 'keyd reload' to update from these settings

To apply the changes without restarting the daemon:

keyd reload

Bind the hotkeys in OBS

In OBS Studio, go to Settings → Hotkeys and assign each scene or action to the corresponding Ctrl+Shift+(Alt+)Fn combination.

The keypad keys now trigger those combinations, giving a dedicated one-handed control surface.


All Done!