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.