키보드 레이아웃과 xmodmap의 관계


12

Xubuntu를 사용하고 있습니다. 로그인하기 전에 키보드 레이아웃을 선택할 수 있습니다. 내가 사용하고 xmodmap일부 키를 리매핑.

두 가지에 관심이 있습니다.

  1. 키보드 매핑 상태가 변경되는 방식 (a) 랩탑을 켤 때, (b) 부팅 프로세스 중 및 (c) 시스템에 로그인 (3 단계) 및 시스템 작업 (로그인)시
  2. 개별 단계에서 어떤 기호가 화면에 표시되고 (제어 키 전송) 원인 일부 키를 누르면 키보드 드라이버 (?)에 신호가 전송되고 어떤 기호가 표시되는지 결정하는 결정 프로세스 (응용 프로그램 및 구성 파일)가 있어야합니다. 이 질문에 대한 답변은 응용 프로그램 및 해당 구성 파일의 경로 목록이어야합니다 (특히 Ubuntu (Debian 기반 시스템)에 관심이 있지만 다른 시스템을 설명 할 수는 있지만 Ubuntu가 선호됩니다).

답변:


25

여기에는 KEYCODE에서 KEYSYM 로의 맵핑과 KEYSYM에서 텍스트로의 맵핑이 있습니다. 커널을 계산하면 AT 키보드 스캔 코드를 XT 스타일 KEYCODE 또는 USB 키보드 HID 코드를 KEYCODE에 매핑해야하는 계층이 더 많습니다. 키코 드는 단순히 운영 체제의 커널이 X11 서버로 전달되는 8 비트 부호없는 정수입니다. Linux 및 Solaris와 같은 운영 체제마다 다를 수 있습니다. Linux에서이 KEYCODE는 일반적으로 이전 XT PC 키보드에서 사용 된 것과 같은 숫자입니다. AT, PS / 2 또는 USB 키보드가 장착 된 최신 컴퓨터는 일반적으로 키를 간단하게 유지하기 위해 해당 키보드를 이전 XT 코드에 매핑합니다.

XT, AT, PS / 2 또는 USB 등의 원시 키보드 코드는 키보드의 실제 위치를 나타냅니다. XT 키보드는 키를 누르거나 놓을 때 하나의 8 비트 숫자 만 보냅니다. US / British XT 키보드의 q 키는 숫자 16을 전송합니다. 프랑스어 키보드에서 동일한 물리적 키는 a로 표시되어 있지만 여전히 16을 전송합니다. 운영 체제에서 상위 계층으로 실제 의미를 부여합니다. XT 키보드에서 키를 놓으면 동일한 키 코드에 128을 더한 값이 전송됩니다.이 예에서 q를 누르면 16이 전송되지만 해제시 숫자 142 (16 + 128)가 전송됩니다. AT 키보드는 일련의 숫자이며 상당히 길어질 수있는 스캔 코드를 사용합니다. 키 릴리스는 추가 코드를 추가합니다. 예를 들어, 일시 중지에 대한 스캔 코드는 E1, 1D, 45, E1, 9D, C5입니다. DOS, Windows, Linux, FreeBSD, BIOS는 모두 스캔 코드를 훨씬 더 간단한 XT 스타일 스캔 코드로 매핑합니다. 또한 HID 코드를 보내는 USB 키보드와 같은 다른 코드를 사용하는 최신 키보드를보다 쉽게 ​​지원할 수 있습니다. X11 또는 응용 프로그램에서 확인하기 전에 운영 체제에서 모든 코드를 일관된 동일한 코드 세트에 매핑합니다.

X11은 프로세스 의이 부분을 무시하고 커널에서 KEYCODE를 가져 와서 자체 매핑을 적용하여 해당 KEYCODE를 KEYSYM으로 변환합니다. Xmodmap 은 해당 매핑을 제어하기위한 표준 도구입니다. 키보드 매핑의 많은 동작을 구성 할 수 있지만 Num Lock, Mode Switch 및 Caps Lock / Shift Lock과 같은 몇 가지 특수한 경우가 X11에 하드 코딩되어 있습니다. Shift와 같은 다른 측면도 실제로 구성 할 수 있습니다. 모드 스위치 또는 Num Lock과 달리 모든 키를 시프트로 작동하도록 매핑 할 수 있습니다.

