Alterando o layout do teclado ao conectar ou desconectar

1

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?

    
por Toothrot 28.03.2017 / 17:14

0 respostas