셸에서 Sway의 키보드 레이아웃을 전환하는 방법은 무엇입니까?

셸에서 Sway의 키보드 레이아웃을 전환하는 방법은 무엇입니까?

명령줄에서 Sway의 xkb 키보드 레이아웃 간에 전환하는 방법은 무엇입니까? 내 레이아웃 구성은 다음과 같습니다.

input type:keyboard {
    xkb_layout pl,es
    xkb_options grp:win_space_toggle,compose:caps
}

다음 레이아웃으로 전환하는 명령을 갖고 싶습니다( pl현재 레이아웃이 해당 레이아웃인 경우 해당 es레이아웃 es으로 전환 pl).

노트swaymsg "input type:keyboard xkb_switch_layout <index>": 특정 인덱스의 레이아웃을 변경할 수 있는 명령어가 있습니다 . 현재 인덱스를 얻는 방법을 모르기 때문에 다음 인덱스로 전환하는 데 어떻게 사용하는지 모르겠습니다.

답변1

Sway 버전 1.5.1을 사용하면 next. xkb_switch_layout그래서 더 이상 현재 색인과 총 항목 수를 가져올 필요가 없습니다.

swaymsg input "1:1:AT_Translated_Set_2_keyboard" xkb_switch_layout next

안타깝게도 식별자를 대신 사용할 수는 없습니다 type:keyboard. 를 사용하여 식별자를 찾을 수 있습니다 swaymsg -t get_inputs. 사용 가능한 모든 레이아웃과 현재 레이아웃의 인덱스를 보려면 --raw.

답변2

를 실행하여 입력의 현재 키보드 레이아웃 색인을 검색할 수 있습니다 swaymsg -t get_inputs. 그러면 입력 배열과 관련 설정이 포함된 JSON이 제공됩니다.

찾고 있는 키는 xkb_active_layout_index및 입니다 xkb_layout_names.

다음은 내 시스템에서 명령으로 제공되는 출력의 예입니다(관련 부분을 표시하기 위해 잘림).

  (...)
  {
    "identifier": "16700:8467:Dell_KB216_Wired_Keyboard",
    "name": "Dell KB216 Wired Keyboard",
    "vendor": 16700,
    "product": 8467,
    "type": "keyboard",
    "xkb_layout_names": [
      "English (US)",
      "Romanian (standard)"
    ],
    "xkb_active_layout_index": 0,
    "xkb_active_layout_name": "English (US)",
    "libinput": {
      "send_events": "enabled"
    }
  },
  (...)

sway의 전환 동작을 시뮬레이션하려면 다음 코드를 사용할 수 있습니다.

inputid="YOUR_KEYBOARD_INPUT_IDENTIFIER"

inputdata=$(swaymsg -t get_inputs | jq ".[] | select(.identifier==\"$inputid\")")
index=$(echo "$inputdata" | jq ".xkb_active_layout_index")
layoutcount=$(echo "$inputdata" | jq ".xkb_layout_names | length")
swaymsg input "$inputid" xkb_switch_layout $((($index + 1) % $layoutcount))

스윙 버전 1.4 사용

답변3

이미 올바른 구성이 있습니다. Super+Space는 키보드 레이아웃을 변경해야 합니다(즉, 이것이 win_space_toggle의미합니다). 키보드 레이아웃을 전환하기 위한 다른 주요 구성이 있으며 맨페이지에서 찾을 수 있습니다 man 7 xkeyboard-config.

관련 정보