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

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

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-getDebian 및 유사한 배포판에 쉽게 설치할 수 있습니다 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-configxkb-options간단한 설명과 함께 허용되는 값 목록이 있습니다 .

이 문제가 발생하는 것을 방지하는 방법을 모르겠지만 이제는 명령줄에서 문제를 해결할 수 있으므로 더 이상 짜증나지 않습니다.

관련 정보