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, pl
wenn das aktuelle ist es
, zu, es
wenn 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 next
Folgendes 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:keyboard
anstelle 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_index
und 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_toggle
Bedeutung). Es gibt andere Tastenkonfigurationen zum Wechseln des Tastaturlayouts, Sie finden sie in den Manpages: man 7 xkeyboard-config
.