Linux에서 키 매핑은 어떻게 작동합니까? [복사]

Linux에서 키 매핑은 어떻게 작동합니까? [복사]

나는 항상 Linux에서 키맵과 관련 항목이 어떻게 조화를 이루는지 이해하는 데 어려움을 겪었습니다.

뭔가 잘못되면 그것을 찾기 위해 수많은 오래된 메일링 리스트와 포럼 게시물을 뒤져야 한다면 피가 끓어오르게 됩니다.저것하나의 명령 또는 inputrc 줄로 내 문제를 해결할 수 있습니다.

Ctrl터미널 유형을 전환하기 전에 vim에서 백스페이스가 작동하지 않거나 bash에서 + 화살표가 작동하지 않는 것과 같은 몇 가지 고전적인 문제가 있습니다. 또는 최근에 새로운 데비안 설치에서 @키가 실제로 인쇄되고 "인쇄 "되는 문제가 발생했습니다 @(잘못된 키보드 레이아웃?)

파일과 도구를 보는 것만으로는 큰 도움이 되지 않습니다. rc를 입력하시겠습니까? xkbmap을 설정하시겠습니까? 콘솔 설정? 사실 어디서부터 시작해야 해?이해하다키보드 문제를 해결하기 위해 다른 사람의 의심스러운 명령을 시도할 필요가 없도록 하려면 어떻게 해야 합니까?

답변1

이것은 예상보다 더 복잡하지만 여기에 내 시도가 있습니다.

가장 기본적인 수준에서 커널은 키보드 장치를 인식하는 방법을 알고 키보드의 개념을 이해합니다.콘솔 키맵. 이는 키보드를 구성하는 가장 간단한 방법이며 고려해야 할 변수가 하나만 필요하지만 이러한 설정은 Linux 텍스트 콘솔의 키보드 입력에만 영향을 미칩니다.

Xorg에 들어가면 상황이 조금 복잡해지지만 의미는 있습니다. Xorg에는 이해해야 할 매우 중요한 몇 가지 특정 개념이 있습니다.

  • Xorg는 커널을 우회하고 콘솔에 지정된 키맵을 무시하면서 키보드 장치와 직접 통신합니다.
  • Xorg를 사용하면 xorg.conf 파일에서 키보드에 대한 일부 특정 옵션을 설정할 수 있지만 현재 Linux 배포판은 xorg.conf 파일 없이 실행하려고 최선을 다하고 있습니다. Xorg 버전에 따라 InputClass섹션 내(최신 버전의 Xorg) 또는 섹션 내 (이전 버전)에서 InputDeviceXkbLayout을 지정 해야 할 수도 있습니다.
  • 키를 누를 때 Xorg에는 여러 특정 해석 계층이 있습니다.
  1. 가장 기본적인 수준에서 각 키 이벤트는 숫자 키 코드로 표시됩니다.
  2. XkbModel은 XkbLayout과 함께 사용되어 주어진 키코드를 실제 키 이벤트와 연결합니다. 예를 들어, 내 키보드에서는 키코드 50이 생성됩니다 Shift_L.
  3. 선택적으로 키보드에 대해 여러 XkbLayout을 지정한 다음 XkbOptions전체 목록(일반적으로 에 저장됨 /usr/share/X11/xkb/rules)을 사용하여 레이아웃 전환 방법을 구성할 수 있습니다. (이것은 Dvořák를 스스로 가르치고 싶거나 영어와 러시아어 키보드 레이아웃 사이를 전환하려는 경우 유용합니다.)
  4. 각 키코드는 보유한 수정자에 따라 다양한 방식으로 해석될 수 있습니다. xmodmap보유한 수정자를 기반으로 어떤 키 이벤트가 전송될지 확인할 수 있습니다.

답변2

오늘날 콘솔과 X는 실제로 함께 작동합니다.

이것이 완전히 표준화되었는지는 모르겠지만 Debian Unstable(아마도 최근 Xorg 및 콘솔 도구가 있는 다른 배포판)에서는 /etc/default/keyboardX 스타일 구문을 사용하여 콘솔과 X에서 키보드를 설정할 수 있습니다. 콘솔 도구 및 콘솔 설정을 사용하십시오. 나머지는 Klee가 설명한 대로입니다.

답변3

vim에서 백스페이스 키가 작동하지 않는 등 몇 가지 고전적인 문제가 있습니다.

아마도 백스페이스 키를 사용하면 현재 버전에서 입력한 문자만 삭제되고 편집 모드로 들어가기 전에 이미 있었던 문자에는 이 작업을 수행할 수 없게 되는 vim의 동작에 대해 이야기하고 있는 것 같습니다.

이 동작은 설정을 통해 변경할 수 있습니다.

set backspace=indent,eol,start

관련 정보