대체 및 슈퍼 스왑


27

Linux를 실행하는 Macbook Air가 있습니다. 키보드 양쪽의 키 altsuper키 를 서로 바꾸고 싶습니다 .

cli 도구를 사용하여이 작업을 어떻게 수행합니까?

최신 정보

Drav Sloan의 답변에 따라 다음을 사용했습니다.

keycode 64 = Alt_L
keycode 133 = Super_L
remove Mod1 = Alt_L
remove Mod4 = Super_L
add Mod1 = Super_L
add Mod4 = Alt_L

keycode 108 = Alt_R
keycode 134 = Super_R
remove Mod1 = Alt_R
remove Mod4 = Super_R
add Mod1 = Super_R
add Mod4 = Alt_R

1
이상하게도 bototm이 아닌 처음 6 줄만 파일로 가져 와서 xmobmap 파일을 실행할 때 나를 위해 일했습니다 (mac air). 결론으로 나는 오류가 있었다.
레오 Ufimtsev

답변:


20

이를 달성하는 한 가지 방법은 xmodmap입니다. xev주요 이벤트를 얻기 위해 실행할 수 있습니다 . 실행시 xev상자가 나타나고 초점을 맞추고 교환하려는 키를 누를 수 있습니다. Alt키 와 비슷한 세부 정보를 출력해야합니다 .

KeyPress event, serial 28, synthetic NO, window 0x8800001,
  root 0x25, subw 0x0, time 2213877115, (126,91), root:(1639,475),
  state 0x0, keycode 14 (keysym 0xffe9, Alt_L), same_screen YES,
  XLookupString gives 0 bytes: 
  XmbLookupString gives 0 bytes: 
  XFilterEvent returns: False

저는 PC에 있는데 "Command Key"는 없지만 "Windows Key"와 동일하며 xev는 다음을 제공합니다.

KeyPress event, serial 28, synthetic NO, window 0x8000001,
  root 0x25, subw 0x0, time 2213687746, (111,74), root:(1624,98),
  state 0x0, keycode 93 (keysym 0xffeb, Super_L), same_screen YES,
  XLookupString gives 0 bytes: 
  XmbLookupString gives 0 bytes: 
  XFilterEvent returns: False

xmodmap은을 state모르고 키 매핑을 쉽게 끊을 수 있으므로 다음을 수행하는 것이 좋습니다.

xmodmap -pke > defaults

그런 다음 xmodmap 파일을 만듭니다.

keycode 14 = Alt_L
keycode 93 = Super_L
remove Mod1 = Alt_L
remove Mod4 = Super_L
add Mod1 = Super_L
add Mod4 = Alt_L

xev반환 된 키 코드를 어떻게 사용하고 있는지 확인하십시오 . 또한 여기에서는 왼쪽 슈퍼 및 Alt 키만 교체하고 올바른 키는 이전 동작으로 남겨 둡니다. 그런 다음을 실행 xmodmap하여 다음 키를 설정할 수 있습니다 .

$ xmodmap -v modmap.file
! modmap:
! 1:  keycode 14 = Alt_L
        keycode 0xe = Alt_L
! 2:  keycode 93 = Super_L
        keycode 0x5d = Super_L
! 3:  remove Mod1 = Alt_L
! Keysym Alt_L (0xffe9) corresponds to keycode(s) 0xe
        remove mod1 =  0xe
! 4:  remove Mod4 = Super_L
! Keysym Super_L (0xffeb) corresponds to keycode(s) 0x5d
        remove mod4 =  0x5d
! 5:  add Mod1 = Super_L
        add mod1 = Super_L
! 6:  add Mod4 = Alt_L
        add mod4 = Alt_L
!
! executing work queue
!
        keycode 0xe = Alt_L
        keycode 0x5d = Super_L
        remove mod1 =  0xe
        remove mod4 =  0x5d
        add mod1 = Super_L
        add mod4 = Alt_L

-v자동 실행을 위해 (verbose) 스위치 없이 실행할 수 있지만 modmap 파일에서 실수를 한 경우 유용합니다. 문제가 발생하면 기본값을 다시 적용하십시오.

xmodmap defaults

Modmap은 종종 X를 시작할 때 실행되므로 modmap 명령을에 넣으면 기본값으로 적용 할 수 있습니다 ~/.xmodmaprc.


이 작업을 수행하는 방법이 setxkbmap있습니까? setxkbmap -option compose:ralt이 옵션과 함께 옵션 을 사용하고 싶습니다 .

나는 다른 대답으로 swap_opt_cmd 솔루션을 사용했지만 이것은 철저하고 명확하게 작성 되었기 때문에 공감할 가치가 있습니다. 브라보 선생님
존 프랭클린


