키보드 레이아웃 전환

키보드 레이아웃 전환

최종 목표

저는 Arch Linux를 bspwm창 관리자와 sxhkd단축키 데몬으로 사용합니다. 내 애플리케이션에서 특정 키 조합을 매핑하고 싶습니다.산시 홍콩 개발 연구 센터다양한 키보드 레이아웃으로 섞이게 됩니다. 예를 들어:

# Shuffle through keyboard layouts
super + e
    *action to be executed*

로케일

첫째, 세르비아어 키보드 레이아웃만 (가끔) 활성화하고 싶기 때문에 세르비아어 로케일을 추가해야 하는지 모르겠습니다. 내 생각에는 키 매핑이면 충분하다고 생각합니다. 만일을 대비해 세르비아어 로케일을 생성했으므로 이제 를 실행하면 localectl list-local출력은 다음과 같습니다.

en_US.UTF-8
sr_RS.UTF-8
sr_RS.UTF-8@latin

이는 각각 다음과 같습니다.

  • 미국 영어 로캘 – UTF-8 인코딩
  • 세르비아의 세르비아어 로케일 – 키릴 자모 – UTF-8 인코딩
  • 세르비아용 세르비아어 로케일 – 라틴어 스크립트 – UTF-8 인코딩

키맵

내가 사용하고 싶은 세 가지 레이아웃(셔플 기능 포함)은 다음과 같습니다.

  • us= 미국식 영어
  • sr-cy= 키릴 세르비아어
  • sr-latin= 라틴 세르비아어

대신 편집 /etc/vconsole.conf하고 설정 하거나 .KEYMAP=sr_cyuslocalectl set-keymap sr_cy

다음은 내 것입니다걱정하다그런 다음 즉시:

  1. 이것은 우아한 해결책이 아닙니다.
  2. 다른 레이아웃 간에 전환할 수 없습니다. 매번 명령을 실행하고 원하는 레이아웃을 지정해야 합니다.
  3. 로그아웃하거나 시스템을 다시 시작한 후에도 이 변경 사항이 전체적으로 유지됩니까? 대답이 '예'라면 문제가 생길 수 있습니다. LUKS 암호화에서 LVM을 사용하고 있으며 디스크를 해독하려면 us레이아웃이 필요합니다. 따라서 재부팅하기 전에 키릴 문자로 전환하는 것을 잊어버리면 영원히 작별 인사가 됩니다.

질문

/etc/vconsole.conf여러 개의 키맵을 추가 하고 이를 us기본값으로 설정할 수 있는 방법이 있습니까 ? 그렇다면 둘 사이를 전환하려면 어떻게 해야 합니까? 이것은 간단한 명령인가요, 아니면 작은 스크립트가 필요한가요? 이것이 선택 사항이 아닌 경우 최종 목표를 달성하는 가장 좋은 방법은 무엇입니까?

여러 개의 키맵이 있는 답변을 찾으려고 했지만 내 문제에 적용되는 항목을 찾을 수 없었습니다. 특히 내 지식을 향상시키는 솔루션이나 의견 및 제안에 감사드립니다. 미리 감사드립니다!

답변1

setxkbmap명령에서 설정한 것과 다른 레이아웃 이름이 실제로 필요하기 때문에 "새 키보드 설명을 로드하는 중에 오류가 발생했습니다"라는 메시지가 표시됩니다 .

을 실행하면 localectl list-keymaps | grep sr다음을 얻게 됩니다. sr-cy그리고 예상대로 sr-latin.

실행하면 localectl list-locales | grep sr예상된 결과도 얻을 수 있습니다: sr_RS.UTF-8sr_RS.UTF-8@latin.

그러나 localectl list-x11-keymap-layouts| grep sr아무것도 반환되지 않으며 대신 다른 두 글자 약어를 사용해야 합니다. localectl list-x11-keymap-layouts| grep rs이는 rsX11에서 사용할 세르비아어 키보드 레이아웃을 반환합니다.

따라서 Cyrillic실제로 사용해야 하는 경우 setxkbmap rs기본값은 키릴 문자 레이아웃입니다.

레이아웃을 활성화하려면 Latin세르비아어 키보드 레이아웃이 기본 레이아웃이 아니기 때문에 특별히 이 변형을 활성화해야 합니다.setxkbmap -layout rs -variant latin

나는 이 명령을 직접 사용합니다: setxkbmap -layout rs,rs,de,us -variant latin,,,dvp -option 'grp:alt_shift_toggle'. 이는 다음을 수행합니다.

  • 다음에 추가세르비아레이아웃을 내 기본값으로 설정하고라틴어그 변형
  • 다음에 추가세르비아레이아웃 및 기본값(키릴 문자)
  • 다음에 추가독일 사람기본 레이아웃
  • 다음에 추가우리를레이아웃 및 설정드보르자크 프로그래머레이아웃
  • Alt+Shift키 조합을 사용하여 레이아웃 간을 전환하는 옵션이 추가되었습니다.

