Onde o Ubuntu armazena sua configuração de atalho de teclado?

34

Existe um lugar no "Ubuntu" que armazena uma lista completa de quais teclas / combinações / atalhos estão vinculados a quê?

Quais são os atalhos de teclado e mouse do Unity? listar alguns atalhos do "Unity" para o Dash, Launcher, etc. e Como listar as combinações de teclas do Compiz em uso? mostra uma maneira de listar ligações de compiz, mas estou procurando mais do que isso (não apenas algumas das combinações de teclas limitadas apenas ao Unity ou Compiz), embora seja um começo.

Existe uma lista global de atalhos de teclado / combinações de teclas / atalhos de teclado em uso, armazenados em algum lugar do Ubuntu ou existe uma maneira de compilá-los e listá-los? Um que se aplica ao Ubuntu e as coisas em execução (Unity, Compiz, Atalhos para Programas, etc.).

Certamente, o Ubuntu deve armazenar isso em algum lugar para que a combinação de teclas pressionada no teclado seja direcionada para o que está conectado? Se não houver esse lugar no Ubuntu, publique como resposta, para que os usuários futuros, essa pesquisa, saibam.

James
fonte
1
Ok eu renomeado-lo a ser menos duplicado-y
Jorge Castro
Até agora, duas respostas trouxeram duas seqüências conflitantes de eventos. Lakritsbollar afirmou que o gerenciador de janelas obtém o controle primeiro e depois o transmite para os aplicativos; Qual é o caminho?
James
Mais alguns atalhos podem ser encontrados em detector-pro.com/2008/07/ubuntu-tweak-keyboard-shortcuts.html
James

Respostas:

10

Seu gerenciador de janelas obtém todos os principais eventos antes dos aplicativos, por isso, se quiser consumi-los, o faz e seus aplicativos nunca os receberão. Se o gerenciador de janelas não quiser reagir aos eventos principais, ele os passará para o aplicativo.

Você pode verificar isso sozinho da seguinte maneira:

  1. Inicie um terminal.
  2. Iniciar xev | grep KeyPress, o visualizador de eventos X.
  3. Pressione Alt, observe que xevmostra que o evento principal foi encontrado na janela do terminal.
  4. Pressione Ctrl, observe novamente que xevrecebi o evento. Tome nota da aparência da janela do terminal agora.
  5. Pressione Left arrowpara ir para outro espaço de trabalho. (Suponho que você tenha isso como uma tecla de atalho do gerenciador de janelas.)
  6. Pressione Right arrowpara voltar para onde você está executando xev. Observe que ele nunca recebeu nenhum evento-chave para você alternar áreas de trabalho por meio das teclas de seta esquerda e direita - a saída é a mesma da Etapa 4.

Assim, você vê que o gerenciador de janelas na prática obtém todos os eventos principais e, se não deseja capturá-los, passa-os para o aplicativo. O aplicativo então faz o mesmo com seus próprios widgets (como você pode pressionar o Enterdia todo no navegador da Web, mas não fará nada até colocar o cursor na barra de endereços ou em algum campo em que é possível inserir texto) .

Cabe ao aplicativo definir seus próprios atalhos, e os aplicativos são configurados independentemente um do outro.

No KDE 3.x, se bem me lembro, você pode definir os atalhos padrão (por exemplo, Ctrl-spara salvar) no KDE Control Center e isso se aplicaria a todos os aplicativos escritos com o kit de ferramentas Qt, mas não sei se isso ainda é possível desde a mudança para o KDE 4.

Lakritsbollar
fonte
Não é uma resposta 100%, mas é o fim. Basicamente, não existe um local central onde as ligações / atalhos do teclado são armazenados. O gerenciador de janelas obtém o primeiro acesso com as teclas pressionadas e depois os aplicativos ativos. O foco também desempenha um papel.
James
20

Desde o Ubuntu 17.10

Nestes caminhos :

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

Você também pode usar dconf-editor(GUI) ou gsettings(CLI).

Desde o Ubuntu 12.10-17.04

