Как переключить раскладку клавиатуры в Sway из оболочки?

Как переключить раскладку клавиатуры в Sway из оболочки?

Как переключаться между раскладками клавиатуры xkb в Sway из командной строки? Мои раскладки настроены следующим образом:

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))

Использую версию sway 1.4

решение3

У вас уже есть правильная конфигурация. Super+Space должен изменить раскладку клавиатуры (вот что это win_space_toggleзначит). Существуют и другие конфигурации клавиш для переключения раскладок клавиатуры, вы можете найти их на страницах руководства: man 7 xkeyboard-config.

Связанный контент