방금 xf86-input-evdev에서 xf86-input-libinput으로 전환했는데 키보드 레이아웃이 깨졌습니다. 오른쪽 Alt가 포함된 화살표 키, 상황에 맞는 메뉴 키, 삭제 키, 숫자 패드 Enter 등이 모두 이상하게 바뀌었습니다. libinput debug-events
그래도 올바른 키를 보여주었습니다. 확인 후Xorg.conf
, 다음 줄을 발견했습니다.
Option "XkbRules" "base"
로 변경한 후 evdev
키보드가 올바르게 작동했습니다.
나는 “XKB 구성 가이드”에서는 다양한 규칙을 언급하지만 차이점에 대해서는 자세히 설명하지 않습니다.
두 레이아웃의 차이점은 무엇입니까? libinput에서도 evdev 규칙을 사용해도 괜찮습니까?
답변1
tl;dr:Linux에서는 규칙을 사용해야 합니다 evdev
. XKB 가이드에 명시된 대로 다음을 연결하세요.
Linux 시스템에서는evdev규칙은 가장 일반적으로 사용되며 다른 시스템에서는베이스규칙이 사용됩니다.
그 차이는 대체로 역사적입니다. evdev
최신 Linux 커널 입력 하위 시스템이며 XKB가 처음 작성되었을 때는 존재하지 않았습니다. 소스코드를 살펴보면xkeyboard-configevdev
를 사용하면 및 base
규칙이 (대부분) 동일한 템플릿에서 생성된다는 것을 알 수 있습니다 . 하지만 시스템 XKB 데이터베이스에 생성된 파일을 와 비교하십시오 diff
. base
규칙이 특정 키보드 모델에 대한 기호를 로드하는 inet
반면 규칙 evdev
은 대부분의 모델별 항목을 없애고 보다 일반화된 세트를 로드하는 많은 항목을 볼 수 있습니다 .
/usr/share/X11/xkb/rules/base:
[...]
! model = symbols
a4techKB21 = +inet(media_nav_common)
asus_laptop = +inet(media_common)
acer_tm_800 = +inet(acer_laptop)
benqx730 = +inet(benqx)
btc9116u = +inet(btc9019u)
chromebook = +inet(chromebook)
dellsk8125 = +inet(dell)
// and about 50 more lines
// generated from xkeyboard-config/rules/base.m_s.part
/usr/share/X11/xkb/rules/evdev
[...]
! model = symbols
$evdevkbds = +inet(evdev)+inet(%m)
chromebook = +inet(evdev)+inet(chromebook)
applealu_jis = +inet(evdev)+macintosh_vndr/jp(alujiskeys)
* = +inet(evdev)
// ...that's all.
// generated from xkeyboard-config/rules/evdev.m_s.part
아니요, 실제로는 규칙의 전체 모델-기호 섹션인 evdev
반면 base
버전은 60줄 이상입니다. 파일 evdev.m_s.part
은 규칙의 해당 섹션에 대한 소스 템플릿입니다. 이는 모델-기호 매핑입니다( !model = symbol
해당 섹션의 시작 부분에 있는 줄, 따라서 m_s
파일 이름에 있음). 규칙의 유일한 다른 evdev 관련 섹션은 evdev.m_k.part
모델-키코드 매핑( !model = keycodes
규칙 섹션)인 파일에서 나오며 차이점은 비슷합니다.
자세한 내용은키코드그리고기호해당 규칙(특히 /usr/share/X11/xkb/keycodes/evdev
및 /usr/share/X11/xkb/symbols/inet
)에서 참조하는 파일입니다. 당신은 관심이있을 수 있습니다XKB 규칙 형식에 대한 이 글.