~/.config/dconf/user(no dconf-editor: org.gnome.settings-daemon.plugins.media-keys.custom-keybindings(atalhos personalizados)

~/.config/compiz-1/compizconfig

Até o Ubuntu 12.04

Os atalhos são colocados de maneira diferente, dependendo da área de trabalho que você estiver usando (gnome / unity, kde, xfce, lxde, etc).

Para o gnome, eles estão em
~/.gconf/desktop/gnome/keybindings(atalhos personalizados)

e abaixo
~/.gconf/apps/metacity.

desgua
fonte
11.10 não usa GNOME ou Metacity.
Nflvine
Mas o caminho para os atalhos ainda funciona como eu o uso.
Des
Ao olhar comeu ubuntu muito fresco 11.10 instalar em um MacBook Pro, o primeiro local não tem o arquivo de atalho de teclado, mas o segundo local tinha essa:general/ global_keybindings/ window_keybindings/
Victor S
1
O primeiro local é para atalhos personalizados.
Des
1
@AnonymousPlatypus veja aqui para gsettingsinstruções
wjandrea 4/16
4

Não, não há um único local onde todos os atalhos são armazenados. Os aplicativos podem optar por armazenar suas configurações onde quiserem.

Dito isto, você está olhando principalmente para dois níveis: o nível do aplicativo (como Ctrl-C para copiar no Firefox) e o nível do gerenciador de janelas (como o Win + D para mostrar a área de trabalho). O Compiz usa o gconf para armazenar sua configuração .

Para aplicativos, você pode dividi-los aproximadamente pelos kits de ferramentas. Ou seja, os aplicativos GTK também usam o gconf.

Certamente, o Ubuntu deve armazenar isso em algum lugar para que a combinação de teclas pressionada no teclado seja direcionada para o que está conectado?

Nem tanto. O aplicativo focado recebe o primeiro chute em um evento do teclado X, mas, se não o fizer, será exibido para outros aplicativos, como o gerenciador de janelas. Assim, você pode ter um jogo que captura Alt + F4 e não fecha a janela (maldito seja, Jamestown!). Eu acho que você está pensando que ele vai para algum roteador central de eventos, depois é compatível com algum banco de dados e roteado para o seu destino. É mais como passar uma garrafa de bebida: passe, dê um gole se quiser e passe o resto, ou pegue a coisa toda e seja ganancioso.

O ambiente Linux / FOSS (você deve ter notado) é bastante democrático, e fazer com que todos os aplicativos concordem em um único repositório de configuração de teclado central é uma tarefa fácil. Por um lado, você tem aplicativos não mantidos que foram escritos há muito tempo e que não sabiam disso.

Atualização: de acordo com os documentos Xlib sobre o assunto :

Começando com a janela de origem, o servidor X pesquisa a hierarquia da janela até localizar a primeira janela especificada por um cliente como interessada nesses eventos. Se uma das janelas intermediárias tiver sua máscara de não propagação definida para proibir a geração do tipo de evento, os eventos desses tipos serão suprimidos.

Além disso,

Para receber os eventos KeyPress, KeyRelease, ButtonPress e ButtonRelease, defina os bits KeyPressMask, KeyReleaseMask, ButtonPressMask e ButtonReleaseMask no atributo de máscara de evento da janela.

E você pode definir um atributo para desativar a propagação .

O problema é que você não diz ao X quais chaves devem ser ouvidas; portanto, nunca é possível dizer a priori quais chaves o aplicativo escuta (muito menos o que eles fazem) ou realmente se eles pretendem propagá-lo se, de fato, ouvindo. Portanto, um registro central é impossível no nível X, portanto, você deve fazer isso no nível do kit de ferramentas, o que é praticamente impossível. : D

nfirvine
fonte
Cheguei à mesma conclusão, que o foco determina o que lida com a entrada. Isso pode ser observado abrindo uma janela do navegador e, em seguida, abrindo uma janela do terminal que agora se torna a janela ativa. Se você segurar o mouse sobre a janela do navegador, use a roda de rolagem que rolará a janela do navegador, mesmo que a janela Terminal seja a janela ativa.
James
Eu esperava uma resposta fácil para minha pergunta, ou pelo menos uma maneira fácil de compilar e listar os atalhos, mas não parece possível, dada a maneira como as teclas pressionadas chegam ao local onde estão definidas. Os atalhos de teclado / atalhos de teclado parecem estar espalhados por toda parte e seu uso tende a depender do que está ativo e do foco atual.
James
1
No entanto, não estou com você no aplicativo, recebendo o evento principal antes do gerenciador de janelas. Eu acho que o Gerenciador de Janelas tem primeiro crack no evento e aplicativos ativos.
James
1

Os aplicativos armazenam seus atalhos de forma independente, para que não haja um local central, onde eles são armazenados.

Eu não entendo todo o processo de interação do teclado - SO - kernel - X11 - Gerenciador de janelas - Ambiente de trabalho - Aplicativos, mas se uma determinada janela, como o Gedit, tiver o foco do teclado, ele poderá lidar com a entrada por conta própria, e faz isso.

Usuário desconhecido
fonte
-1

Na versão 11.10, em Configuração do sistema -> Teclado -> Atalhos, você obtém uma lista bastante grande deles. É isso que você está procurando?

Cmorales
fonte
Ele está procurando o arquivo que contém todos os atalhos, não apenas uma lista deles.
Mark O'Sullivan