Wie führe ich ein Skript aus, wenn ich zwischen Tastaturlayouts wechsle?

7

Ich verwende mehr als ein Tastaturlayout und möchte einen Weg finden, ein Skript auszuführen, wenn ich zwischen ihnen wechsle.

Ist das möglich?

Bisher kann ich eine Verknüpfung für ein Skript wie dieses 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

Mit dieser Methode kann ich jedoch nur diese Verknüpfung verwenden, um zwischen Layouts zu wechseln, und die Tastaturanzeige verschwindet aus dem Statusmenü, was unangenehm ist.

Radu Rădeanu
quelle

Antworten:

4

dconf watch kann beispielsweise als Ereignisempfänger verwendet werden (in Ubuntu 13.10 / 14.04):

dconf watch /org/gnome/desktop/input-sources/current | xargs -L 2 sh -c "echo kbd layout changed" &
user.dz
quelle
Leider dies funktioniert nicht mehr mit GNOME 3.18 (ich glaube , es mit dem zu tun hat dies so ist es auch frühere Versionen betroffen)
don_crissti
0

Ich würde es umgekehrt machen und 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, das aktuelle Tastaturlayout herauszufinden. Ich habe keinen Ansatz gefunden, der für alle Methoden der Layoutumschaltung funktioniert . Aus irgendeinem Grund gibt es einen Unterschied, wenn Sie mit setxkbmapoder über die GUI-Verknüpfungen wechseln .

Meine Problemumgehung besteht also darin, immer mit zu wechseln setxkbmap. Ich habe ein Skript, das aufruft, setxkbmapund ich habe dieses Skript an eine Verknüpfung in meiner Desktop-Umgebung gebunden, damit ich problemlos wechseln kann. Das folgende Beispiel bezieht sich auf griechische und US-amerikanische 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
terdon
quelle
Vielen Dank für Ihre Mühe, aber das ist nicht weit von meinem Skript. Der einzige Unterschied: Die Tastaturanzeige wird jetzt angezeigt, jedoch nur mit einem einzigen Layout. Und ja ... wenn es eine Möglichkeit gibt, das aktuelle Tastaturlayout zu bestimmen (nicht alle oder zuerst von ihnen, wie ich an anderen Stellen gesehen habe), wird es nett sein ...
Radu Rădeanu
@ RaduRădeanu Ich weiß, ich habe viele Methoden ausprobiert, aber sie sind nicht konsistent. Das Skript in meiner Antwort deaktiviert einfach die Tastaturanzeige auf meinem DE, so dass es noch schlimmer ist. Es ist nur die einzige Möglichkeit, ein Skript auszuführen, wenn ich Layouts ändere. Ich denke nicht, dass es möglich ist, wenn Sie den GUI-Layout-Umschalter verwenden. Lassen Sie mich wissen, wenn Sie eine bessere Lösung finden!
Terdon
0
gsettings monitor org.gnome.desktop.input-sources mru-sources \
        | xargs -L1 bash -c 'source /path/to/your/script.sh'
user2683246
quelle