Ich schreibe gerne Artikel, bei denen am Anfang nicht klar ist, was am Ende herauskommen wird. So auch dieser. Häufig steht am Anfang ein Bedürfnis oder eine Idee. Meistens gibt es mehrere Möglichkeiten, wie sich das Bedürfnis umsetzen lässt.
Das Bedürfnis
Die meisten Anwender:innen der GNOME-Desktop-Umgebung geben sich – früher oder später – nicht mit der Grundfunktionalität zufrieden, sondern konfigurieren ihre Oberfläche so, dass ihr Workflow besser unterstützt wird. Dafür bieten sich die GNOME-Shell-Erweiterungen an, oder auch diverse Tastenkürzel oder Aliase. In meinem Fall habe ich einige Tastenkombinationen mit Befehlen belegt, um bestimmte Anwendungen zu starten. So ruft z. B. bei mir die Tastenkombination SUPER+C den Taschenrechner auf. Zudem habe ich ein paar Aliase eingerichtet, damit ich im Terminal einen Befehl oder eine Befehlskette mit einem einfachen Schlüsselwort starten kann.
Manchmal weiss ich nicht mehr, welche Abkürzungen ich konfiguriert habe, was diese Erleichterung ad absurdum führt. Entweder man weiss auswendig, was man tippen oder eingeben soll, oder eben nicht. Selbstverständlich kann man in den GNOME-Tastatureinstellungen nachsehen oder im Terminal 'alias' eingeben, um zur gewünschten Information zu gelangen, aber damit ist der Vorteil vergeben.
Deshalb möchte ich meine Aliase und Tastenkürzel auf Knopfdruck anzeigen lassen, z. B. mit SUPER+?
Lösungsansätze
Bevor ich das implementieren konnte, musste ich zuerst einmal wissen, wie man programmatisch zu diesen Informationen kommt. Bei den Aliasen ist es sehr einfach: man tippt im Terminal: alias.
Möchte man wissen, welche Tastenkürzel eingerichtet sind, finden sich diese in den GNOME-Einstellungen:
Dabei handelt es sich nur um die "eigenen" Tastenkürzel. Tatsächlich gibt es weitere Shortcuts, welche als Standardeinstellungen zur Verfügung stehen und auf Wunsch belegt werden können, z. B. für den Dateimanager oder den Taschenrechner. Das riecht nach Schwierigkeiten bei der Implementierung meines Bedürfnisses.
Weitere Tastenkürzel in den GNOME-Einstellungen
Folgt man Ockhams Rasiermesser (Prinzip der Parsimonie, Sparsamkeitsprinzip), ist die Lösung klar: Erstelle eine Textdatei mit den gewünschten Informationen und zeige diese auf Knopfdruck an. Zack, fertig:
Der Befehl dafür, in den GNOME-Tastatureinstellungen lautet:
gnome-text-editor ~/alias_and_shortcuts.txt
Damit wird der Standard-Texteditor von GNOME mit der angegebenen Datei geöffnet (Achtung: Pfad).
Wer es etwas nerdiger mag, kann Zenity verwenden, was mir besser gefällt:
Der Befehl dafür heisst:
zenity --text-info --title 'Aliase & Shortcuts' --width 400 --height 550 < ~/alias_and_shortcuts.txt
Das sieht zwar schöner aus, hat aber den Nachteil, dass es eine reine Anzeige ist, ohne Editiermöglichkeiten. Ausserdem müssen die Ausmasse (width, height) manuell an den Text angepasst werden.
Alles halber Kram
Der grosse Nachteil, der oben gezeigten Editor-Lösungen ist, dass sie nicht zwingend der Wahrheit entsprechen. Die Textdatei weiss nicht, welche Shortcuts und Aliase ihr tatsächlich eingestellt habt. Wie man die Aliase ausliest, habe ich oben bereits gezeigt. Bei der Aufbereitung für eine lesbare Anzeige, ergeben sich Probleme, weil z. B. die Zeile:
rec='arecord -vv --format=cd --file-type raw | lame -r - aufnahme.mp3'
... nicht das ist, was man wissen möchte. Sie sollte so aussehen:
Vom Mikrofon aufnehmen: rec
Aufgrund der fehlenden Informationen in der Ausgabe von alias, ist das unmöglich.
Doch wie sieht es bei den Tastaturkürzeln aus? Diese kann man mit diesem Shell-Skript ermitteln:
#!/usr/bin/env bash
schema="org.gnome.settings-daemon.plugins.media-keys"
list=$(gsettings get "$schema" custom-keybindings | tr -d "[]',")
for path in $list; do
fullpath="${schema}.custom-keybinding:${path}"
name=$(gsettings get "$fullpath" name)
command=$(gsettings get "$fullpath" command)
binding=$(gsettings get "$fullpath" binding)
echo "Name=$name, Binding=$binding"
done
Das Ergebnis sieht so aus:
Na ja, das geht so, ist aber noch weit entfernt von optimal. Der Nachteil ist, dass nur die 'custom-keybindings' ausgegeben werden. Das kann man erweitern, indem man andere Schemata einbezieht. Doch dazu habe ich jetzt keine Lust.
Fazit
Wer die Hilfe zur Hilfe anzeigen möchte, kann die Alias-Definitionen und die Tastenkürzel programmatisch auslesen und mit viel Gefrickel mittels eines Tastendrucks (z. B. SUPER+?) anzeigen lassen. Da diese Einstellungen nicht so häufig angepasst werden, empfehle ich die einfachere Methode. Falls euch das nützlich ist, könnt ihr die Aliase und Tastenkürzel einfach in eine Textdatei schreiben und diese auf Tastendruck anzeigen lassen.
Es grüsst euch, Wilhelm von Ockham
Titelbild: selbst
Quellen: in Text







