setxkbmap을 사용하여 왼쪽 Shift 및 왼쪽 컨트롤을 교체하십시오.


17

? 대신에 왼쪽 Shift및 왼쪽 CTRL키 를 교환 할 수 있습니까?setxkbmapxmodmap

편집하다

Fcitx 로 전환했습니다 . 이는 모든면에서 IBus보다 키보드 레이아웃 및 사용자 정의 키 맵으로 훨씬 잘 작동합니다. 나는 그것을 강력히 추천합니다.

답변:


28

xmodmap더 이상 사용되지 않습니다. 실제로 xkb도구를 사용하여 수행해야합니다 .

원하는 스왑은 기본적으로 X11 파일에 포함되지 않은 것 같습니다. 직접 작성해야합니다.

http://madduck.net/docs/extending-xkb/ 페이지 를 통해 이해하고 이해하는 방법을 찾을 수있었습니다.

~/.xkb/keymap/mykbd의 출력을 넣을 파일을 작성하면 setxkbmap기본 키보드 정의가됩니다. 예 :

setxkbmap -print > ~/.xkb/keymap/mykbd

그런 다음 키 스와핑을 정의하기 위해 기호 파일을 작성하십시오. ~/.xkb/symbols/myswap

거기에 다음 줄을 넣으십시오.

partial modifier_keys
xkb_symbols "swap_l_shift_ctrl" {
    replace key <LCTL>  { [ Shift_L ] };
    replace key <LFSH> { [ Control_L ] };
};

그런 다음 ~/.xkb/keymap/mykbd파일을 편집하고 xkb_symbols추가 할 행을 변경 하십시오.

+myswap(swap_l_shift_ctrl)

마지막으로로드 할 수 있습니다 xkbcomp -I$HOME/.xkb ~/.xkb/keymap/mykbd $DISPLAY( -I매개 변수에 "~"를 사용할 수 없음 ). 희귀 키에 대해서는 정의되지 않은 기호에 대해 많은 경고를 뱉을 수도 있지만 무시할 수 있습니다 (예 : 오류를 dave :로 리디렉션 2> /dev/null).

일반과 반전 된 ctrl / shift 사이를 쉽게 바꿀 수 있기를 원한다면; ~/.xkb/keymap/추가 "myswap"옵션없이 다른 파일로 작성 하고로로드하십시오 xkbcomp. 두 개의 작은 스크립트를 만들어로드 할 수 있습니다.


1
감사. 작동하지만 한 번만 작동합니다. 문제는 IBus라는 입력 엔진을 사용하고 있다는 것입니다. 입력 방법을 전환 한 다음 키 입력 "Ctrl + Space"로 되돌아 갈 때마다 왼쪽 시프트 및 왼쪽 컨트롤이 다시 전환됩니다. 그것을 피하는 방법에 대한 제안.
— 일

음, 아마도 IBus 자체가 키보드 재정의를 수행합니다. xkbcomp $DISPLAY some.dumpIBus를 호출 한 후에 그리고 시도 하기 전에 두 개의 덤프를 비교하십시오 (이들은 완전한 키보드 정의입니다). 아마도 차이점이있을 것입니다.
— Pablo Saratxaga

흠, 얼마나 짜증나. 문제를 해결할 아이디어가 있습니까? 명령이 setxkbmap -option caps:escape작동합니다. IBus는 교환 된 키 Esc 및 Caps_Lock 키를 기억했지만 교환 된 왼쪽 Shift 및 왼쪽 제어 키에는 적용되지 않습니다.
— 일

어쩌면 IBus가 실행될 때 키보드를 읽을 수도 있습니다. IBus 언로드, 키보드 변경 및 다시로드를 시도하십시오. ; 문제의이 지속은 다음 IBus의 구체적인 질문을해야한다 (그것이 IMHO, IBus 키보드의 변화를 감지하고이를 존중해야하며, 어쩌면 버그를보고) 경우
— 파블로 Saratxaga

안녕하세요. 누구든지 동일한 기술을 사용하여 왼쪽 Alt 키를 왼쪽 Control 키로 바꾸는 방법을 말해 줄 수 있습니까? myswap 파일을 다음과 같이 변경하려고 시도했습니다. partial modifier_keys xkb_symbols "swap_l_shift_ctrl"{replace key <LCTL> {[Alt_L]}; 키 교체 <LALT> {[Control_L]}; }; 그러나 작동하지 않았습니다. 티아 !!!
— Neil Girardi

3

Pablo의 솔루션 사용 과 매핑 LALT하는 몇 가지 문제가 발생 하여 옵션도 설정해야합니다 .Control_Lmodifier_map

템플릿을 복사하여 /usr/share/X11/xkb/symbols/altwin찾아서 xkb_symbols "ctrl_alt_win"다음과 같이 변경했습니다.

  • 컨트롤의 LALT 키 **
  • Alt 키를 LWIN
  • MENU 키를 Windows 키로

최종 ~/.xkb/symbols/myswap파일은 다음과 같습니다.

partial modifier_keys
xkb_symbols "swap" {
   key <MENU> {     [   Super_L     ]   };
   key <LALT> { [ Control_L, Control_L  ] };
   key <RALT> { type[Group1] = "TWO_LEVEL",
                symbols[Group1] = [ Alt_R, Meta_R ] };
   key <LWIN> { [ Alt_L, Meta_L ] };
   key <LCTL> { [ Control_L ] };
   key <RCTL> { [ Control_R ] };
   modifier_map Control { <LALT>, <LCTL>, <RCTL> };
   modifier_map Mod1 { <LWIN>, <RALT> };
   modifier_map Mod4 { <MENU> };
};

새 쉘을 열 때 경고 출력을 피하기 위해 명령에 추가 -w0했습니다 xkbcomp.

xkbcomp -w0 -I$HOME/.xkb $HOME/.xkb/keymap/mykbd $DISPLAY

** Mac과 Linux를 많이 전환 할 때 Linux에 근육 메모리의 Mac 키보드와 비슷한 두 개의 제어 키가 있습니다.

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