저는 리눅스 민트 20을 사용하고 있습니다. udev 규칙은 나를 불안하게 만듭니다. 때로는 작동하지만 때로는 작동하지 않습니다.
다시 말하지만, 오늘은 일하지 않습니다.
나는 항상 네트워크를 통해 내용을 복사한 다음 조정하고 결국 작동하는 구성을 얻었지만 몇 주/달 후에 작동이 중단된다는 사실을 알게 되었습니다.
한번에 확실한 해결책을 얻고 싶습니다.
내가 원하는 것: 키보드를 노트북에 연결하면 외부 USB 키보드 구성이 자동으로 변경됩니다(쓰기를 위해 대문자와 Ctrl+Lwin을 교체).
내가 뭘 한거지:
a) 내 USB 키보드 장치 정보를 가져옵니다.
# lsusb |grep Dell
Bus 001 Device 045: ID 413c:2107 Dell Computer Corp.
b) 내 /etc/udev/rules.d/90-keyboard_swapcaps.rules에 다음을 추가했습니다.
## DEBUG
ACTION=="change", ATTRS{idVendor}=="413c", ATTRS{idProduct}=="2107", RUN+="/bin/sh -c 'echo == >> /tmp/udev-env.txt; env >> /tmp/udev-env.txt'"
# ACTUAL
ACTION=="change", ATTRS{idVendor}=="413c", ATTRS{idProduct}=="2107", ENV{XKBLAYOUT}="fr", ENV{XKBOPTIONS}+="ctrl:swapcaps", ENV{XKBOPTIONS}+="compose:lwin"
c) 그런 다음 다음을 실행했습니다.
# udevadm control --reload-rules && udevadm trigger
- 내가 얻는 것:
a) 키보드 구성에는 변경 사항이 없습니다.
b) 모니터링
# udevadm monitor -u
...
UDEV [10555.979594] add /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1.2/1-1.2:1.0/0003:413C:2107.001E/input/input55 (input)
UDEV [10555.989903] add /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1.2/1-1.2:1.0/0003:413C:2107.001E/input/input55/input55::numlock (leds)
UDEV [10555.992442] add /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1.1/1-1.1:1.0/0003:046D:C077.001D/input/input54 (input)
UDEV [10555.994812] add /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1.2/1-1.2:1.0/0003:413C:2107.001E/input/input55/input55::scrolllock (leds)
UDEV [10556.001225] add /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1.2/1-1.2:1.0/0003:413C:2107.001E/hidraw/hidraw1 (hidraw)
UDEV [10556.003513] add /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1.1/1-1.1:1.0/0003:046D:C077.001D/input/input54/mouse1 (input)
UDEV [10556.005834] add /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1.1/1-1.1:1.0/0003:046D:C077.001D/hidraw/hidraw0 (hidraw)
UDEV [10556.010005] add /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1.2/1-1.2:1.0/0003:413C:2107.001E/input/input55/input55::capslock (leds)
UDEV [10556.019614] change /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1.2/1-1.2:1.0/0003:413C:2107.001E/input/input55/input55::numlock (leds)
UDEV [10556.021307] change /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1.2/1-1.2:1.0/0003:413C:2107.001E/input/input55/input55::scrolllock (leds)
UDEV [10556.022045] add /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1.2/1-1.2:1.0/0003:413C:2107.001E/input/input55/event20 (input)
UDEV [10556.024438] change /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1.2/1-1.2:1.0/0003:413C:2107.001E/input/input55/input55::capslock (leds)
UDEV [10556.026259] bind /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1.2/1-1.2:1.0/0003:413C:2107.001E (hid)
이는 장치가 감지되었으며 정확하다는 것을 알려줍니다.
c) /tmp/udev-env.txt에는 다음과 유사한 줄이 많이 있습니다.
...
==
ID_FOR_SEAT=leds-pci-0000_00_14_0-usb-0_1_2_1_0
ACTION=change
TRIGGER=kbd-scrolllock
SEQNUM=17431
USEC_INITIALIZED=10059229961
TAGS=:seat:
XKBLAYOUT=fr
XKBOPTIONS=ctrl:swapcaps compose:lwin
DEVPATH=/devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1.2/1-1.2:1.0/0003:413C:2107.001C/input/input53/input53::scrolllock
SUBSYSTEM=leds
ID_PATH=pci-0000:00:14.0-usb-0:1.2:1.0
ID_PATH_TAG=pci-0000_00_14_0-usb-0_1_2_1_0
PWD=/
이는 규칙이 일치하고 적용되었음을 알려줍니다.
키보드 구성을 변경할 수 없는 이유는 무엇입니까?
답변1
환경 변수는 하위 프로세스에서 상위 프로세스로 전파되지 않고 상위 프로세스에서 하위 프로세스로만 전파됩니다. 그리고 udev 규칙에서 실행되는 모든 항목은 일반적으로 GUI 세션 환경에 액세스할 수 없습니다.
RUN+=
귀하의 경우, udev 규칙 섹션에 의해 시작된 쉘 프로세스에는 XKBLAYOUT
원하는 방식으로 설정된 및 환경 변수가 있어야 합니다. XKBOPTIONS
그러나 RUN+=...
명령이 완료되면 쉘이 종료되고 수정된 환경 변수는 아무 영향도 없이 사라집니다.
이러한 환경 변수는 해당 정보가 setxkbmap
배포판의 X11 세션 설정의 표준 부분으로 발생할 수 있는 명령이나 유사한 명령으로 전달되는 경우에만 적용됩니다. X11 서버에 값을 전달하지 않고 단순히 변수 자체를 설정하는 것은 키보드 레이아웃에 아무런 영향을 주지 않습니다.
X11 세션 설정은 일반적으로 GUI 응용 프로그램에 합리적인 환경을 제공하기 위해 유사한 쉘 시작 파일에서 제공되므로 이러한 변수를 다음과 같이 /etc/profile
설정하는 것으로 충분할 수 있습니다./etc/profile.d/*.sh
나타나다일하다. 그러나 진짜 마법은 변수에 있는 것이 아니라 setxkbmap -layout $XKBLAYOUT ...
이러한 변수 또는 이에 상응하는 값을 기반으로 수행되는 X11 세션 설정 프로세스에 있습니다. 이것은 전혀 제공되지 않는 udev 규칙의 일부입니다.
udev 규칙의 실행 컨텍스트는 GUI 세션의 실행 컨텍스트와 완전히 독립적입니다. 따라서 이러한 변수를 사용하여 X11 서버에 변경 사항을 전달하는 명령을 추가하더라도 udev 규칙에 의해 시작된 셸에는 GUI 세션을 참조하는 변수 setxkbmap
가 없으므로 명령은 단순히 오류 메시지를 표시합니다.DISPLAY
XAUTHORITY
Cannot open display
( 변수 요소DISPLAY
와~/.Xauthority
XAUTHORITY
실망스럽게도 있습니다.거의이 문제를 깔끔하게 해결해주는 기능입니다. /etc/udev/hwdb.d/70-keyboard.hwdb
다음 내용으로 이름이 지정된 파일을 만들 수 있습니다 .
evdev:input:b????v413Cp2107e*
XKB_FIXED_LAYOUT="fr"
# XKB_FIXED_OPTIONS="ctrl:swapcaps compose:lwin" # Unfortunately this part has not been implemented yet!
내가 이해한 바에 따르면 X11 키보드 레이아웃을 지정할 수 있습니다.이 특정 키보드에만 사용 가능, 레이아웃이 다른 다른 키보드가 시스템에 연결되어 있어도 마찬가지입니다. 죄송합니다. 지정된 섹션은 허용됩니다.옵션XKB 키보드 레이아웃 사양의 일부(이 부분이 여러분에게 중요한 부분인 것 같습니다)가 구현되지 않았습니다.