Ockhams Klinge ist an sich ein erkenntnistheoretischer Ansatz, der bei der Theorienbildung über ein Phänomen zunächst die einfachsten Hypothesen (z.B. die mit den wenigsten Vorraussetzungen; einfachste Mechanismen die eine Erklärungsansatz bieten könnten; über was einfach ist, gibt es gelegentlich Streit) preferiert. Bei Keep It Simple Stupid (KISS) Prinzipien im Bereich Software sehe ich nicht den Zusammenhang, es fehlt die Menge Hypothesen zwischen denen man sich entscheiden soll.
Ich verwende Ockhams Prinzip gerne im Alltag. Die erste Wahl ist meistens die einfachste und beste Wahl.
Aber was ist die SUPER-Taste ...
Das ist die Windows-Taste (links unten auf der Tastatur). Die betriebssystemunabhängige Bezeichnung lautet SUPER-Taste.
Bei xfce4 funzt das so nicht! für Alle Shortcuts: xfconf-query --channel xfce4-keyboard-shortcuts --list --verbose oder erweitert für persönliche Shortcuts: xfconf-query --channel xfce4-keyboard-shortcuts --list --verbose | sort | grep "/commands/custom/"
MfG Hesti
Habe früher meine Alias mit einem ## in der Zeile darüber dokumentiert und daraus eine Doku generiert.
Spaßeshalber hier das Tastaturkürzel-Skript
shorts.shadaptiert für mein Linux Mint 22 MATE:Beispielausgabe:
Name='Dateiverwaltung', Binding='\e'
Name='Größe des aktiven Fensters anpassen und zentrieren', Binding='\F12'
Name='CopyQ anzeigen', Binding='\v'
Name='Ein Bildschirmfoto aufnehmen', Binding='\Print'
Name='Ein Bildschirmfoto eines Fensters aufnehmen', Binding='\Print'
Name='Ein Bildschirmfoto eines Bereichs aufnehmen', Binding='Print'
Die Beispielausgabe ist fehlerhaft.
Offenbar hat das Kommentarskript Probleme mit dem Escapen von "kleiner als" und "größer als". In der Vorschau habe ich escapen müssen, damit es korrekt dargestellt wird, aber hier ist es nun falsch.
Hier die korrekte Variante in meinem eigenen Blogbeitrag: Benutzerdefinierte Tastenkürzel unter Linux Mint 22 MATE ausgeben