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 등은 계속 전송되고 다른 모든 키는 그대로 유지됩니다).DELE
END
PGUP
Prior
이러한 특정 키코드의 할당을 어떻게 변경할 수 있습니까? 파일을 로드하려고 합니다 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
include
XKB 컴파일러에 로드되어 ~/.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
동일한 줄을 수정하는 것입니다(평가된 포함과 동일한 키맵입니다). 이렇게 하면 여러 정의에 대한 경고가 표시되지 않지만 읽기가 어려워집니다.