
Ich verwende mehr als ein Tastaturlayout und möchte eine Möglichkeit finden, ein Skript auszuführen, wenn ich zwischen den Layouts wechsle.
Ist das möglich?
Bisher kann ich einem Skript eine Verknüpfung wie folgt zuweisen:
#!/bin/bash
#switch between two layouts (English and Greek in this case)
current_layouts=$(gsettings get org.gnome.libgnomekbd.keyboard layouts)
if [ "$current_layouts" = "us" ]; then
gsettings set org.gnome.libgnomekbd.keyboard layouts "['gr']"
else
gsettings set org.gnome.libgnomekbd.keyboard layouts "['us']"
fi
exec /path/to/another/script
Aber mit dieser Methode kann ich nur diese Tastenkombination zum Wechseln zwischen Layouts verwenden und die Tastaturanzeige verschwindet aus dem Statusmenü, was unangenehm ist.
Antwort1
dconf watch
kann als Ereignisempfänger verwendet werden, Beispiel (in Ubuntu 13.10/14.04):
dconf watch /org/gnome/desktop/input-sources/current | xargs -L 2 sh -c "echo kbd layout changed" &
Antwort2
gsettings monitor org.gnome.desktop.input-sources mru-sources \
| xargs -L1 bash -c 'source /path/to/your/script.sh'
Antwort3
Ich würde es andersherum machen, ein Skript ausführen, das das Layout ändert. Auf diese Weise können Sie mit demselben Skript alles andere tun, was Sie wollen. Leider ist es ziemlich schwierig, Ihr aktuelles Tastaturlayout herauszufinden. Ich habe keinen Ansatz gefunden, der funktioniert füralleMethoden zum Layoutwechsel. Aus irgendeinem Grund macht es einen Unterschied, ob Sie mit setxkbmap
oder über die GUI-Tastenkombinationen wechseln.
Meine Problemumgehung besteht also darin, immer mit zu wechseln setxkbmap
. Ich habe ein Skript, das aufruft setxkbmap
, und ich habe dieses Skript an eine Verknüpfung in meiner Desktopumgebung gebunden, damit ich problemlos wechseln kann. Das folgende Beispiel gilt für griechische und US-Layouts. Sie müssen es an Ihr Setup anpassen:
#!/usr/bin/env bash
key=`xmodmap -pke | grep -w "59" | awk '{print \$NF}'`
## If this is the "us" layout, that will return "less"
if [ $key == "less" ]; then
setxkbmap gr
## Add other things to be done here
else
setxkbmap us
## Add other things to be done here
fi