コマンドラインで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
。