26

Apple 키보드에서이 작업을 수행하려면 다음을 시도하십시오.

echo 1|sudo tee /sys/module/hid_apple/parameters/swap_opt_cmd

이것이 더 낮은 버전의 Linux에서 작동하도록하려면 다음을 시도하십시오. http://blog.chaselambda.com/2014/10/09/apple-keyboard-on-linux-3.8.html


다른 답변도 효과가 있지만 이것은 Mac Books 솔루션입니다. 매력처럼 일했다!
sinisterstuf

1
이것이 기본이 아닌 이유는 무엇입니까?!
존 프랭클린

이 파일에 대한 쓰기 액세스 권한이 없습니다. :-(
itmuckel

1
@ Micha90-당신이 사용해야합니다 tee: echo "1" | sudo tee /sys/module/hid\_apple/parameters/swap\_opt\_cmd
jaustin

2
1 시간 동안 xmodmap을 구성하십시오. 작동합니다. 그런 다음 두 번째 답변을 참조하십시오 ...
Bilow

17

왼쪽 alt와 super 키만 바꾸려면 터미널에서 명령을 실행하십시오.

setxkbmap -option altwin:swap_alt_win

기본 동작을 복원하려면 다음을 사용하십시오.

setxkbmap -option

참고 : 이것은 일시적입니다. 효과를 영구적으로 시작하려면 시작 파일에 추가하십시오.


4
깨끗하고 내장 된 기능을 사용하기 때문에 이것이 허용되는 솔루션이어야합니다. 기본 동작복원하려면을 사용할 수 있다고 언급 했어야 합니다 setxkbmap -option. left alt와 super key바꾸 려면 다음 명령을 사용하십시오 setxkbmap -option altwin:swap_lalt_lwin.
erik

1
Logitech 키보드를 가지고 있으며 왼쪽 alt (Alt_L)로 Windows 키 (Super_L)를 전환했습니다. 감사!
Derek

4
$ xmodmap -pke

어떤 키 코드 alt와 super가 바인딩되어 있는지 확인한 다음 홈 폴더에서 새 파일 .xmodmaprc를 열거 나 만듭니다. 예를 들어, 슈퍼 / Alt 키는

keycode  64 = Alt_L Meta_L Alt_L Meta_L
keycode 108 = Alt_R Meta_R Alt_R Meta_R
keycode 133 = Super_L NoSymbol Super_L
keycode 134 = Super_R NoSymbol Super_R

그러나 키를 바꾸려면 다음을 .xmodmaprc에 넣으십시오.

keycode  64 = Super_L NoSymbol Super_L
keycode 108 = Super_R NoSymbol Super_R
keycode 133 = Alt_L Meta_L Alt_L Meta_L
keycode 134 = Alt_R Meta_R Alt_R Meta_R

키 코드 / 역할 연관을 덮어 쓰는 것 ... 간단하고 작동합니다. remove ...솔루션 과 비교하여 단점이 있는지 궁금합니다 .
반지 Ø

grep출력을 필터링 하는 데 사용할 수 있으므로 xmodmap -pke | grep -i "super\|alt"필요한 것을 쉽게 볼 수 있어야합니다.
Benjamin R

0

당신이 나 같은 불행한 사람들 중 하나라면 xmodmap이 오른쪽 Ctrl로 오른쪽 Alt를 전환 할 수 없다면 도움이 될 것입니다.

오른쪽 Alt 키와 e 키를 누르면 é가 표시되며이 솔루션이 적합합니다 (개선 필요).

터미널에서 이것을 실행하십시오 (xev로 키 코드를 확인하십시오) :

xmodmap -e "keycode 108 = Alt_R Meta_R Alt_R Meta_R"

그런 다음이 코드를 .Xmodmap에 넣으십시오.

remove Control = Control_R
remove Mod1 = Alt_R
keycode 105 = Alt_R
keycode 108 = Control_R
add Control = Control_R
add Mod1 = Alt_R

이 코드는 Alt_Gr 키를 Alt_R로 설정 한 다음 Alt_r을 Ctrl_R로 바꿉니다.

로그 아웃 한 후에이 상태를 유지하려면 시작 쉘 파일 (예 : ~ / .profile)에 다음 명령을 입력하십시오.

if [ -f $HOME/.Xmodmap ]; then
  xmodmap -e "keycode 108 = Alt_R Meta_R Alt_R Meta_R"
  /usr/bin/xmodmap $HOME/.Xmodmap
fi

출처 : question1 question2

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.