동일한 순서로 설정해야 합니다. 변형에 대해 아무것도 설정되지 않은 경우(쉼표 뒤에 아무것도 설정되지 않음을 의미) 해당 언어의 기본값이 사용됩니다 -layout.-variant

이 로케일을 활성화 /etc/locale.gen하고 build 명령을 사용했습니다 sudo locale-gen.

localectl을 사용하여 나열하면 다음과 같습니다.

localectl list-locales
C.UTF-8
de_DE.UTF-8
en_DK.UTF-8
en_US.UTF-8
sr_RS.UTF-8
sr_RS.UTF-8@latin

내 기본 localectl은 다음과 같습니다.

localectl status
System Locale: LANG=en_US.UTF-8
               LC_NUMERIC=sr_RS@latin
               LC_TIME=sr_RS@latin
               LC_MONETARY=sr_RS@latin
               LC_PAPER=sr_RS@latin
               LC_NAME=sr_RS@latin
               LC_ADDRESS=sr_RS@latin
               LC_TELEPHONE=sr_RS@latin
               LC_MEASUREMENT=sr_RS@latin
               LC_IDENTIFICATION=sr_RS@latin
    VC Keymap: sr-latin
   X11 Layout: rs,latin

나는 Arch Linux와 I3를 타일링 관리자로 사용하고 있는데 이 줄은 내~/.config/i3/config

exec --no-startup-id sleep 6 && setxkbmap -layout rs,rs,us,de -variant latin,,dvp, -option 'grp:alt_shift_toggle'

간단한 키 조합으로 레이아웃을 로드하고 레이아웃 전환을 활성화합니다.

나도 가지고 있어

exec --no-startup-id gxkb

현재 키보드 레이아웃을 나타내는 아이콘을 i3blocks 바에 추가합니다.

OP가 동일한 구성을 사용하지 않는다는 것을 알고 있지만 이것이 설정으로 쉽게 변환될 수 있다고 생각합니다.

답변2

나는 setxkbmapDvorak과 QUERTY 사이를 자주 전환합니다. 내 창 관리자가 바로가기에 바인딩된 bash 스크립트 ~/.local/bin/toggle_kbd(내 항목에 포함됨 )가 있습니다. PATH현재 키보드가 아닌 다른 키보드로 설정하기 위해 Case 문을 실행합니다. 나는 다음에 나열된 키맵 이름을 사용하고 있습니다 localectl list-keymaps.

#!/usr/bin/env bash

case $(setxkbmap -query | grep layout | awk '{ print $2 }') in
          us) setxkbmap sr-cy ;;
       sr-cy) setxkbmap sr-latin ;;
    sr-latin) setxkbmap us -variant altgr-intl ;;
           *) setxkbmap us -variant altgr-intl ;;
esac

X가 다시 시작될 때마다 해당 지역의 키보드(시작할 때 사용한 일반 키보드)도 재설정됩니다. 이것하다특정 항목을 설정하는 대신 반복해서 살펴보세요. 이것이 당신에게 얼마나 큰 문제인지는 모르겠지만 스크립트 아이디어는 이에 쉽게 적용될 수 있습니다.

답변3

평판이 부족해서 댓글을 달 수 없습니다. 나는 대답을 모른다. 단지 내 생각을 공유하고 싶었다.

첫째, 최악의 시나리오입니다. USB 스틱과 같은 외부 드라이브를 만들고 이 드라이브에서 부팅하여 내부 드라이브에서 파일을 복구하면 비밀번호를 입력할 수 없는 문제를 복구할 수 있습니까? 어쩌면 최악의 시나리오에 대비하기 위해 이것을 시도해 볼 수도 있습니다.

저는 localectl을 사용해 본 적이 없으며 다른 소프트웨어의 현지화도 제어하기 때문에 키보드 레이아웃만 변경하는 것만으로도 귀하의 요구에 비해 너무 강력해 보입니다. 나는 보통 setxkbmap. 그러나 이는 테스트할 수 있습니다. 미국 키맵의 복사본을 만들고, 두 개의 키를 교환하고(적어도 하나는 암호 해독 암호의 일부임), 복사본을 적용하고, 시스템을 재부팅하면 이제 새 레이아웃이 여전히 적용되는지 확인할 수 있습니다. (비밀번호가 asdf인 경우 의미가 명확하길 바랍니다. f와 g를 바꾸어 asdf 또는 asdg를 입력해야 하는지 확인하세요.)

나는 당신을 위해 이 일을 하기 위해 확실히 많은 것을 가정했습니다. X를 사용하지 않으면 전혀 쓸모가 없습니다.

관련 정보