setxkbmap을 전환하는 스크립트

setxkbmap을 전환하는 스크립트

setxkbmap se: 와 사이를 전환하는 bash 스크립트를 원합니다 setxkbmap us.

내 의도는 CtrlEsc키보드 > 사용자 정의 단축키를 통해 해당 스크립트를 매핑하는 것입니다.

요점은 스위치 키보드 레이아웃을 사용하고 싶다는 것입니다 CtrlEscape. 어떻게 구현할 수 있나요?

답변1

실행 중인 데스크톱 환경이 무엇인지, 바로 가기 키를 할당하는 방법은 다를 수 있지만 이 스크립트는 적어도 내 환경에서는 전역적으로 작동 Ubuntu 12.04 box합니다 Arch Linux.

#!/bin/bash

(setxkbmap -query | grep -q "layout:\s\+us") && setxkbmap se || setxkbmap us

답변2

가장 좋은 방법은 스크립트를 사용하는 것이 아니라 키보드의 두 레이어(예: setxmodmap "us,se": )를 로드하고 재정의하여 CtrlISO_Next_Group Esc을 보내는 것입니다.

보고 있다이 답변은 xkb에 있습니다.기본 기본 파일을 편집하지 않고 특정 키를 재정의하는 방법을 알아보세요(루트가 필요하지 않음). 로컬 기호 파일에 작은 부품을 배치합니다(예 ~/.xkb/symbols/mysymbols:

partial modifier_keys 
xkb_symbols "ctrl_esc_toggle" {
    key <ESC> {
        type[Group1]="PC_CONTROL_LEVEL2",
        symbols[Group1]= [ Escape,     ISO_Next_Group ]
    };
};

PC_CONTROL_LEVEL2는 키의 두 번째 기호가 Ctrl(Shift가 아님)에 의해 획득됨을 나타냅니다.

그리고 xkb_symbols 행을 변경하여 로컬 키맵 파일에 "mysymbols(ctr_esc_toggle)"를 추가하십시오(예: ~/.xkb/keymap/mykbd; 를 사용하여 생성할 수 있음 setxkbmap "us,se" ; setxkbmap -print > ~/.xkb/keymap/mykbd). 그러면 다음과 같은 결과가 나타납니다.

xkb_symbols   { include "pc+us+se:2+inet(evdev)+terminate(ctrl_alt_bksp)+compose(rwin)+mysymbols(ctr_esc_toggle)"   };

("se:2", ":2"는 "se" 기호 정의를 그룹 2로 로드하라는 지시입니다. 다양한 그룹을 쌓을 수 있습니다).

이제 다음을 사용하여 로드할 수 있습니다. xkbcomp -I$HOME/.xkb ~/.xkb/keymap/mykbd $DISPLAY Ctrl-Esc를 누르면 "us"와 "se" 레이아웃이 전환됩니다.

그러나 Esc를 누르기 전에 Ctrl을 눌러야 하고 다른 방법은 작동하지 않습니다. (Escape를 위한 더미 수정자를 정의해야 하는데 어떻게 해야 할지 모르겠습니다.)

답변3

비슷한 질문에는 답변이 여러 개 있습니다질문. 그러나 그들 중 누구도 나를 위해 일하지 않습니다.

다음 스크립트는 모든 상황에서 작동해야 합니다. 다음을 사용하여 레이아웃을 전환할 때 내 데비안 시스템에서 확실히 작동합니다 setxkbmap.

#!/bin/bash
seven=`xmodmap -pke | grep "keycode  16" | awk '{print \$5}'` 
## If this is the "us" layout
if [ $seven == "ampersand" ]; then
    setxkbmap se
else
  setxkbmap us
fi

이 스크립트는 xmodmap의 출력을 구문 분석하여 현재 레이아웃이 "us"인지 "se"인지 확인합니다. "us" 레이아웃에서 SHIFT+ 7는 "&"에 매핑됩니다. "us"와 "se" 레이아웃만 전환하는 경우 "&"를 켜면 7"us" 레이아웃을 사용하고 스크립트가 "se"로 변경된다는 의미입니다. "&"가 켜져 있지 않으면 7스크립트가 "us"로 전환됩니다.

답변4

동일한 언어의 변형 간에 전환하려는 경우(예: us lang과 변형 intl이 있는 us lang 간):

#!/bin/bash

setxkbmap -query | grep -q 'variant:\s\+intl') && setxkbmap -layout us || setxkbmap -layout us -variant intl

관련 정보