XKB를 사용하여 일부 키코드 덮어쓰기

XKB를 사용하여 일부 키코드 덮어쓰기

XKB를 사용하여 몇 개의 키를 스크램블하고 싶습니다. (왜? 노트북에서는 일부 키의 위치가 불편합니다.) 현재 xmodmap을 사용하고 있습니다.

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

대신 XKB를 사용하여 특정 키코드에 다른 키 기호를 할당하는 대신 특정 물리적 키에 다른 기호 이름을 할당하고 싶습니다. (이것그렇기 때문에. ) 키코드 110을 PGUP대신 전송하고 싶고 , 키코드 115를 대신 HOME전송하고 싶습니다 . 나머지 구성은 영향을 받지 않아야 합니다(따라서 keyym 등은 계속 전송되고 다른 모든 키는 그대로 유지됩니다).DELEENDPGUPPrior

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

답변1

키코드 변경 사항을 포함하는 파일을 생성하고 (예를 들어) 로 저장합니다 ~/.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 includeXKB 컴파일러에 로드되어 ~/.xkb포함 경로에 추가됩니다. (파일 이름을 가 아닌 다른 이름으로 지정한 경우 및 을 ~/.xkb/keycodes/local변경해야 합니다 .) 이렇게 하면 다른 모든 설정이 유지됩니다.+local-I${HOME}/.xkb}

답변2

먼저 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동일한 줄을 수정하는 것입니다(평가된 포함과 동일한 키맵입니다). 이렇게 하면 여러 정의에 대한 경고가 표시되지 않지만 읽기가 어려워집니다.

관련 정보