Wie kann ich das Tastaturlayout in Sway über die Shell umschalten?

Wie kann ich das Tastaturlayout in Sway über die Shell umschalten?

Wie kann ich in Sway über die Befehlszeile zwischen xkb-Tastaturlayouts wechseln? Meine Layouts sind wie folgt konfiguriert:

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

Ich hätte gerne einen Befehl, der zum nächsten Layout wechselt (zu, plwenn das aktuelle ist es, zu, eswenn das aktuelle ist pl).

Notiz: Es gibt einen Befehl swaymsg "input type:keyboard xkb_switch_layout <index>", mit dem Sie das Layout ändern können, indem Sie seinen Index angeben. Ich weiß nicht, wie ich damit zum nächsten wechseln kann, da ich nicht weiß, wie ich den aktuellen Index erhalte.

Antwort1

Mit Sway Version 1.5.1 kann ich nextFolgendes bereitstellen xkb_switch_layout. Sie müssen also nicht mehr den aktuellen Index und die Gesamtzahl der Elemente abrufen.

swaymsg input "1:1:AT_Translated_Set_2_keyboard" xkb_switch_layout next

Leider kann ich nicht type:keyboardanstelle des Bezeichners verwenden. Sie finden Ihren Bezeichner mit swaymsg -t get_inputs. Wenn Sie alle verfügbaren Layouts und den Index des aktuellen Layouts sehen möchten, müssen Sie hinzufügen --raw.

Antwort2

Sie können den aktuellen Tastaturlayoutindex Ihrer Eingabe abrufen swaymsg -t get_inputs, indem Sie ausführen. Dadurch erhalten Sie ein JSON mit einem Array von Eingaben und den zugehörigen Einstellungen.

Die Schlüssel, nach denen Sie suchen, sind xkb_active_layout_indexund xkb_layout_names.

Hier ist ein Beispiel der Ausgabe, die der Befehl auf meinem System liefert (ausgeschnitten, um den relevanten Teil anzuzeigen):

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

Um das Verhalten des Sway-Umschalters zu simulieren, können Sie den folgenden Code verwenden:

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

Verwenden von Sway Version 1.4

Antwort3

Sie haben bereits die richtige Konfiguration. Super+Leertaste sollte Ihr Tastaturlayout ändern (das ist die win_space_toggleBedeutung). Es gibt andere Tastenkonfigurationen zum Wechseln des Tastaturlayouts, Sie finden sie in den Manpages: man 7 xkeyboard-config.

verwandte Informationen