Como alternar o layout do teclado no Sway a partir do shell?

Como alternar o layout do teclado no Sway a partir do shell?

Como posso alternar entre os layouts de teclado xkb no Sway a partir da linha de comando? Meus layouts estão configurados assim:

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

Eu gostaria de poder ter um comando que mude para o próximo layout (para plse o atual for es, para esse o atual for pl).

Observação: Existe um comando swaymsg "input type:keyboard xkb_switch_layout <index>"que permite alterar o layout especificando seu índice. Não sei como usar isso para passar para o próximo, pois não sei como obter o índice atual.

Responder1

Usando o sway versão 1.5.1, posso fornecer nextpara o xkb_switch_layout. Portanto, você não precisa mais obter o índice atual e o número total de itens.

swaymsg input "1:1:AT_Translated_Set_2_keyboard" xkb_switch_layout next

Infelizmente, não posso usar type:keyboardem vez do identificador. Você pode encontrar seu identificador com swaymsg -t get_inputs. Se você quiser ver todos os layouts disponíveis e o índice do layout atual, você precisará adicionar --raw.

Responder2

Você pode recuperar o índice de layout de teclado atual de sua entrada executando swaymsg -t get_inputs, que fornecerá um JSON contendo uma matriz de entradas e suas configurações associadas.

As chaves que você está procurando são xkb_active_layout_indexe xkb_layout_names.

Aqui está um exemplo da saída fornecida pelo comando em meu sistema (cortado para mostrar a parte relevante):

  (...)
  {
    "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"
    }
  },
  (...)

Para simular o comportamento da alternância do sway, você pode usar o seguinte código:

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

Usando o sway versão 1.4

Responder3

Você já tem a configuração correta. Super+Space deve mudar o layout do seu teclado (é isso que win_space_togglesignifica). Existem outras configurações de teclas para alternar layouts de teclado, você pode encontrá-las nas páginas de manual: man 7 xkeyboard-config.

informação relacionada