Ні, немає єдиного місця, де зберігаються всі ярлики. Програми можуть зберігати свої конфігурації де завгодно.
Це означає, що ви здебільшого дивитесь на два рівні: рівень програми (наприклад, 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