키맵을 올바르게 변경하는 방법은 무엇입니까?

키맵을 올바르게 변경하는 방법은 무엇입니까?

문제를 자세히 설명하려고 노력하겠습니다. 나는 종종 넷북에서 외부 키보드를 사용합니다. 키보드는 "TK Stealth"입니다.


확대하려면 클릭하세요.

보시다시피 숫자 키패드는 기존 숫자 키패드와 매우 유사하지만 화살표 키는 실제로 와이드 키보드의 추가 화살표 키처럼 다르게 매핑됩니다.

숫자 키패드처럼 매핑하기를 원합니다(예: "8" == "up", "2" == "down", "4" == "left", "6" == "right" 및 곧).

이 설정은 해당 키보드가 연결된 경우에만 유효합니다.

나는 xmodmap /home/johnfound/TKStelth다음 맵 파일 "TKStelth"를 사용하여 이를 달성하려고 합니다.

keycode  79 = KP_Home KP_Home KP_Home KP_Home
keycode  80 = KP_Up KP_Up KP_Up KP_Up
keycode  81 = KP_Prior KP_Prior KP_Prior KP_Prior
keycode  83 = KP_Left KP_Left KP_Left KP_Left
keycode  84 = KP_Begin KP_Begin KP_Begin KP_Begin
keycode  85 = KP_Right KP_Right KP_Right KP_Right
keycode  87 = KP_End KP_End KP_End KP_End
keycode  88 = KP_Down KP_Down KP_Down KP_Down
keycode  89 = KP_Next KP_Next KP_Next KP_Next
keycode  90 = KP_Insert KP_Insert KP_Insert KP_Insert
keycode  91 = KP_Delete KP_Delete KP_Delete KP_Delete

효과가 있지만 추악한 부작용도 있습니다. 예를 들어 때로는 레이아웃이 기본값으로 돌아가서 위 스크립트를 수동으로 실행해야 합니다. 해당 스크립트를 init 스크립트에 포함하면 일시 중단된 상태에서 다시 시작하고 화면 해상도를 변경한 후 OS가 몇 분 동안 중단되는 일부 충돌/잠김이 발생합니다. 이렇게 하면 init 스크립트에서 스크립트를 제거해야 합니다.

xmodmap이 실제로 키보드 레이아웃을 처리하는 오래된 방법이라는 것을 어딘가에서 읽었습니다.

따라서 질문은 다음과 같습니다. 이 키보드와 이 키보드만 올바르게 처리하도록 Linux를 구성하는 방법은 무엇입니까?

추가 정보: XFCE가 포함된 Manjaro Linux. 키보드 구성에는 미국식과 불가리아어의 두 가지 레이아웃이 있으며 위의 구성 변경 후에도 유지되어야 합니다.

답변1

올바른 해결책을 찾으면 바로 내 질문에 답하겠습니다.

라는 프로그램이 있습니다.키 블러입력 장치를 기반으로 커널에서 사용하는 키맵을 변경합니다. 즉, 컴퓨터에 연결된 각 키보드에 대해 별도로 변경합니다.

이 프로그램에는 문서에 올바르게 설명되지 않은 두 가지 문제가 있습니다.

  1. USB 키보드는 PS/2 포트에 연결된 키보드에 대한 스캔 코드가 아닌 스캔 코드를 생성합니다. 따라서 USB 키보드를 다시 매핑해야 하는 경우 키의 스캔 코드를 알 수 있는 방법이 필요합니다. "showkey" 도구는 스캔코드 및 키코드 테스트에 권장되는 경우가 많습니다.아니요/dev/console이는 키보드에 관계없이 "표준" 스캔 코드를 내보내는 양식을 읽기 때문에 작업을 수행합니다 .

주소 에 대해 키보드의 스캔 코드를 테스트하려면 /dev/input/KEYBOARD다음과 같은 프로그램을 사용해야 합니다.스캔 코드 받기. 위 링크에서 다운로드한 파일은 제대로 압축되지 않았으니 주의하시기 바랍니다. 이름은 getscancodes.tar.gz이지만 ZIP 알고리즘을 사용하여 압축됩니다. 패키지에는 소스 코드와 미리 컴파일된 바이너리가 포함되어 있습니다.

내 경우 keyfuzz 구성 파일은 다음과 같습니다.

### evdev 1.0.0., driver 'TK Stealth keyboard'
### Proper old-style numpad handling

0x70059    107
0x7005A    108
0x7005B    109
0x7005C    105
0x7005D    108
0x7005E    106
0x7005F    102
0x70060    103
0x70061    104

0x70062    110
0x70063    111
  1. "keyfuzz" 프로그램은 가능한 한 빨리 테이블을 패치하기 위해 부팅 중에 서비스로 시작됩니다. 아쉽게도 USB 키보드는 나중에 장치에 추가되었기 때문에 keyfuzz가 시작되면 부팅 중에 USB 키보드가 연결되어 있어도 패치할 키보드가 없었습니다.

udev해결책은 필요한 키보드를 추가할 때 규칙 파일을 사용하고 keyfuzz를 시작하는 것입니다 .

이렇게 하려면 다음을 /etc/udev/rules.d/mykeyboard.rules포함하는 파일을 추가해야 합니다(내 경우에는):

ACTION=="add", ATTRS{idVendor}=="2516", RUN+="/usr/lib/systemd/scripts/keyfuzz start"

이제 키보드가 연결되면 keyfuzz 시작 스크립트가 시작되고 키보드 디코딩 테이블을 패치합니다.

관련 정보