シェルで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ではnextxkb_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

関連情報