XKB로 몇 가지 키 코드를 재정의


10

XKB로 몇 개의 키를 섞고 싶습니다. (왜? 일부 키가 불편한 랩톱에서는) 현재 xmodmap을 사용합니다.

keycode 110 = Prior
keycode 115 = Delete
keycode 112 = Next
keycode 117 = Insert
keycode 119 = End
keycode 118 = Home

대신 특정 키 코드에 다른 키 심을 할당하는 대신 XKB를 사용하고 특정 물리적 키에 다른 기호 이름을 할당하고 싶습니다. ( 이유입니다.) 나는 키 코드 (110) 전송할 PGUP대신 HOME, 키 코드 (115)가 전송하는 DELE대신 END구성의 나머지 부분은 영향을 안 등, (그래서 PGUPkeysym 데를 보내는 유지하는 Prior등, 다른 모든 키는 남아 그들은 그대로).

이러한 특정 키 코드의 할당을 어떻게 변경할 수 있습니까? 에 파일을로드합니다 xkbcomp somefile.xkb $DISPLAY. 무엇을 넣어야 somefile.xkb합니까?

답변:


14

키 코드 변경 사항이 포함 된 파일을 작성하고 (예 :)로 저장하십시오 ~/.xkb/keycodes/local. ( keycodes디렉토리는 하드 코딩되어 있습니다. 기본 디렉토리는 다른 것이거나 파일 이름도 가능합니다.)

xkb_keycodes {
  <PGUP> = 110;
  <PGDN> = 112;
  <DELE> = 115;
  <INS> = 117;
  <HOME> = 118;
  <END> = 119;
};

이것을 불러 오려면

setxkbmap -print | sed -e '/xkb_keycodes/s/"[[:space:]]/+local&/' | xkbcomp -I${HOME}/.xkb - $DISPLAY

현재 설정을 출력 +local하고 xkb_keycodes include명령문에 추가 한 후 XKB 컴파일러에로드 ~/.xkb하여 포함 경로에 추가 합니다. (당신이 아닌 다른 파일 뭔가라는 이름의 경우 ~/.xkb/keycodes/local, 당신은 분명 변화해야 +local하고 -I${HOME}/.xkb}.) 다른 모든 설정이 보존되어 그 방법을.


1
따라서 이것이 예상되는 경로이며 -I스위치 로 전달하는 방법입니다 ! 고마워요, 맨 페이지에서 이것을 알아낼 수 없었습니다.
L. Levrel

매력처럼 일했다! xkb_symbols 업데이트를 원한다면, xkb_keycodes를 그것으로 교체하고 작동했습니다.
zw963

5

다음과 같은 방법으로 시작할 수 있습니다 setxkbmap -print > somefile.xkb당신이 원하는 키 이름을 다시 정의 다음에있는 사용하는 키 맵을 취득하고, xkb_keycodes이 같은 섹션 :

xkb_keymap {
 xkb_keycodes {
  include "evdev+aliases(azerty)"
  // Custom <key name> = keycode
  <INS> = 117;
  <HOME> = 118;
  <PGUP> = 110;
  <DELE> = 115;
  <END> = 119;
  <PGDN> = 112;
 };
 xkb_types { include "complete"};
 xkb_compatibility { include "complete"};
 xkb_symbols { include "pc+fr+inet(evdev)"};
 xkb_geometry { include "pc(pc104)"};
};

이렇게하면 일부 키 이름이 여러 번 할당된다는 경고가 생성되지만 마지막 키만 있기 때문에 작동합니다 (따라서 사용자 정의 설정을 포함 뒤에 두는 것이 중요합니다). 그리고 파일은 읽을 수 있다는 장점이 있습니다.

또 다른 방법은 사용하는 키맵을 파일에 덤프하고 xkbcomp $DISPLAY somefile.xkb동일한 행을 수정하는 것입니다 (포함 된 항목과 동일한 키맵입니다). 이런 식으로 여러 정의에 대한 경고는 없지만 읽기 어렵습니다.


1
이 모든 이름 ( evdev+aliases(azerty)등) 은 어디 에서 왔습니까? 전체 재구성이 아닌 상대 변경을 명시 적으로 수행하고 싶습니다. 질문에 나열된 6 이외의 키는 영향을 받아서는 안되며 명령을 실행할 때의 상태로 유지되어야합니다.
Gilles 'SO- 악마 중지

1
그들은에서 왔으며에서 setxkbmap -print파일입니다 /usr/share/X11/xkb/. 전체 키맵을 제공해야한다고 생각 xkbcomp하지만 잘못되었을 수도 있습니다.
Leiaz
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.