USB 키보드가 연결되어 있을 때 키보드 레이아웃 재설정 방지

USB 키보드가 연결되어 있을 때 키보드 레이아웃 재설정 방지

USB 키보드를 연결할 때마다 모든 키보드의 레이아웃이 일부 시스템 기본값(원하는 대로 수정자 및 기타 키가 없는 미국 레이아웃)으로 재설정됩니다. 나는 Ubuntu 16.04 및 18.04를 포함한 많은 Debian 및 Ubuntu 시스템에서 이것을 관찰했습니다. 이 행동아주 오랫동안 주변에 있었어.

저는 데스크톱 환경 없이 X11을 사용합니다(일부 Gnome 악마는 시작하는 경향이 있지만). … | 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데비안 및 유사한 배포판에 쉽게 설치할 수 있는 프로그램은 입니다 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 스위치를 사용하여 동일한 문제가 발생했습니다. Debian/Ubuntu 파생 시스템인 Pop!_OS 20.04 LTS 시스템으로 다시 전환하면 설정이 사라집니다. 나는 gnome-tweak.Caps LockCtrl

이것이 나에게 계속 작용하는 설정입니다. gnome-tweak문제를 해결하기 위해 계속 실행할 필요가 없도록 원하는 대로 설정하는 이 명령줄 방법을 찾았습니다 .

dconf write  /org/gnome/desktop/input-sources/xkb-options "['caps:ctrl_modifier']"

매뉴얼 페이지xkeyboard-configxkb-options간단한 설명과 함께 허용되는 값 목록이 있습니다 .

문제가 발생하지 않도록 하는 방법은 모르겠지만 이제 명령줄에서 문제를 해결할 수 있으므로 덜 짜증스럽습니다.

관련 정보