답변:
모든 응용 프로그램의 키를 다시 매핑하려면 xmodmap을 사용하는 것이 가장 좋습니다. 유연하고 강력하지만 터미널에 몇 가지 명령을 입력해야합니다.
X 서버는 키보드와 모든 주요 이벤트를 관리하고 모든 응용 프로그램의 키 코드로 변환합니다.
이 방법은 수정 자 키 (예 : Super 또는 Right Alt 키)를 "모드 스위치"키로 매핑하고 모드 키를 누른 상태에서 키를 눌렀는지 여부에 따라 X 서버에 다른 코드를 생성하도록 지시하는 것입니다.
기본적으로 모드 전환 키가 정의되어 있지 않으며 모든 키는 모드 전환 여부에 관계없이 눌릴 때 동일한 코드를 생성하도록 구성되어 있습니다. 이는 명시 적으로 재정의하는 키를 제외하고 다른 키가 다르게 동작하거나 추가 구성이 필요하지 않기 때문에 좋습니다.
그러나 일부 compiz 플러그인이 슈퍼 키 바로 가기 (예 : 창 선택기, 시프트 스위처 등)를 매핑하기 때문에 compiz를 사용하는 경우 특히 Alt Alt 키를 모드 스위치로 사용하는 것이 좋습니다. 키보드를 통해 compiz를 제어하고 싶지 않다면 Super는 괜찮습니다.
xmodmap에서 수퍼 키는 Super_L 또는 Super_R로 식별됩니다. 모드 전환 키로 사용하려면 하나를 선택해야합니다. 또는 오른쪽 Alt 키는 Alt_R입니다. xev를 실행하고 키보드에서 필요한 키를 눌러이를 확인할 수 있습니다. 단계는 이 게시물 을 참조 하십시오.
터미널 ( Applications -> Accesories -> Terminal
)을 열고 다음 명령을 실행하여 현재 키 바인딩이 있는 파일을 만듭니다 . 우리는 이것을 출발점으로 사용할 것입니다.
xmodmap -pke > curkeys.map
xmodmap -pm >> curkeys.map
좋아하는 텍스트 편집기에서이 파일을여십시오. gedit curkeys.map &
gedit에서 엽니 다. 파일 끝 부분에 다음과 같은 줄이 표시됩니다.
keycode 253 =
keycode 254 =
keycode 255 =
xmodmap: up to 4 keys per modifier, (keycodes in parentheses):
shift Shift_L (0x32), Shift_R (0x3e)
lock Caps_Lock (0x42)
control Control_L (0x25), Control_R (0x69)
mod1 Alt_L (0x40), Alt_R (0x6c), Meta_L (0xcd)
mod2 Num_Lock (0x4d)
mod3
mod4 Super_L (0x85), Super_R (0x86), Super_L (0xce), Hyper_L (0xcf)
mod5 ISO_Level3_Shift (0x5c), Mode_switch (0xcb)
"xmodmap : 최대 4 ..."로 시작하는 줄을 삭제하십시오.
수정 자 맵을 다음과 같이 편집하십시오. 각 줄의 시작 부분에 "add"라는 단어를 넣고 수정 자 이름 뒤에 "="를 삽입하십시오. 그런 다음 괄호와 쉼표로 코드를 제거하십시오. 또한 내가 이동 한 점에 유의 Mode_switch
으로부터 mod5
에 라인 mod3
이 비어 이후 라인. 수정 된 표는 다음과 같아야합니다. 실제 내용은 아래의 내용과 약간 다를 수 있습니다 (키보드 레이아웃에 따라 다름).
add shift = Shift_L Shift_R
add lock = Caps_Lock
add control = Control_L Control_R
add mod1 = Alt_L Meta_L Alt_R
add mod2 = Num_Lock
add mod3 = Mode_switch
add mod4 = Super_L Super_R Super_L Hyper_L
add mod5 = ISO_Level3_Shift
물리적 모드 전환 키를 다시 매핑하십시오. 끝에 이와 같은 행을 추가하십시오 (필요한 경우 Super_L을 Super_R 또는 Alt_R로 바꾸십시오).
keysym Super_L = Mode_switch
수정 자 정의에서 키 이름 (Super_L)을 제거하십시오. Super_L의 경우 mod4 행에서 제거하는 것을 의미합니다.
add mod4 = Super_R Hyper_L
이제 오른쪽 "슈퍼"키는 여전히 일반 슈퍼 키로 작동하지만 왼쪽 키는 특별한 속성을 갖습니다.
이제 Super_L을 누른 상태에서 눌 렸는지 여부에 관계없이 다른 코드를 생성하려면 키를 다시 매핑해야합니다. 파일에서 시작하는 각 줄은 keycode
Mod1 (shift 키) 및 모드 스위치 키를 눌렀는지 여부에 따라 생성 될 각 키에 대해 4 개의 키 심을 지정합니다. ( link )
!...........................................................................
! Key Base Shift Mode Mode+Shift
!---------------------------------------------------------------------------
keycode 13 = 4 dollar 4 quotedbl
keycode 14 = 5 percent 5 colon
keycode 15 = 6 asciicircum 6 comma
keycode 16 = 7 ampersand 7 period
...
keycode 45 = k K k K
Super_L + k 키 누르기가 "+"키를 생성하도록하려면 다음과 같이 수정하십시오.
keycode 45 = k K plus plus
최종 플러스는 Shift + Super_L + k를 플러스에 매핑하지만 다른 것에 매핑 할 수도 있습니다. 각 키마다 정확히 한 줄을 수정해야합니다. 더 많은 키를 다시 매핑하려면 더 많은 행을 편집하십시오. 정상적인 키 누르기 동작을 유지하려면 처음 두 항목을 그대로 두십시오.
파일을 저장하고 편집기를 종료하십시오.
터미널에서 다음 명령을 실행하여 키맵을 설치하십시오. 첫 번째 세션은이 세션에 대해 설정하고 두 번째 세션은 향후 세션에 대해 영구적으로 만듭니다.
xmodmap curkeys.map
cp curkeys.map ~/.Xmodmap
수정 된 키 (예 : Super_L + k)를 눌러 즉시 테스트 할 수 있습니다.
수정 된 맵이 설치되면 새 키를 쉽게 추가 할 수 있습니다.
이 명령을 실행하여 키를 맵핑하여 테스트하십시오.
xmodmap -e "keycode <code> = <base> <shift> <new-mapping> <new-shift-mapping>"
꺾쇠 괄호 (예 : <code>
<base>
등)로 품목 을 적절한 값으로 교체하십시오 .
curkeys.map
파일을 백업 하십시오.
curkeys.map
해당 키 코드의 행을 편집하십시오.아래 명령으로 다시 적용하십시오 (2 단계를 수행 한 경우 첫 번째 명령은 필요하지 않음).
xmodmap curkeys.map
cp curkeys.map ~/.Xmodmap
참고 : 1 : 키보드 단축키 (예 System -> Preferences -> Keyboard Shortcuts
:)를 수정하면 수정 자 맵에 영향을 미치며 다음 번 로그인시 일반적으로 손실됩니다. 그러니 피하십시오.
참고 : 2 : 때때로이 방법을 사용하는 동안 이와 같은 오류 메시지가 나타납니다. 그러나 이것이 의미하는 바는 알 수 없지만 일반적으로 무해합니다.
X Error of failed request: BadValue (integer parameter out of range for operation)
Major opcode of failed request: 118 (X_SetModifierMapping)
Value in failed request: 0x17
Serial number of failed request: 263
Current serial number in output stream: 263
xmodmap에 대한 자세한 도움말은 여기를 참조하십시오 .
~/.Xmodmap
, ~/.xmodmap
무시됩니다.