![USB 키보드가 연결되어 있을 때 키보드 레이아웃이 재설정되지 않도록 방지](https://linux55.com/image/155009/USB%20%ED%82%A4%EB%B3%B4%EB%93%9C%EA%B0%80%20%EC%97%B0%EA%B2%B0%EB%90%98%EC%96%B4%20%EC%9E%88%EC%9D%84%20%EB%95%8C%20%ED%82%A4%EB%B3%B4%EB%93%9C%20%EB%A0%88%EC%9D%B4%EC%95%84%EC%9B%83%EC%9D%B4%20%EC%9E%AC%EC%84%A4%EC%A0%95%EB%90%98%EC%A7%80%20%EC%95%8A%EB%8F%84%EB%A1%9D%20%EB%B0%A9%EC%A7%80.png)
USB 키보드를 연결할 때마다 모든 키보드의 레이아웃이 일부 시스템 기본값(원하는 수정자와 추가 키가 없는 미국 레이아웃)으로 재설정됩니다. 나는 Ubuntu 16.04 및 18.04를 포함한 많은 Debian 및 Ubuntu 시스템에서 이것을 관찰했습니다. 그런 행동오랫동안 주변에 있었어.
저는 데스크톱 환경 없이 X11을 사용하고 있습니다(일부 Gnome 악마는 X11을 사용하기 시작하는 경향이 있지만). … | xkbcomp - "$DISPLAY"
로그인할 때 XKB(구체적으로)를 사용하여 키보드 레이아웃을 설정합니다.
USB 키보드를 연결할 때 시스템 레이아웃이 아닌 내 레이아웃을 갖기를 원합니다. 실제로 시스템이 기존 키보드(있는 경우)와 새로 삽입된 키보드 모두에 대해 현재 레이아웃을 계속 사용하기를 원합니다. 이것이 가능하지 않다면 레이아웃을 다시 적용하기로 결정하겠습니다.나선택되었습니다.
마찬가지로 두 키보드의 반복 속도는 를 사용하여 설정한 속도가 아니라 로그인 시 기본값으로 설정됩니다 xset r
.
키보드 핫플러그가 키보드 레이아웃과 반복 속도를 재설정하는 것을 방지하는 방법은 무엇입니까?아니면 실패할 경우 최소한 내가 선택한 레이아웃으로 재설정하려면 어떻게 해야 합니까?
다소 서투른 방법은udev 규칙 사용. 이는 X 서버가 하나만 있다고 가정하기 때문에 서투른데, 가장 문제는 사용자가 루트 권한을 가지고 있다고 가정한다는 것입니다.루트 권한이 없습니다, 따라서 udev 규칙 설정이나 편집과 관련된 내용은 Xorg.conf
여기에 적용되지 않습니다.
답변1
xkbcomp - "$DISPLAY"
로그인할 때 XKB를 사용하여 키보드 레이아웃(구체적으로... | )을 설정합니다.키보드 핫플러그가 키보드 레이아웃과 반복 속도를 재설정하는 것을 방지하는 방법은 무엇입니까?
재설정하는 것은 아닙니다. 이미 키보드가 연결되어 있고 두 번째 키보드를 추가하는 경우 이전 키보드는 계속해서 동일한 설정을 사용합니다.
문제는 xkb 구성 클라이언트 측( 사용 xkbcomp
) 또는 서버 측( 사용 setxkbmap
)을 로드하면 "코어 키보드" 추상화가 아닌 기존 실제 장치에만 레이아웃이 적용된다는 것입니다. 장치의 플러그를 뽑으면 해당 설정이 손실됩니다.
해결책은 키보드를 추가하고 통화 xkbcomp
/ setxkbmap
원하는 설정을 사용할 때 자신을 모니터링하는 것입니다.xset r rate
이를 위해 당신은아니요udev 규칙이나 루트 권한이 필요하지 않습니다.어느X11 클라이언트 프로그램은 입력 장치의 변경 사항을 모니터링하고 X11 입력 확장을 통해 해당 장치에서 작동할 수 있습니다.
이 프로그램은 쉘에서 사용할 수 있으며 apt-get
Debian 및 유사한 배포판에 쉽게 설치할 수 있습니다 inputplug
.
예:
$ cat ./on-new-kbd
#! /bin/sh
keymap=/path/to/your/keymap
echo >&2 "$@"
event=$1 id=$2 type=$3
case "$event $type" in
'XIDeviceEnabled XISlaveKeyboard')
xset r rate 200 50
xkbcomp -i "$id" "$keymap" "$DISPLAY"
esac
$ chmod 755 ./on-new-kbd
$ inputplug -d -c ./on-new-kbd
<plug keyboard>
XIDeviceEnabled 13 XISlavePointer GASIA USB KB V11
XISlaveAdded 13 XIFloatingSlave GASIA USB KB V11
XISlaveAdded 14 XIFloatingSlave GASIA USB KB V11
XIDeviceEnabled 14 XISlaveKeyboard GASIA USB KB V11
-i
옵션에 유의하세요 xkbcomp
. 각 키보드마다 다른 설정을 사용할 수 있습니다. 이 프로토콜을 사용하면 장치별로 반복 속도를 설정할 수도 있지만 어떻게 사용하는지 모르겠습니다 xset
.
물론 창 관리자/데스크톱 환경 자체가 이러한 이벤트를 수신하고 설정을 무시할 수 있습니다.
답변2
두 시스템 간에 키보드를 공유하기 위해 USB 스위치를 사용하는 경우에도 동일한 문제가 발생했습니다. Pop!_OS 20.04 LTS 시스템(Debian/Ubuntu 파생)으로 다시 전환했을 때 설정이 사라졌습니다. 나는 하나처럼 행동하기 위해 gnome-tweak
설정을 사용해 왔습니다 .Caps LockCtrl
이것은 항상 나에게 효과적이었던 설정입니다. gnome-tweak
문제를 해결하기 위해 계속 실행할 필요가 없도록 원하는 대로 설정하는 이 명령줄 방법을 찾았습니다 .
dconf write /org/gnome/desktop/input-sources/xkb-options "['caps:ctrl_modifier']"
매뉴얼 페이지xkeyboard-config
xkb-options
간단한 설명과 함께 허용되는 값 목록이 있습니다 .
이 문제가 발생하는 것을 방지하는 방법을 모르겠지만 이제는 명령줄에서 문제를 해결할 수 있으므로 더 이상 짜증나지 않습니다.