Keyboard-Layout

如何從外殼切換 Sway 中的鍵盤佈局?

  • March 22, 2021

如何從命令行在 Sway 中的 xkb 鍵盤佈局之間切換?我的佈局配置如下:

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

我希望能夠有一個切換到下一個佈局的命令(pl如果目前佈局是eses則切換到目前佈局pl)。

注意:有一個命令swaymsg "input type:keyboard xkb_switch_layout <index>"允許您更改指定其索引的佈局。我不知道如何使用它來切換到下一個,因為我不知道如何獲取目前索引。

使用 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.

您可以通過執行檢索輸入的目前鍵盤佈局索引swaymsg -t get_inputs,這將為您提供一個包含輸入數組及其相關設置的 JSON。

您要查找的鍵是xkb_active_layout_indexxkb_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

引用自:https://unix.stackexchange.com/questions/571885