Non, il n'y a pas un endroit unique où tous les raccourcis sont stockés. Les applications peuvent choisir d'enregister leurs configurations où elles le souhaitent.
Cela dit, vous regardez principalement deux niveaux : le niveau de l'application (comme Ctrl-C pour copier dans Firefox) et le niveau du gestionnaire de fenêtres (comme Win+D pour afficher le bureau). Compiz utilise gconf pour stocker sa configuration.
Pour les applications, vous pouvez approximativement les diviser selon leurs outils. Notamment, les applications GTK utilisent également gconf.
Certainement, Ubuntu doit stocker cela quelque part pour que la combinaison de touches pressée sur le clavier soit dirigée vers ce à quoi elle est connectée?
Pas tout à fait. L'application en cours reçoit en premier un événement clavier X, mais si ce n'est pas le cas, il remonte à d'autres applications, notamment le gestionnaire de fenêtres. Ainsi, vous pouvez avoir un jeu qui capture Alt+F4 et ne ferme pas la fenêtre (maudit soit Jamestown !). Je pense que vous pensez que cela passe par un routeur d'événements central, puis est assorti à une base de données et dirigé vers sa destination. C'est plus comme passer une bouteille de boisson autour : passer, prendre une gorgée si vous le souhaitez et passer le reste, ou prendre tout et être avide.
L'environnement Linux/FOSS (vous l'avez peut-être remarqué) est assez démocratique, et obtenir toutes les applications à accepter un référentiel de configuration clavier central unique est une tâche futile. Pour une chose, vous avez des applications non maintenues qui ont été écrites il y a longtemps et qui ne le saurait même pas.
Mise à jour : Selon la documentation Xlib sur le sujet :
En commençant par la fenêtre source, le serveur X recherche dans la hiérarchie des fenêtres jusqu'à ce qu'il localise la première fenêtre spécifiée par un client comme ayant un intérêt pour ces événements. Si l'une des fenêtres intermédiaires a son mask "ne pas propager" défini pour interdire la génération du type d'événement, les événements de ces types seront supprimés.
Aussi,
Pour recevoir les événements KeyPress, KeyRelease, ButtonPress et ButtonRelease, définissez les bits KeyPressMask, KeyReleaseMask, ButtonPressMask et ButtonReleaseMask dans l'attribut de masque d'événement de la fenêtre.
Et vous pouvez définir un attribut pour désactiver la propagation.
Le problème, c'est que vous ne dites pas à X quels touches écouter, vous ne pouvez donc jamais dire a priori quelles touches l'application écoute (sans parler de ce qu'elles font) ou vraiment si elles ont l'intention de le propager s'ils écoutent effectivement. Ainsi, un registre central est impossible au niveau X, vous devriez donc le faire au niveau toolkit, ce qui est simplement pratiquement impossible. :D