¿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 ( pl
si el actual es es
, es
si 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 next
proporcionar 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:keyboard
en 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_index
y 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_toggle
significa). Hay otras configuraciones de teclas para cambiar la distribución del teclado, puede encontrarlas en las páginas de manual: man 7 xkeyboard-config
.