Wo speichert Ubuntu seine Tastaturkürzel-Konfiguration?

34

Gibt es in "Ubuntu" eine Stelle, an der eine vollständige Liste der Tasten / Kombinationen / Verknüpfungen gespeichert ist, an die welche gebunden sind?

Was sind die Tastatur- und Mauskürzel von Unity? Auflisten einiger "Unity" -Verknüpfungen zu Dash, Launcher usw. und Auflisten der verwendeten Compiz- Tastenkombinationen . zeigt einen Weg, um Compiz-Bindungen aufzulisten, aber ich suche mehr als das (nicht nur ein paar der nur auf Unity oder Compiz beschränkten Tastaturbindungen), obwohl es ein Anfang ist.

Gibt es eine globale Liste der verwendeten Tastenzuordnungen / Tastenkombinationen / Tastaturkürzel, die irgendwo in Ubuntu gespeichert sind, oder gibt es eine Möglichkeit, sie zu kompilieren und aufzulisten? Eine, die für Ubuntu und die darin laufenden Dinge gilt (Unity, Compiz, Verknüpfungen zu Programmen usw.).

Sicherlich muss Ubuntu dies irgendwo speichern, damit die auf der Tastatur gedrückte Tastenkombination darauf verweist, womit sie verbunden ist. Wenn es in Ubuntu keinen solchen Ort gibt, poste dies als Antwort, damit zukünftige Benutzer, die danach suchen, Bescheid wissen.

James
quelle
1
Ok, ich habe es umbenannt, um weniger Duplikat-y zu sein
Jorge Castro
Zwei Antworten haben bisher zwei widersprüchliche Abfolgen von Ereignissen ergeben. Lakritsbollar gab an, dass der Fenstermanager zuerst die Kontrolle erhält und diese dann an die Anwendungen weitergibt. Nfirvine gab an, dass Anwendungen zuerst die Kontrolle erlangen und sie dann an den Fenstermanager weitergeben. Welcher Weg ist es?
James
Einige weitere Verknüpfungen finden Sie unter detector-pro.com/2008/07/ubuntu-tweak-keyboard-shortcuts.html
James,

Antworten:

10

Ihr Fenstermanager erhält alle wichtigen Ereignisse vor den Anwendungen. Wenn er diese Ereignisse also nutzen möchte, werden sie von Ihren Anwendungen niemals empfangen. Wenn der Fenstermanager nicht auf die Schlüsselereignisse selbst reagieren möchte, leitet er sie an die Anwendung weiter.

Sie können dies auf folgende Weise selbst überprüfen:

  1. Starten Sie ein Terminal.
  2. Starten Sie xev | grep KeyPressdie X-Ereignisanzeige.
  3. Drücken Sie Alt, um anzuzeigen, xevdass das Tastenereignis im Terminalfenster angezeigt wird.
  4. Drücken Sie Ctrlerneut und beachten Sie, dass xevdas Ereignis eintrat. Beachten Sie, wie das Terminalfenster jetzt aussieht.
  5. Drücken Sie Left arrow, um zu einem anderen Arbeitsbereich zu wechseln. (Ich nehme an, Sie haben das als Tastenkürzel für den Fenstermanager.)
  6. Drücken Sie Right arrow, um zu Ihrer aktuellen Position zurückzukehren xev. Beachten Sie, dass Sie beim Wechseln des Arbeitsbereichs über die Pfeiltasten nach links und nach rechts keine Schlüsselereignisse erhalten haben - die Ausgabe ist dieselbe wie in Schritt 4.

Sie sehen also, dass der Fenstermanager in der Praxis alle wichtigen Ereignisse erhält und diese, wenn er sie nicht erfassen möchte, an die Anwendung weiterleitet. Die Anwendung kann dann dasselbe für ihre eigenen Widgets tun (z. B. wie Sie den Enterganzen Tag in Ihrem Webbrowser drücken können, aber nichts tun, bis Sie den Cursor in die Adressleiste oder in ein Feld setzen, in das Sie Text eingeben können). .

