USB 키보드 반복 속도 자동 설정

USB 키보드 반복 속도 자동 설정

종종 USB 키보드를 노트북에 연결하는데, 연결하면 기본 반복 속도가 원하는 대로 설정되지 않습니다. udev규칙을 추가하여 스크립트를 사용하여 변경해 보았습니다.

`ACTION=="add", ATTRS{name}=="Dell Dell Multimedia Pro Keyboard", RUN+="set-keyboard.sh"`

set-keyboard.sh스크립트 로 호출

xset -display :0 r rate 500 50; xset -display :0 b off

문제는 이렇게 하면 USB 키보드의 반복 속도와 경고음이 설정되는 것이 아니라 노트북 내장 키보드의 반복 속도와 경고음이 설정된다는 점입니다. (즉, xset q내장 키보드로 입력하면 올바른 설정이 나오는데, xset qUSB 키보드로 입력하면 여전히 잘못된 속도로 설정되어 있습니다.)

어떤 키보드를 설정할지 알 수 있는 방법이 있나요 xset? 아니면 이 문제를 해결하는 다른 방법이 있나요?

답변1

좀 더 탐색한 끝에 발견한https://bugzilla.redhat.com/show_bug.cgi?id=601853문제는 udev가 실행된 후 xorg가 키보드 속도를 재설정한다는 점일 수 있습니다. 따라서 내 udev 스크립트가 확실히 실행 중이더라도 해당 작업은 xorg에 의해 즉시 취소됩니다.

그러나 해당 페이지에는 수정 사항도 있습니다. options 으로 startx를 실행하면 startx -- -ardelay 500 -arinterval 20새 키보드가 연결되어 있어도 설정이 유지됩니다.

답변2

이 명령을 시도하여 USB 키보드의 udev ID를 확인할 수 있습니다. 다음 명령을 실행하고 키보드를 연결하세요.

$ udevadm monitor --udev --subsystem-match=usb

예 - 모니터

나는 오래된 Sun Microsystems USB 키보드를 가지고 있습니다. 플러그를 뽑았다가 다시 연결하면 다음과 같은 udev 메시지가 나타납니다.

$ udevadm monitor --udev --subsystem-match=usb
monitor will print the received events for:
UDEV - the event which udev sends out after rule processing

UDEV  [1375655040.466080] remove   /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0 (usb)
UDEV  [1375655040.557791] remove   /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2 (usb)
UDEV  [1375655044.586242] add      /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2 (usb)
UDEV  [1375655044.589087] add      /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0 (usb)
UDEV  [1375655049.880514] remove   /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0 (usb)
UDEV  [1375655049.905175] remove   /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2 (usb)

따라서 규칙에 넣을 수 있는 udev ID는 위 출력의 이 부분을 활용하게 됩니다 /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2.

예 - 내보내기

전체 udev DB를 내보내고 수동으로 스캔할 수도 있습니다.

$ udevadm info --export-db
...
P: /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2
N: bus/usb/002/009
S: char/189:136
E: UDEV_LOG=3
E: DEVPATH=/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2
E: SUBSYSTEM=usb
E: DEVNAME=bus/usb/002/009
E: ID_VENDOR=0430
E: ID_VENDOR_ENC=0430
E: ID_VENDOR_ID=0430
E: ID_MODEL=0005
E: ID_MODEL_ENC=0005
E: ID_MODEL_ID=0005
E: ID_REVISION=0102
E: ID_SERIAL=0430_0005
E: ID_BUS=usb
E: ID_USB_INTERFACES=:030101:
E: MAJOR=189
E: MINOR=136
E: DEVTYPE=usb_device
E: DRIVER=usb
E: DEVICE=/proc/bus/usb/002/009
E: PRODUCT=430/5/102
E: TYPE=0/0/0
E: BUSNUM=002
E: DEVNUM=009
E: DEVLINKS=/dev/char/189:136
...

그리고 udev 규칙에서 위 출력의 다른 고유한 기능을 활용하세요.

인용하다

답변3

이 문제를 해결하기 위해 내가 만든https://github.com/SFTtech/xautocfg.

새 키보드가 연결되면 X 서버로부터 이벤트를 받습니다. 그런 다음 키 반복 속도 및 지연 설정과 같은 구성을 키보드에 적용할 수 있습니다.

루트 권한이 필요하지 않으며 부팅 옵션을 편집 -ardelay 200 -arinterval 20하거나 해킹된 udev 규칙을 사용할 필요도 없습니다. xautocfg사용자(바람직하게는 시스템 사용자로 제공)로 실행하고 장치 구성을 업데이트하세요.

답변4

그래서 1년간의 온라인 검색 끝에 마침내 오늘 작동하게 되었습니다.

원천:https://newbedev.com/udev-rule-to-auto-load-keyboard-layout-when-usb-keyboard-plugged-in

@TomYan이 이미 언급했듯이 xset이것은 X11 프로그램입니다. 따라서 DISPLAY및 env 변수를 XAUTHORITY하드코딩 해야 합니다 .

기본적으로 해결 방법은 짧은 지연 시간을 두고 백그라운드에서 스크립트를 실행하는 것입니다. 따라서 udev는 xset 키보드보다 먼저 키보드를 활성화할 수 있습니다. 위에서 언급한 솔루션에서 udev는 백그라운드에서 두 번째 스크립트를 호출하는 스크립트를 호출하고 xset실제로 이는 단일 스크립트로 단축될 수 있습니다.

Keyboard.sh 설정

#!/usr/bin/env bash

(
    sleep 1

    DISPLAY=":0.0"
    XAUTHORITY="/home/your-profile/.Xauthority"
    export DISPLAY XAUTHORITY

    xset r rate 250 50
) &

관련 정보