키 매핑은 덜 명확하게 정의되어 있지만 OSI 모델과 유사한 프로세스를 따릅니다. 나는 현재 내가 원하는 것보다 더 높은 수준에서 다시 매핑하고 있습니다. 분명히 레이어 1은 물리적 키보드에 해당하고 레이어 7은 응용 프로그램에 해당하지만 다른 레이어가 몇 개나 어디에 배열되어 있는지 잘 모르겠습니다.
프로그래밍 가능한 전용 물리적 키보드가 있는 데스크탑이라면 괜찮겠지만 아쉽게도 이것은 노트북이므로 내장 키보드를 사용할 때 다시 매핑을 유지해야 합니다.
FWIW, 다음 키 쌍을 바꾸고 있습니다: [Tilde/Esc], [Caps/LCtrl], [Back{space,slash}]. 나도 Dvorak을 사용하지만 운영 체제에서는 표준 방식으로 구성됩니다.
현재 X를 변경하기 위해 /usr/share/X11/xkb/keycodes/evdev를 수정하고 있습니다(그리고 콘솔용 사용자 정의 레이아웃 파일을 생성하지만 여기서는 관련이 없습니다). "레이어 스택"의 어디에 있는지 잘 모르겠습니다.
질문:내 키맵이 웹 VNC 클라이언트를 사용하는 Proxmox 콘솔 세션으로 변환되지 않습니다. (레이아웃도 작동하지 않지만 예상된 것입니다.) 문제는 VNC 클라이언트가 아직 evdev 리매핑을 적용하지 않은 하위 레이어에 키보드를 연결하고 있다는 것입니다.
Windows에서는 기본적으로 "레이어 3"인 것처럼 보이는 레지스트리의 스캔 코드 맵을 생성하기 위해 KeyTweak이라는 유틸리티를 사용합니다. 내가 플레이한 게임에는 키보드가 "tier 2"에 걸려 있는 것 같지만 대부분의 게임에서 입력이 거의 없기 때문에 문제가 되는 경우는 거의 없습니다.
요약하자면, 내가 상상하는 OSI 키보드 모델에 evdev가 어디에 적합한지 잘 모르겠지만 하위 계층에서 다시 매핑하는 것은 어떻습니까? 어떤 이유로든 리맵을 교체할 필요가 없으므로 이 변경 사항은 본질적으로 영구적일 수 있습니다. BIOS에서 이 작업을 수행할 수 있다면 그렇게 할 것입니다.
답변1
대답은 udev로 밝혀졌습니다. 기본적으로 따라했어요이 게시물, 그러나 요점은 다음과 같습니다.
- 설치하다
evtest
- 실행
evtest
하고 다시 매핑하려는 키를 눌러 확인하세요.둘 다코드와 키 코드를 스캔하세요. /etc/udev/hwdb.d/
70-keyremap.hwdb
다음과 같은 이름의 새 파일을 만듭니다 .- 이 번호가 파일의 순서라고 가정하지만 이를 기반으로 할 기존 파일이 없으므로 전제 조건이 무엇인지 잘 모르겠으며 실제보다 더 높은 번호가 필요할 수 있습니다. . 사실,
hwdb.d
Tumbleweed의 디렉토리는 나에게 존재하지 않았기 때문에 만들어야 했지만 여전히 작동합니다.
- 이 번호가 파일의 순서라고 가정하지만 이를 기반으로 할 기존 파일이 없으므로 전제 조건이 무엇인지 잘 모르겠으며 실제보다 더 높은 번호가 필요할 수 있습니다. . 사실,
- 달리기
systemd-hwdb update
. - 재시작
_
# This is from the brokkr.net post I linked above
# Format can be found on [https://wiki.archlinux.org/title/Map_scancodes_to_keycodes].
$ cat 70-keymap.hwdb
evdev:atkbd:dmi:bvn*:bvr*:bd*:svn*:pn*:pvr*
KEYBOARD_KEY_01=41 # Remap Tilde to Esc
KEYBOARD_KEY_29=01 # Remap Esc to Tilde (evtest showed "1" but when I put that without the leading zero, it was interpreted as the literal [1] key.)
KEYBOARD_KEY_3A=29 # Remap Caps to LCtrl
KEYBOARD_KEY_1D=58 # Remap LCtrl to Caps
KEYBOARD_KEY_0E=43 # Remap Backspace to Backslash
KEYBOARD_KEY_2B=14 # Remap Backslash to Backspace
고쳐 쓰다:
위 방법은 내 노트북에서는 잘 작동하는데, 연결하면 외부 키보드는 여전히 기본 키맵을 사용합니다. 내부 키보드는 PS/2를 사용하여 통신하고 PS/2는 여전히 AT 스캔 코드( atkbd
장치 문자열에서)를 사용하지만 USB는 완전히 다르기 때문입니다. 결국 USB 보드에서 스캔 코드를 가져와 다른 지도를 작성하기 위해 evtest를 다시 실행해야 했습니다. 제가 생성한 파일은 다음과 같습니다.
evdev:atkbd:dmi:*
KEYBOARD_KEY_01=41
KEYBOARD_KEY_29=01
KEYBOARD_KEY_3A=29
KEYBOARD_KEY_1D=58
KEYBOARD_KEY_0E=43
KEYBOARD_KEY_2B=14
evdev:input:b0003v*
KEYBOARD_KEY_70029=41
KEYBOARD_KEY_70035=01
KEYBOARD_KEY_70039=29
KEYBOARD_KEY_700e0=58
KEYBOARD_KEY_7002a=43
KEYBOARD_KEY_70031=14