Es ist Aufgabe der Anwendung, eigene Verknüpfungen festzulegen, und die Anwendungen werden unabhängig voneinander konfiguriert.

Wenn ich mich richtig erinnere, können Sie in KDE 3.x die Standardverknüpfungen (z. B. Ctrl-szum Speichern) im KDE-Kontrollzentrum festlegen. Sie gelten für alle Anwendungen, die mit dem Qt-Toolkit geschrieben wurden, aber ich weiß nicht, ob dies noch möglich ist seit ihrem Wechsel zu KDE 4.

Lakritsbollar
quelle
Es ist keine 100% ige Antwort, aber es ist das Ende. Grundsätzlich gibt es keinen zentralen Ort, an dem Tastaturkürzel gespeichert sind. Der Fenstermanager ruft beim Drücken einer Taste zuerst einen Sprung ab und dann aktive Anwendungen. Auch der Fokus spielt eine Rolle.
James
20

Seit Ubuntu 17.10

Auf diesen Wegen :

dconf dump /org/gnome/desktop/wm/keybindings/
dconf dump /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/  # Custom

Sie können auch dconf-editor(GUI) oder gsettings(CLI) verwenden.

Seit Ubuntu 12.10-17.04

~/.config/dconf/user(im dconf-editor: org.gnome.settings-daemon.plugins.media-keys.custom-keybindings(benutzerdefinierte Verknüpfungen)

~/.config/compiz-1/compizconfig

Bis Ubuntu 12.04

Die Verknüpfungen sind je nach verwendetem Desktop unterschiedlich angeordnet (gnome / unity, kde, xfce, lxde usw.).

Für Gnome sind sie unter
~/.gconf/desktop/gnome/keybindings(benutzerdefinierte Verknüpfungen)

und unter
~/.gconf/apps/metacity.

desgua
quelle
11.10 verwendet weder GNOME noch Metacity.
Nfirvine
Der Pfad zu den Verknüpfungen funktioniert jedoch weiterhin so, wie ich ihn verwende.
Desgua
Bei der Installation von Ubuntu 11.10 auf einem MacBook Pro hatte der erste Speicherort nicht die Keybinding-Datei, aber der zweite Speicherort hatte diese:general/ global_keybindings/ window_keybindings/
Victor S
1
Der erste Ort ist für benutzerdefinierte Verknüpfungen.
Desgua
1
@ AnonymousPlatypus finden Sie hier für gsettingsAnweisungen
wjandrea
4

Nein, es gibt keinen einzigen Ort, an dem alle Verknüpfungen gespeichert sind. Anwendungen können ihre Konfigurationen beliebig speichern.

Das heißt, Sie suchen hauptsächlich nach zwei Ebenen: der Anwendungsebene (wie Strg-C zum Kopieren in Firefox) und der Fenstermanagerebene (wie Win + D zum Anzeigen des Desktops). Compiz verwendet gconf, um seine Konfiguration zu speichern .

Bei Anwendungen können Sie diese grob nach ihren Toolkits unterteilen. GTK-Apps verwenden nämlich auch gconf.

Sicherlich muss Ubuntu dies irgendwo speichern, damit die auf der Tastatur gedrückte Tastenkombination darauf verweist, womit sie verbunden ist.

Nicht ganz. Die fokussierte Anwendung erhält bei einem X-Tastaturereignis den ersten Kick. Wenn dies nicht der Fall ist, sprudelt sie in andere Anwendungen, nämlich den Fenstermanager. Sie können also ein Spiel haben, das Alt + F4 erfasst und das Fenster nicht schließt (verdammt, Jamestown!). Ich glaube, Sie denken, es geht zu einem zentralen Ereignis-Router, der dann mit einer Datenbank abgeglichen und an sein Ziel geleitet wird. Es ist eher so, als würde man eine Flasche mit einem Getränk herumreichen: Pass, nimm einen Schluck, wenn du willst, und pass den Rest, oder nimm das Ganze und sei gierig.

Die Linux / FOSS-Umgebung ist (wie Sie vielleicht bemerkt haben) ziemlich demokratisch, und alle Anwendungen dazu zu bringen, sich auf ein einziges zentrales Tastaturkonfigurations-Repository zu einigen, ist ein Kinderspiel. Zum einen haben Sie nicht verwaltete Anwendungen, die vor langer Zeit geschrieben wurden und nichts davon wissen.

Update: Laut den Xlib-Dokumenten zum Thema :

Beginnend mit dem Quellfenster durchsucht der X-Server die Fensterhierarchie, bis er das erste Fenster findet, das von einem Client als an diesen Ereignissen interessiert angegeben wurde. Wenn für eines der dazwischenliegenden Fenster die Option "Nicht weitergeben" festgelegt ist, um die Generierung des Ereignistyps zu verhindern, werden die Ereignisse dieser Typen unterdrückt.

Ebenfalls,

Um KeyPress-, KeyRelease-, ButtonPress- und ButtonRelease-Ereignisse zu empfangen, legen Sie die Bits KeyPressMask, KeyReleaseMask, ButtonPressMask und ButtonReleaseMask im Ereignismaskenattribut des Fensters fest.

Und Sie können ein Attribut zu deaktivieren Ausbreitung gesetzt .

Das Problem ist, dass Sie X nicht mitteilen, auf welche Schlüssel Sie achten sollen, sodass Sie niemals a priori angeben können, auf welche Schlüssel die Anwendung wartet (geschweige denn, was sie tun) oder ob sie tatsächlich beabsichtigen, sie zu verbreiten darauf hören. Daher ist eine zentrale Registrierung auf X-Ebene nicht möglich, sodass Sie sie auf Toolkit-Ebene ausführen müssen, was praktisch unmöglich ist. : D

Nfirvin
quelle
Ich bin fast zu dem gleichen Schluss gekommen, dass der Fokus bestimmt, was mit Eingaben umgeht. Dies kann beobachtet werden, indem ein Browserfenster und dann ein Terminalfenster geöffnet werden, das nun zum aktiven Fenster wird. Wenn Sie die Maus über das Browserfenster halten, können Sie mit dem Mausrad durch das Browserfenster scrollen, obwohl das Terminalfenster das aktive Fenster ist.
James
Ich hatte mir eine einfache Antwort auf meine Frage gewünscht oder zumindest eine einfache Möglichkeit, die Verknüpfungen zu kompilieren und aufzulisten, aber es scheint nicht möglich zu sein, wenn man bedenkt, wie Tastendrücke irgendwann dahin gelangen, wo sie definiert sind. Die Tastaturkürzel / Tastenkürzel scheinen überall verteilt zu sein, und ihre Verwendung hängt in der Regel davon ab, was aktiv ist und wo sich der aktuelle Fokus befindet.
James
1
Ich bin jedoch nicht mit Ihnen in der Anwendung, die das Schlüsselereignis vor dem Fenstermanager abruft. Ich denke der Windowmanager hat erst Crack auf dem Event und dann aktive Anwendungen.
James
1

Anwendungen speichern ihre Verknüpfungen unabhängig voneinander, sodass es keinen zentralen Ort gibt, an dem sie gespeichert werden.

Ich verstehe nicht den gesamten Prozess der Interaktion Tastatur - Betriebssystem - Kernel - X11 - Fenstermanager - Desktop-Umgebung - Anwendungen, aber wenn ein bestimmtes Fenster wie Gedit den Tastaturfokus hat, kann es damit umgehen die Eingabe für sich allein, und das tut es auch.

Benutzer unbekannt
quelle
-1

In 11.10 erhalten Sie unter Systemkonfiguration -> Tastatur -> Verknüpfungen eine ziemlich große Liste. Ist es das wonach du suchst?

Cmorales
quelle
Er sucht nach der Datei, die alle Verknüpfungen enthält, nicht nur eine Liste.
Mark O'Sullivan