저는 manjaro i3을 사용하고 있으며 제가 만든 키맵 중 일부를 수정할 생각입니다. 현재 저는 xcape, xmodmap 및 setxkbmap 명령을 사용하여 다음 키를 다시 매핑하고 있습니다.
- 제어하려면 길게 누르고 종료하려면 누르세요.
- 세미콜론과 콜론 바꾸기
저는 다음 설정 스크립트를 사용하여 이 작업을 수행했습니다.
setxkbmap -option 'caps:ctrl_modifier'
xcape -e 'Caps_Lock=Escape'
xmodmap -e "keycode 47 = colon semicolon"
키맵이 손상되어 아래 나열된 인쇄 화면을 사용하여 다시 매핑할 때 처음으로 돌아가려면 OS를 다시 설치해야 하므로 추가 변경 사항에 대한 도움이나 조언을 원합니다. 내가 원하는 변경 사항은 다음과 같습니다.
- 화면 인쇄 -> 비활성화하거나 다른 슈퍼 키로 사용
- 왼쪽 Alt --> 모드 전환 키
- Esc 키 --> 물결표 및 백틱
- 원래 물결표 및 백틱 --> 백스페이스 키
- 백스페이스 키 --> 삭제
- 홈, 종료, 삽입, 삭제 키를 비활성화하고 매핑하여 일부 스크립트를 실행합니다.
- mode_switch + h, j, k, l --> 추가 화살표 키
- mode_switch + 백스페이스 키 --> 홈
- mode_switch + 삭제 --> 종료
이러한 재매핑을 수행하려면 어떤 도구를 사용해야 합니까? 또한 과거에 사용했던 유사한 예가 있는 사람이 있다면 그것도 정말 도움이 될 것입니다! 도움을 주셔서 미리 감사드립니다.
답변1
GNOME에서 Pop!_OS(Ubuntu 18.10의 파생 버전)를 실행하는 ThinkPad P1에서 다음 사항을 모두 확인했습니다.
키 코드 찾기
xev
터미널에서 실행하고 입력을 시작하세요. 많은 데이터가 있지만 찾고 있는 것은 일반적으로 다음 단어 뒤의 블록에서 두 번째 세 번째 줄입니다 keycode
.
KeyRelease event, serial 37, synthetic NO, window 0x3c00001,
root 0x1a5, subw 0x0, time 291165043, (404,446), root:(454,634),
state 0x0, **keycode 107** (keysym 0xff67, Menu), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
일부 키는 xev
"Print Screen"과 같은 키 코드를 인쇄하지 않습니다. 이를 위해 다음 섹션에서 생성된 파일을 grep할 수 있습니다.
필요한 도구
xmodmap
현재 바인딩 덤프
를 실행하여 현재 매핑을 표준 출력으로 인쇄할 수 있습니다 xmodmap -pke
. 먼저 레이아웃을 파일에 백업하면 xmodmap
잠재적인 문제를 피할 수 있습니다.
xmodmap -pke ~/.Xmodmap.orig
키가 에 나타나지 않는 경우 xev
.
cat ~/.Xmodmap | grep Print
keycode 107 = Print Sys_Req Print Sys_Req
바운드 명령을 빠르게 변경
이미 알고 계시겠지만 다시 한번 말씀드리자면 다음과 같습니다.
xmodmap -e "keycode [number] = [keys...]"
그러면 세션의 키가 일시적으로 다시 바인딩됩니다. 다시 실행하면 xmodmap -pke
이러한 변경 사항이 반영됩니다.
통사론
xmodmap
공백으로 구분된 열을 사용하여 표시됩니다 keycode
. 왼쪽에서 오른쪽으로 다음과 같습니다.
- 키 자체
- Shift + 키
- 모드 전환 + 버튼
- 모드_스위치+Shift+키
예를 들어:
xmodmap -e "44 = j J Down Next"
이는 "J" 키 "j"만 설정하고, Shift 키를 누르면 "J"를 설정하고, Mode_switch를 누르면 아래쪽 화살표를 설정하고, Mode_switch 및 Shift를 누르면 Page Down을 설정합니다.
Mode_switch
Mode_switch
Shift와 유사한 단일 범용 수정자입니다. 많은 키보드에는 Mode_switch
더 이상 전용(AltGr) 키 가 제공되지 않는 것 같지만 xmodmap
.
# Set left Alt as Mode_switch
xmodmap -e "keycode 108 = Mode_switch"
그놈 설정을 사용하여 스크립트를 실행하거나xbindkeys
어떻게 사용하는지 모르겠습니다 xmodmap
. 그러나 몇 가지 쉬운 방법이 있습니다.
i3 구성에서
이것i3 문서파일에 / 지시문을 사용하는 예가 있습니다 bindsym
.bindcode
~/.config/i3/config
bindcode 214 exec /home/you/some_script.sh
아직 i3를 설정하지 않았고, 이것을 테스트해보지도 않았지만, 사용 설명서에서 바로 따온 것입니다. 내 생각엔 이 코드가 xmodmap
& Friends에서 찾은 코드와 일치할 것 같아요.
난쟁이
확인하다설정 > 기기 > 키보드 > 키보드 단축키. 더하기 기호를 클릭하고 스크립트/키 조합을 추가하세요. 전체 경로(루트 디렉터리부터)를 스크립트에 입력하고 실행 가능한지 확인해야 합니다.
내 테스트에서 GNOME에서는 Home 및 End와 같은 특정 키를 사용할 수 없었습니다.
xbindkeys
xbindkeys
모든 키 입력을 가로채고 스크립트를 실행할 수 있습니다.
일부 구성 파일 예제를 보려면 xbindkeys --defaults > $HOME/.xbindkeysrc
파일을 실행하고 확인하세요.
터미널을 열지 않고 프로세스에서 파일을 실행하기만 한다는 점에 유의하세요.
당신의 모범
이는 필요에 따라 실행되는 실제 명령입니다. 본인의 키 코드를 꼭 확인하세요. 제가 갖고 있는 키 코드입니다.
1단계: 다시 매핑xmodmap
# print screen --> use as another super key, print screen with Mode_switch
# Note: On GNOME, it appears Super_R doesn't work the same as Super_L
xmodmap -e "keycode 107 = Super_L NoSymbol Print Sys_Req"
# left alt --> mode_switch key
xmodmap -e "keycode 64 = Mode_switch NoSymbol"
# escape key --> tilde and backtick
# Note: this can have unexpected consequences if you use `xcape` to map
# Control/Caps to send Escape when tapped. It will instead send `/~ when you
# press Caps Lock attempting to get Escape.
# A solution might be to switch the keys around and use a non-op key as a
# placeholder, like in the xcape README
# https://github.com/alols/xcape/blob/master/README.md#examples
xmodmap -e "keycode 9 = grave asciitilde grave asciitilde"
# original tild and back tick --> backspace
xmodmap -e "keycode 49 = BackSpace"
# backspace --> delete, and
# mode_switch + backspace --> home
xmodmap -e "keycode 22 = Delete NoSymbol Home"
# mode_switch + delete --> end
# Note: This won't work when combined with `xbindkeys`, since `xbindkeys`
# hijacks the entire Delete key from X.
xmodmap -e "keycode 119 = Delete NoSymbol End"
# mode_switch + h, j, k, l --> additional arrow keys
# Bonus: capital J/K are Page Down/Up, H/L are Home/End with Mode_switch + Shift
xmodmap -e "keycode 43 = h H Left Home"
xmodmap -e "keycode 44 = j J Down Next"
xmodmap -e "keycode 45 = k K Up Prior"
xmodmap -e "keycode 46 = l L Right End"
2단계: 변경사항 저장
# Write current config to a file
xmodmap -pke > ~/.Xmodmap
# Load the config into xmodmap
xmodmap ~/.Xmodmap
위의 마지막 명령을 ~/.profile
또는 에 추가하면 ~/.bash_profile
로그인할 때마다 로드됩니다(표준 설정이 있다고 가정). 나에게는 약간 느리므로 모든 xmodmap -e
명령을 수동으로 추가하고 싶을 수도 있습니다 .
3단계: 사용자 정의 스크립트에 대한 바인딩 설정xbindkeys
설치되어 있는지 확인 xbindkeys
하고 파일에 추가하세요 ~/.xbindkeysrc
.
# disable home, end, insert, delete keys and map them to run some script, and
"some-script-in-PATH"
Home
"some-script-in-PATH"
End
"some-script-in-PATH"
Insert
"some-script-in-PATH"
Delete
그런 다음 다시 로드하십시오 xbindkeys -p
.
4단계: 4단계 없음
추가 읽기
재매핑에 관한 Emacs Wiki 페이지
xmodmap의 Emacs Wiki 페이지
Xmodmap에 대한 Arch Wiki
StackExchange의 Mode_switch에 대한 추가 정보
보다 포괄적이고 덜 힘든 솔루션은 다음과 같습니다.나만의 키보드 레이아웃 작성.