Ist es möglich, für bestimmte Anwendungen eine Standardtastatursprache zuzuweisen? Ich weiß, dass es eine Option gibt, eine Anwendung immer mit einer Standardtastatursprache zu starten, aber das ist nicht das, was ich will.
Ich suche etwas Ähnliches wie "feste Arbeitsbereiche", die Sie mit CompizConfig festlegen können (Sie stellen Chrome so ein, dass es immer bei X1Y1, Terminal bei X2Y1 usw. geöffnet ist). Etwas, wo ich Chrome einstellen würde: Tschechisch, Terminal: Englisch, Spotify: Englisch, ...
Antworten:
Einführung
Das folgende Skript legt die Sprache für jedes benutzerdefinierte Programm entsprechend der Position dieser Sprache im Sprachmenü fest. Wenn meine Bestellung beispielsweise Englisch (1), Chinesisch (2) und Russisch (3) lautet, kann ich Firefox auf Sprache 2, Terminal auf Sprache 1 und LibreOffice auf Sprache 3 einstellen.
Das Skript besteht aus zwei Teilen: Teil eins ist das eigentliche Skript, das die Arbeit erledigt, das zweite Skript dient als Steuerelement. Die Idee ist , die Spracheinstellung Skript als laufen Start-up - Anwendung und wann immer Sie manuell ändern Sprache benötigen - Mit Doppelklick auf die Verknüpfung zu dem Controller Skript.
Voraussetzungen
wmctrl
Programm mitsudo apt-get install wmctrl
.Skript
Controller-Skript
Launcher-Datei (.desktop) für das Skript set-lang.sh
Launcher-Datei (.desktop) für set-lang-controller.sh
Damit das Skript funktioniert
bin
. Sie können dies im Dateimanager tun oder den Befehlmkdir $HOME/bin
im Terminal verwendenbin
Erstellen Sie im Ordner zwei Dateien:set-lang.sh
undset-lang-control.sh
. Speichern Sie das Skript inset-lang.sh
und das Controller-Skript inset-lang-control.sh
. Machen Sie beide Skripte ausführbar mitsudo chmod +x $HOME/bin/set-lang-control.sh $HOME/bin/set-lang.sh
.desktop
Dateien. Eins istset-lang.desktop
. Muss im versteckten.config/autostart
Verzeichnis abgelegt werden . Zweitens istset-lang-controller.desktop
, kann in Ihrembin
Ordner platziert werden. Ziehen Sie anschließend dieset-lang-controller.desktop
Datei per Drag & Pin an den Launcher . Dies wird zur Verknüpfung zum vorübergehenden Stoppen und Fortsetzen der Skriptausführung.HINWEIS : Die Zeile
Exec=
muss geändert werden, damit Ihr tatsächlicher Benutzername im Pfad zum Skript enthalten ist (da dies Ihr tatsächliches Ausgangsverzeichnis ist). Zum Beispiel wäre meineExec=/home/serg/bin/set-lang.sh
Erklärung und Anpassung:
Das Skript selbst wird in einer Endlosschleife ausgeführt und überprüft das aktuell aktive Fenster. Wenn das aktuell aktive Fenster mit einer der Optionen in der Fallstruktur übereinstimmt, wechseln wir zur entsprechenden Sprache. Um eine konstante Einstellung zu vermeiden, verfügt jeder Teil der Fallstruktur über eine if-Anweisung, die prüft, ob die Sprache bereits auf den gewünschten Wert eingestellt wurde.
Durch Doppelklicken auf den Launcher für
set-lang-controller.sh
wird der Status desset-lang.sh
Skripts überprüft . Wenn das Skript ausgeführt wird, wird es angehalten, und wenn das Skript angehalten wird, wird es fortgesetzt. Eine Benachrichtigung wird mit der entsprechenden Nachricht angezeigt.Um das Skript anzupassen, können Sie die gewünschten Anwendungen öffnen
wmctrl -lx
, die dritte Spalte ausführen und notieren - die Fensterklasse. Beispielausgabe:Wählen Sie für jedes Programm die entsprechenden Fensterklassen aus. Wechseln Sie als Nächstes zu dem Teil des Skripts, der die Anpassung ermöglicht, und fügen Sie zwei Einträge für PROG_CLASS und LANG hinzu. Fügen Sie als Nächstes den entsprechenden Eintrag in die Fallstruktur ein.
Wenn ich beispielsweise LibreOffice's Writer hinzufügen möchte, öffne ich das LibreOffice Writer-Fenster, gehe zum Terminal und führe es aus
wmctrl -lx
. Es wird mir sagen, dass das Writer-Fenster Klasse hatlibreoffice.libreoffice-writer
. Als nächstes gehe ich zum Skript, füge hinzuPROG_CLASS_4=libreoffice.libreoffice-writer
undLANG4=3
in den entsprechenden Bereich. Beachten Sie die übereinstimmende Nummer 4. Wechseln Sie als Nächstes zur Fallstruktur und fügen Sie den folgenden Eintrag zwischen last;;
und hinzuesac
:Beachten Sie erneut das $ -Zeichen und die übereinstimmende Nummer 4.
Wenn das Skript als Autostart-Element ausgeführt wird und Sie es vorübergehend anhalten möchten, um es anzupassen, verwenden Sie es
pkill set-lang.sh
und fahren Sie mit fortnohup set-lang.sh > /dev/null 2&>1 &
Kleiner Hinweis: Eine andere Möglichkeit, die Fensterklasse für ein Programm herauszufinden (das Zeug, das in der Fallstruktur vor einer einzelnen runden Klammer steht), besteht darin, dies
xprop
und einenawk
Oneliner zu verwenden:xprop | awk '/WM_CLASS/ {gsub(/"/," "); print $3"."$5}
quelle
kill -STOP $(pgrep set-lang.sh)
und setze das Skript dann mit fortkill -CONT $(pgrep set-lang.sh)
. Auf diese Weise können Sie es anhalten, die Sprache normal wechseln und dann fortfahren.~/bin
benötigen weder den Pfad (noch die Erweiterung, da sie$PATH
nach einer erneuten Anmeldung vorhanden sind, siehe: lintian.debian.org/tags/script-with-language-extension .html ), und Sie können Stop / Start in einer.desktop
Datei kombinieren ; entweder in einer Quicklist oder einer Umschaltfunktion. sieht für mich ziemlich perfekt aus.Sie können dies installieren
gxneur
, indem Sie ausführenDiese Software kann Layouts automatisch wechseln, ist aber damit nicht perfekt.
Aber es hat sehr schöne Werkzeuge, um manuelle Layout-Schalter einzurichten.
Sie können genau das tun, was Sie wollen. Festlegen bestimmter Layouts für bestimmte Anwendungen.
quelle
Das folgende Skript ist eine bearbeitete Version dieses Skripts , die vor einiger Zeit als ähnliche Lösung für eine einzelne Anwendung (
gnome-terminal
) veröffentlicht wurde.Das Skript wurde für diese Frage teilweise neu geschrieben, um damit automatisch Sprachen für mehrere Anwendungen festlegen zu können.
Wie in der Praxis zu verwenden; merkt sich automatisch die eingestellte Sprache pro Anwendung
Wenn das Skript zum ersten Mal gestartet wird, wird angenommen, dass die aktuelle Sprache die Standardsprache ist, die in einer versteckten Datei gespeichert wird :
~/.lang_set
.Dann ist die Verwendung einfach: Wenn Sie z. B.
gedit
im vordersten Fenster ausführen und eine andere Sprache einstellen, wird diese Sprachegedit
von da an automatisch verbunden , bis Sie die Sprache mitgedit
vorne wieder ändern .Die Anzahl der spezifischen Sprachen / Anwendungen ist grundsätzlich unbegrenzt; Führen Sie einfach die Anwendung aus und stellen Sie die Sprache mit dem Anwendungsfenster vor. Die Anwendung wird automatisch festgelegt und gespeichert, ohne den Code zu bearbeiten.
Ereignisgesteuert?
Obwohl das Skript in einer Schleife ausgeführt wird, ist der Ressourcenverbrauch minimal. Ereignisgesteuert würde bedeuten, dass das Ereignis eine Änderung im vordersten Fenster ist. Ich sehe keine andere Möglichkeit, als das vorderste Fenster auszuspionieren, als in einer Schleife einzuchecken.
Das Skript
Wie stellt man das ein
Das Skript verwendet beide
xdotool
undwmctrl
:Kopieren Sie das obige Skript in eine leere Datei und speichern Sie es unter
set_language.py
Testen Sie es mit dem folgenden Befehl:
Wenn alles wie erwartet funktioniert, fügen Sie es zu Startanwendungen hinzu: Zu Startanwendungen hinzufügen: Dash> Startanwendungen> Hinzufügen. Fügen Sie den Befehl hinzu:
quelle