¿Cómo alternar la distribución del teclado en Sway desde el shell?

¿Cómo alternar la distribución del teclado en Sway desde el shell?

¿Cómo puedo alternar entre diseños de teclado xkb en Sway desde la línea de comando? Mis diseños están configurados así:

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

Me gustaría poder tener un comando que cambie al siguiente diseño ( plsi el actual es es, essi el actual es pl).

Nota: Hay un comando swaymsg "input type:keyboard xkb_switch_layout <index>"que le permite cambiar el diseño especificando su índice. No sé cómo usarlo para pasar al siguiente, ya que no sé cómo obtener el índice actual.

Respuesta1

Usando la versión 1.5.1 de sway, puedo nextproporcionar xkb_switch_layout. Por lo tanto, ya no necesita obtener el índice actual ni el número total de elementos.

swaymsg input "1:1:AT_Translated_Set_2_keyboard" xkb_switch_layout next

Lamentablemente, no puedo utilizarlo type:keyboarden lugar del identificador. Puedes encontrar tu identificador con swaymsg -t get_inputs. Si desea ver todos los diseños disponibles y el índice del diseño actual, deberá agregar --raw.

Respuesta2

Puede recuperar el índice de distribución de teclado actual de su entrada ejecutando swaymsg -t get_inputs, lo que le proporcionará un JSON que contiene una serie de entradas y sus configuraciones asociadas.

Las claves que buscas son xkb_active_layout_indexy xkb_layout_names.

A continuación se muestra un ejemplo del resultado proporcionado por el comando en mi sistema (recortado para mostrar la 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 el comportamiento de la palanca de sway, puede utilizar el siguiente 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 la versión 1.4 de sway

Respuesta3

Ya tienes la configuración correcta. Super+Space debería cambiar la distribución del teclado (eso es lo que win_space_togglesignifica). Hay otras configuraciones de teclas para cambiar la distribución del teclado, puede encontrarlas en las páginas de manual: man 7 xkeyboard-config.

información relacionada