Eu uso um teclado externo com meu laptop e um script para alterar o layout do teclado, dependendo se o teclado está conectado Isso funciona bem, mas acho que não deveria ser necessário executar o script manualmente: ele deve rodar sozinho sempre que o externo o teclado está ligado ou desligado. Eu tentei configurar isso com um regra do udev, mas por algum motivo não funciona. Minha regra do udev é:
KERNEL=="3-1.1", SUBSYSTEM=="usb", RUN+="/root/bin/udev.sh"
Confirmei que esse script é executado uma vez sempre que eu conecto o teclado dentro ou fora. O conteúdo do script é:
#!/usr/bin/bash
su - toothrot -c "/usr/local/bin/loadkb.sh" &
E o conteúdo de /usr/local/bin/loadkb.sh
é:
#!/bin/bash
export DISPLAY=:0
export XAUTHORITY=/home/toothrot/.Xauthority
export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
killall xcape
if lsusb | grep HHKB
then {
setxkbmap us,gr \
-variant carpalx-plus-intl,daedalus \
-option grp:win_space_toggle \
-option lv3:rwin_switch \
-option altwin:meta_alt \
-option shift:breaks_caps \
-option lv5:lsgt_switch_lock
xmodmap ~/.xmodmap/hh
xcape -e 'Shift_L=F13;Shift_R=F14;Super_L=Prior;Hyper_L=Prior'
}
else {
setxkbmap us,gr \
-variant carpalx-plus-intl,daedalus \
-option grp:win_space_toggle \
-option lv3:ralt_switch \
-option altwin:meta_alt \
-option shift:breaks_caps -option lv5:lsgt_switch_lock
xmodmap ~/.xmodmap/apple
xcape -e 'Control_L=Escape;Shift_L=F14;Shift_R=F13;Alt_L=Escape;Alt_R=Escape'
}
fi
Confirmei que executar /root/bin/udev.sh
como trabalho raiz
para a minha sessão de dente-de-gato X. Somente quando executado por uma regra do udev, o
roteiro não funciona. O que estou perdendo?
Ou existe uma maneira de alcançar o resultado que eu quero sem usar um regra do udev, talvez de dentro do X?