사람들이 명령줄에서 작업할 때 Linux 설치에서 "키가 올바르게 매핑되지 않았습니다"라고 지적하는 것은 무엇을 의미합니까?
기본으로 설치는 안되나요? 어떤 추가/특정 매핑이 필요합니까?
Home또한 내 Mac에서는 키 와 End키가 Ctrl예상대로 작동하지 않는다는 말을 들었습니다 .
답변1
스캔 코드 및 키 코드
일반적으로 누군가 이렇게 말한다면 이는 키에 표시된 기능이 키를 눌렀을 때 Linux 커널로 전송된 "코드"와 일치하지 않는다는 의미입니다. 키에 태그가 지정되는 것으로 생각할 수 있지만 Home키 Ctrl에 대한 "코드"가 커널로 전송됩니다.
훨씬 낮은 수준에서 실제로 일어나는 일은 각 키에 스캔 코드가 할당된다는 것입니다.
에서 발췌스캔 코드 Wikipedia 페이지
스캔 코드(또는 스캔 코드)는 어떤 키를 눌렀는지 보고하기 위해 대부분의 컴퓨터 키보드가 컴퓨터로 보내는 데이터입니다. 키보드의 각 키에는 숫자 또는 일련의 숫자가 할당되어 있습니다.
이러한 스캔 코드는 Linux 커널에 의해 키 코드로 매핑됩니다. 이러한 키코드는 일반적으로 애플리케이션에 전달됩니다. 이건 또 다른 거야스캔 코드 리소스더 자세한 내용을 원하시면.
노트:이것은 지나치게 단순화한 것이지만 이 레이어에 대한 일반적인 아이디어를 제공하고 싶습니다. 중요한 점은 키를 누르면 스캔 코드가 생성되고 Linux 커널은 이러한 스캔 코드를 보고 키 코드를 내보낸다는 것입니다.
키코드 설정
도구를 사용하여 스캔코드 키코드 매핑을 변경할 수 있습니다 setkeycodes
.
setkeycodes scancode keycode ...
setkeycodes 명령은 한 번에 두 개의 인수를 읽습니다. 각 쌍은 스캔 코드(16진수로 제공됨)와 키코드(10진수로 제공됨)로 구성됩니다. 이러한 각 쌍에 대해 커널 키보드 드라이버에 지정된 스캔 코드를 지정된 키 코드에 매핑하도록 지시합니다.
키코드 매핑은 키맵 파일에 저장됩니다. 내 Fedora 시스템에서 내 미국 키맵 파일은 /lib/kbd/keymaps/i386/qwerty/us.map.gz
다음 명령을 사용하여 조사하여 찾았습니다.
$ locate map.gz|grep us
/lib/kbd/keymaps/amiga/amiga-us.map.gz
/lib/kbd/keymaps/atari/atari-us.map.gz
/lib/kbd/keymaps/i386/qwerty/br-latin1-us.map.gz
/lib/kbd/keymaps/i386/qwerty/is-latin1-us.map.gz
/lib/kbd/keymaps/i386/qwerty/us-acentos.map.gz
/lib/kbd/keymaps/i386/qwerty/us.map.gz
/lib/kbd/keymaps/i386/qwertz/cz-us-qwertz.map.gz
/lib/kbd/keymaps/mac/all/mac-us.map.gz
/lib/kbd/keymaps/sun/sunt5-cz-us.map.gz
/lib/kbd/keymaps/sun/sunt5-us-cz.map.gz
이러한 파일은 압축(.gz)되어 있으므로 압축을 풀거나(신경 쓰지 마세요) 사용하거나 zcat
확인 zless
해야 합니다.
$ zless /lib/kbd/keymaps/i386/qwerty/us.map.gz
# us.map
keymaps 0-2,4-6,8-9,12
alt_is_meta
include "qwerty-layout"
include "linux-with-alt-and-altgr"
include "compose.latin1"
include "euro1.map"
strings as usual
keycode 1 = Escape
keycode 2 = one exclam
keycode 3 = two at at nul nul
keycode 4 = three numbersign
control keycode 4 = Escape
keycode 5 = four dollar dollar Control_backslash
keycode 6 = five percent
...
...
keycode 97 = Control
따라서 "Control" 키(키코드 97)를 변경하여 "왼쪽 Control" 키의 스캔코드(스캔코드 0x1d 0x9d)로 설정하려면 다음 명령을 사용하면 됩니다.
$ setkeycodes 1d9d 97 &
키 표시
다음 명령을 사용하여 키가 매핑된 키코드를 확인할 수도 있습니다 showkey
.
$ sudo showkey -a
Press any keys - Ctrl-D will terminate this program
1 49 0061 0x31
2 50 0062 0x32
3 51 0063 0x33
a 97 0141 0x61
b 98 0142 0x62
c 99 0143 0x63
^[OH 27 0033 0x1b
79 0117 0x4f
72 0110 0x48
^D 4 0004 0x04
"^[OH"는 제가 누른 키입니다 HOME.
참고 1:showkey -a`) 에 있는 경우 ascii' dump mode (
showkey는 누른 키의 10진수, 8진수, 16진수 값을 현재 키맵에 따라 표준 출력으로 인쇄합니다.
답변2
저는 MacBook Pro를 사용하고 있으며 UNIX 시스템에 로그인할 때 키 매핑에 문제가 없으므로 기본 설정이 거의 확실하고 매핑이 필요하지 않습니다. 저는 Debian, Ubuntu, RedHat 및 Solaris 11을 정기적으로 사용합니다.
그러나 사람들이 이렇게 말할 때 그들이 의미하는 바는 다음과 같습니다.터미널 환경 설정아래에설정내부에건반상표. 여기에서 키 매핑을 편집할 수 있습니다.
내가 변경한 유일한 변경 사항은 활성화하는 것입니다.옵션을 메타로 사용.
Home및 의 경우 키보드에서 Home 및 End 키 배치가 마음에 들지 않기 때문에 Home에는 +를 사용하고 End에는 +를 End사용합니다 . 또한 Ctrl 키의 전통적인 위치이고 더 편안하고 더 심각하기 때문에 내 키를 다른 키(키보드 아래 시스템 환경설정)로 변경했습니다. 누가 Caps Lock을 사용합니까?ctrlActrlEcaps lockctrl