xmodmap automático para teclados bluetooth no Linux
/etc/udev/rules.d/50-bluetooth.rules
ACTION=="add", SUBSYSTEM=="input", ATTRS{uniq}=="<keyboard-mac-address>", RUN+="/home/cleber/bin/on-bt-keyboard-connected.sh"
Preste atenção ao <keyboard-mac-address>
. Você pode vê-lo usando o comando bluetoothctl
:
$ bluetoothctl
[prompt] devices
Device F4:73:xx:xx:xx:xx Keyboard K380
Device 2E:D6:xx:xx:xx:xx Philips TAT1215
bin/on-bt-keyboard-connected.sh
#!/bin/bash
export DISPLAY=:0.0
(
sleep 2.5
su -c 'xmodmap /home/cleber/.Xmodmap' cleber
# su -c 'command' user
) &
O sleep
é necessário (pelo que entendi) porque o Xorg demora um pouco para “carregar” o teclado depois que o mesmo é detectado pelo udev
.
~/.Xmodmap
No meu caso, eu mapeio o CTRL para a tecla Caps Lock, enquanto o Caps Lock mesmo vai parar na right-CTRL.
$ cat ~/.Xmodmap
remove Lock = Caps_Lock
keysym Caps_Lock = Control_L
add Control = Control_L
remove Control = Control_R
add Lock = Control_R