Где в Ubuntu хранятся настройки сочетаний клавиш?

34

Есть ли место в «Ubuntu», где хранится полный список того, какие клавиши / комбинации / сочетания клавиш связаны с чем?

Что такое сочетания клавиш и мыши в Unity? перечислить некоторые ярлыки «Unity» для Dash, Launcher и т. д. и Как перечислить используемые сочетания клавиш Compiz? показывает способ перечисления привязок compiz, но я ищу больше (не только несколько сочетаний клавиш, ограниченных только Unity или Compiz), хотя это только начало.

Существует ли глобальный список используемых сочетаний клавиш / сочетаний клавиш / сочетаний клавиш, который хранится где-то в Ubuntu, или есть способ скомпилировать и перечислить их? Тот, который применяется к Ubuntu и работающим в нем (Unity, Compiz, ярлыки для программ и т. Д.).

Конечно, Ubuntu должен хранить это где-нибудь, чтобы комбинация клавиш, нажимаемая на клавиатуре, была направлена ​​на то, с чем она связана? Если в Ubuntu такого места нет, то опубликуйте это как ответ, чтобы будущие пользователи, которые будут искать, будут знать.

Джеймс
источник
1
Хорошо, я переименовал это, чтобы быть менее дублирующим y
Хорхе Кастро
Два ответа до сих пор подняли две противоречивые последовательности событий. Лакритсболлар заявил, что оконный менеджер сначала получает управление, а затем передает его приложениям, а заявленные nfirvine приложения сначала проверяют его, а затем передают его оконному менеджеру. Какой это путь?
Джеймс
Еще несколько ярлыков можно найти по адресу dete-pro.com/2008/07/ubuntu-tweak-keyboard-shortcuts.html
Джеймс

Ответы:

10

Ваш оконный менеджер получает любые ключевые события раньше, чем приложения, поэтому, если он хочет использовать эти события, он делает это, и ваши приложения никогда не получат их. Если оконный менеджер не хочет реагировать на ключевые события сам, он передает их приложению.

Вы можете проверить это самостоятельно следующим образом:

  1. Запустите терминал.
  2. Пуск xev | grep KeyPress, просмотрщик событий X
  3. Нажмите Alt, обратите внимание, xevчто это показывает, что он получил ключевое событие в своем терминальном окне.
  4. Нажмите Ctrl, еще раз отметьте, что xevполучили событие. Обратите внимание на то, как выглядит окно терминала прямо сейчас.
  5. Нажмите, Left arrowчтобы перейти в другое рабочее пространство. (Я предполагаю, что у вас есть это в качестве сочетания клавиш менеджера окон.)
  6. Нажмите, Right arrowчтобы вернуться туда, куда вы бежите xev. Обратите внимание, что он никогда не получал никаких событий клавиш для переключения рабочих пространств с помощью клавиш со стрелками влево и вправо - вывод такой же, как и в шаге 4.

Итак, вы видите, что оконный менеджер на практике получает все ключевые события и, если он не хочет их захватывать, передает их приложению. Затем приложение выполняет то же самое для своих собственных виджетов (например, как вы можете нажимать Enterвесь день в своем веб-браузере, но ничего не будет делать, пока вы не установите курсор в адресную строку или в какое-либо поле, где вы можете ввести текст) ,

Приложение самостоятельно устанавливает ярлыки, а приложения настраиваются независимо друг от друга.

В KDE 3.x, если я правильно помню, вы можете установить ярлыки по умолчанию (например, Ctrl-sдля сохранения) в Центре управления KDE, и это будет применяться ко всем приложениям, написанным с помощью инструментария Qt, но я не знаю, возможно ли это по-прежнему после их перехода на KDE 4.

Lakritsbollar
источник
Это не 100% ответ, но это конец. По сути, нет центрального места, где хранятся привязки / сочетания клавиш. Оконный менеджер сначала ломает нажатие клавиш, а затем активные приложения. Фокус также играет роль.
Джеймс
20

Начиная с Ubuntu 17.10

По этим путям :

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

Вы также можете использовать dconf-editor(GUI) или gsettings(CLI).

Начиная с Ubuntu 12.10-17.04

