연결하거나 분리할 때 키보드 레이아웃 변경

연결하거나 분리할 때 키보드 레이아웃 변경

저는 노트북에 외부 키보드를 사용하고 있으며 스크립트를 사용하여 키보드 연결 여부에 따라 키보드 레이아웃을 변경하고 있습니다. 이것은 잘 작동하지만 스크립트를 수동으로 실행할 필요가 없다는 것을 알았습니다. 외부 키보드를 연결하거나 분리할 때마다 스크립트가 자동으로 실행되어야 합니다. udev 규칙을 사용하여 설정을 시도했지만 어떤 이유로 작동하지 않습니다. 내 udev 규칙은 다음과 같습니다.

KERNEL=="3-1.1", SUBSYSTEM=="usb", RUN+="/root/bin/udev.sh"

키보드를 연결하거나 분리할 때마다 스크립트가 실행되는 것을 확인했습니다. 스크립트의 내용은 다음과 같습니다.

#!/usr/bin/bash
su - toothrot -c "/usr/local/bin/loadkb.sh" &

그 내용은 /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

/root/bin/udev.shToothrot X 세션을 루트로 실행하고 있음을 확인했습니다 . 이 스크립트는 udev 규칙에 따라 실행될 때만 효과가 없습니다. 내가 무엇을 놓치고 있나요?

아니면 udev 규칙을 사용하지 않고 X 내에서 원하는 결과를 얻을 수 있는 방법이 있습니까?

답변1

에서 영감을 받다이 블로그 게시물xmodmap나는 다음 규칙을 따라야 합니다 /etc/udev/rules.d/70-usb-keyboards.rules:

ACTION=="add", ATTRS{idVendor}=="0000", ATTRS{idProduct}=="0000", RUN+="/bin/sh -c 'DISPLAY=:0.0 XAUTHORITY=/home/toothrot/.Xauthority sh -c \"setxkbmap us,gr;xmodmap /home/toothrot/.xmodmap/hh\" &'"

공급업체 및 제품 ID를 장치 값으로 바꾸고 lsusb원하는 대로 스크립트를 조정한 다음 다음을 사용하여 udev 규칙을 다시 로드하는 것을 잊지 마세요.

udevadm control --reload

나는 항상 감지를 udev에 맡기므로 키보드를 추가할 때의 규칙입니다. 삭제 작업을 수행하려면 다른 규칙 줄을 추가하세요.

ACTION=="remove"

관련 정보