KEYCODE는 운영 체제 커널이 전송 한 물리적 키를 나타냅니다. 모든 KEYCODE는 8 개의 가능한 KEYSYM에 매핑 할 수 있습니다. 4 만 사용되며 레벨 1-4라고도합니다. 레벨 1은 수정자가 활성화되어 있지 않을 때 인쇄되는 KEYSYM을 지정합니다. 이들은 종종 소문자와 숫자입니다. 수정자는 수정자가 활성화되어있을 때 (누르거나 켤 때) 다른 키 코드에 의해 생성 된 KEYSYM을 수정하는 키 코드입니다. 수정 자 키코 드는 Xmodmap을 통해 제어됩니다. 레벨 2는 시프트 수정자를 누를 때 전송 될 KEYSYM을 지정합니다. 모드 스위치 KEYSYM을 누를 때마다 레벨 3이 활성화됩니다. Shift 키와 모드 스위치가 모두 활성화되면 레벨 4가 활성화됩니다.

KEYSYM이 생성되면 직접 해석 될 수 있지만 대부분 텍스트로 변환됩니다. 모든 KEYSYM이 텍스트로 바뀌거나 미래의 KEYSYM에만 영향을 줄 수있는 것은 아닙니다. 물론 텍스트 표현이없는 Shift_L도 있지만 다른 문자를 작성하는 데 사용되는 많은 KEYSYM도 있습니다. 내 시스템의 목록은 아래에 /usr/share/X11/locale/en_US.UTF-8/Compose있습니다. 그러한 예 중 하나는 dead_acute KEYSYM인데, 누르면 누르면 다음 KEYSYM을 급성 악센트 문자로 변환하려고 시도합니다. KEYSYM을 유니 코드로 변환 하기위한 표준 매핑 이 있습니다 .

이 모든 것이 말되었으므로 Xmodmap은 더 이상 사용되지 않으며 훨씬 더 정교한 XKB로 대체됩니다. 이것은 KEYCODE가 KEYSYM에 매핑되는 방식에 영향을 주지만 커널이 KEYCODE를 생성하는 방법이나 KEYSYM이 텍스트로 변환되거나 구성되는 방식에는 영향을 미치지 않습니다. Xmodmap 동작을 복원하여 XKB를 비활성화 할 수 있습니다. 또한 Xmodmap을 지원하는 호환성 계층이 있지만 완전히 호환되지 않으므로 문제가 발생할 수 있습니다. XKB 규칙은 아직 /usr/share/X11/xkb/정교하지 않고 훨씬 정교합니다. KEYCODE를 KEYSYM에 매핑하기위한 키보드 레이아웃을 생성하는 방법에 대한 좋은 문서가 있습니다.

Linux 콘솔의 경우 자체 키보드 레이아웃이 있으며 명령 /usr/share/keymaps과 함께 저장 되고로드됩니다 loadkeys. GRUB2를 포함한 BIOS 및 이전 부트 로더 단계에서 키보드 매핑은 BIOS가 키를 매핑하기로 결정한 숫자입니다.


훌륭한 설명과 새로운 정보에 감사드립니다. 부팅 프로세스에서 시작된 응용 프로그램 (upstart 또는 initscript) 중 키보드를 결정하는 단계와 로그인시 레이아웃에서 선택할 수있는 단계를 알고 있습니까? 어떤 프로그램이 프로그램과 상호 작용하고 파일 시스템에 어디에 저장됩니까? 로그인 후 xmodmap 또는 xkb는 로그인 프로세스에서 선택한 기본 레이아웃을 무시합니까?
xralf

내가 말했듯이 커널 키맵 loadkeys은 init 스크립트 중 하나 에 의해 로드됩니다 . grep loadkeys /etc/init.d/*파일을 나타냅니다 keymap.sh. X11에는 Xsession 시작 스크립트 중 하나에서 실행되는 Xmodmap에 의해 전통적으로로드 된 자체 키맵이 있습니다. 현재 Xmodmap 대신 XKB를 사용하는 경우 기본 키 매핑은 다양한 Xkb 옵션 또는 HAL을 통해 Xorg.conf에서 설정됩니다. Gnome 또는 KDE 디스플레이 관리자가로드되면 setxkbmap명령을 통해 자체 레이아웃을로드 할 수 있습니다 . 사용자의 데스크탑 환경은 로그인시 다른 레이아웃을 설정할 수도 있습니다.
penguin359

내가 명령을 시도 grep loadkeys /etc/init.d/*하고 locate keymap.sh아무것도 발견되었다. Xorg.conf 파일도 찾을 수 없습니다. 내 우분투 버전 10.04에 의존합니까?
xralf

창에는 어떤 종류의 이벤트가 있습니까? KEYSYM이있는 이벤트와 응용 프로그램은 어떤 방식으로 KEYSYM을 텍스트로 변환합니까? Xorg는 앱이 KEYSYM을 텍스트로 변환 할 수있는 IPC / RPC 인터페이스를 제공합니까? 아니면 응용 프로그램 자체적으로 순수하게해야합니까?
炸鱼 薯条 德里克
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.