~/.config/dconf/user(в dconf-editor: org.gnome.settings-daemon.plugins.media-keys.custom-keybindings(пользовательские ярлыки)

~/.config/compiz-1/compizconfig

До Ubuntu 12.04

Ярлыки размещаются по-разному в зависимости от используемого рабочего стола ведьмы (gnome / unity, kde, xfce, lxde и т. Д.).

Для гнома они под
~/.gconf/desktop/gnome/keybindings(пользовательские ярлыки)

и под
~/.gconf/apps/metacity.

desgua
источник
11.10 не использует GNOME или Metacity.
nfirvine
Но путь к ярлыкам по-прежнему работает, как я его использую.
Desgua
При просмотре довольно свежей установки Ubuntu 11.10 на MacBook Pro, в первом месте не было файла привязки клавиш, но во втором месте было следующее:general/ global_keybindings/ window_keybindings/
Victor S
1
Первое место для пользовательских ярлыков.
Desgua
1
@AnonymousPlatypus смотрите здесь для gsettingsинструкций
wjandrea
4

Нет, нет единого места, где хранятся все ярлыки. Приложения могут хранить свои конфигурации там, где они захотят.

Тем не менее, вы в основном смотрите на два уровня: уровень приложения (например, Ctrl-C для копирования в Firefox) и уровень оконного менеджера (например, Win + D для отображения рабочего стола). Compiz использует gconf для хранения своей конфигурации .

Для приложений вы можете грубо разделить их по наборам инструментов. А именно, приложения GTK также используют gconf.

Конечно, Ubuntu должен хранить это где-нибудь, чтобы комбинация клавиш, нажимаемая на клавиатуре, была направлена ​​на то, с чем она связана?

Не совсем. Сосредоточенное приложение получает первый удар по событию клавиатуры X, но если этого не происходит, оно всплывает перед другими приложениями, а именно оконным менеджером. Таким образом, вы можете иметь игру, которая захватывает Alt + F4 и не закрывает окно (черт побери, Джеймстаун!). Я думаю, вы думаете, что он идет к какому-то центральному маршрутизатору событий, затем сопоставляется с некоторой базой данных и направляется к месту назначения. Это больше похоже на раздачу бутылки с напитком: проходи мимо, сделай глоток, если хочешь и передай остальное, или возьми все это и будь жадным

Среда Linux / FOSS (вы, возможно, заметили) довольно демократична, и заставить все приложения согласовать единый репозиторий конфигурации центральной клавиатуры - глупое дело. Во-первых, у вас есть неподдерживаемые приложения, которые были написаны очень давно, и вы об этом не знали бы.

Обновление: Согласно документации Xlib на эту тему :

Начиная с исходного окна, X-сервер просматривает иерархию окон, пока не найдет первое окно, указанное клиентом как имеющее интерес к этим событиям. Если в одном из промежуточных окон установлена ​​маска «не распространять», запрещающая генерацию типа события, события этих типов будут подавлены.

Также,

Чтобы получать события KeyPress, KeyRelease, ButtonPress и ButtonRelease, установите биты KeyPressMask, KeyReleaseMask, ButtonPressMask и ButtonReleaseMask в атрибуте маски события окна.

И вы можете установить атрибут, чтобы отключить распространение .

Проблема в том, что вы не указываете X, какие ключи прослушивать, поэтому вы никогда не можете априори сказать, какие ключи прослушивает приложение (не говоря уже о том, что они делают) или действительно ли они намереваются распространять его, если они на самом деле слушаю это. Таким образом, центральный реестр невозможен на уровне X, поэтому вам придется делать это на уровне инструментария, что просто практически невозможно. : D

nfirvine
источник
Я пришел к такому же выводу, что фокус определяет то, что обрабатывает ввод. Это можно наблюдать, открыв окно браузера, затем открыв окно терминала, которое теперь становится активным окном. Если вы удерживаете мышь над окном браузера, то с помощью колеса прокрутки он прокручивает окно браузера, даже если окно терминала является активным окном.
Джеймс
Я надеялся на легкий ответ на мой вопрос или, по крайней мере, на простой способ скомпилировать и перечислить ярлыки, но это не представляется возможным, учитывая то, как в конечном итоге нажатия клавиш достигают того, где они определены. Сочетания клавиш / сочетания клавиш, кажется, распределены повсюду, и их использование имеет тенденцию зависеть от того, что активно и где в данный момент находится фокус.
Джеймс
1
Тем не менее, я не с вами в приложении, которое получает ключевое событие перед менеджером окон. Я думаю, что оконный менеджер сначала взломал событие, а затем активные приложения.
Джеймс
1

Приложения хранят свои ярлыки независимо, поэтому нет центрального места, где они хранятся.

Я не понимаю весь процесс взаимодействия клавиатуры - ОС - ядро ​​- X11 - Менеджер окон - Среда рабочего стола - Приложения, но если какое-то окно, например Gedit, имеет фокус клавиатуры, оно может обрабатывать вход сам по себе, и это так.

неизвестный пользователь
источник
-1

В 11.10 в разделе «Конфигурация системы -> Клавиатура -> Ярлыки» вы получите довольно большой список из них. Это то, что вы ищете?

Cmorales
источник
Он ищет файл, который содержит все ярлыки, а не только их список.
Марк О'Салливан