Linux의 키 매핑

Linux의 키 매핑

사람들이 명령줄에서 작업할 때 Linux 설치에서 "키가 올바르게 매핑되지 않았습니다"라고 지적하는 것은 무엇을 의미합니까?

기본으로 설치는 안되나요? 어떤 추가/특정 매핑이 필요합니까?

Home또한 내 Mac에서는 키 와 End키가 Ctrl예상대로 작동하지 않는다는 말을 들었습니다 .

답변1

스캔 코드 및 키 코드

일반적으로 누군가 이렇게 말한다면 이는 키에 표시된 기능이 키를 눌렀을 때 Linux 커널로 전송된 "코드"와 일치하지 않는다는 의미입니다. 키에 태그가 지정되는 것으로 생각할 수 있지만 HomeCtrl에 대한 "코드"가 커널로 전송됩니다.

훨씬 낮은 수준에서 실제로 일어나는 일은 각 키에 스캔 코드가 할당된다는 것입니다.

에서 발췌스캔 코드 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

관련 정보