Desative todos os atalhos de teclado do Unity usando a linha de comando

8

Gostaria de saber como posso desativar TODOS os atalhos de teclado através do terminal. Eu sei que você pode desativá-los acessando:

configurações do sistema> teclado> atalhos

mas eu quero desativá-los via terminal. alguém sabe como isso pode ser feito?

user278551
fonte
Sobre quais atalhos de teclado você está falando? Existem muitos conjuntos diferentes. Você tem alguns que funcionam na linha de comando, outros que ativam coisas da GUI, etc. Eles são completamente separados.
terdon
Se você for para as configurações do sistema> teclado> atalhos, existem todos os atalhos no ubuntu e eu quero desativar todos eles.
User278551
OK, então você quer dizer apenas os atalhos da GUI. Suponho que você esteja usando o Ubuntu padrão para que seu ambiente de área de trabalho seja o Unity. Isso está correto?
terdon
sim, está correto.
User278551

Respostas:

11

Não sei por que você gostaria de fazer isso e devo adverti-lo de que pode ser complicado recuperar os atalhos. Se é realmente isso que você deseja fazer, os comandos abaixo desabilitarão todos os atalhos do teclado. Os configurados através da GUI do Unity e qualquer um que você possa ter configurado usandoccsm

A. Desative as teclas do Unity

  1. Primeiro faça um backup das ligações atuais para poder reativá-las mais tarde

    gsettings list-recursively org.gnome.desktop.wm.keybindings | 
       perl -pe 's/(.*)\s*(\[.*?\])\s*$/$1\t$2\n/' | 
        while IFS=$'\t' read -r key val; do echo -e "$key\t$val"; done > old_settings
    

    Isso criará um arquivo chamado old_settingsno seguinte formato:

    schema key <TAB> value
    

    Por exemplo:

    org.gnome.desktop.wm.keybindings unmaximize <TAB> ['<Control><Super>Down']
    
  2. Agora desative os atalhos

    gsettings list-recursively org.gnome.desktop.wm.keybindings | 
        perl -pe 's/(.*)\s*(\[.*?\])\s*$/$1\t$2\n/' | 
            while IFS=$'\t' read -r key val; do gsettings set $key ['']; done
    

    Explicação

    • gsettings list-recursively org.gnome.desktop.wm.keybindings : lista todas as combinações de teclas e seus valores atuais
    • perl -pe 's/(.*)\s*(\[.*?\])\s*$/$1\t$2\n/': isso simplesmente adiciona um caractere TAB ( \t) que separa o valor da chave. Esta etapa é necessária para poder lê-los corretamente na próxima.
    • while IFS=$'\t' read -r key val: percorra cada linha e leia a chave $ke seu valor $val. $IFS=$'\t'significa dividir as guias para que a chave e o valor sejam lidos corretamente.
    • gsettings set $key [''] : na verdade, define o valor para em branco, desativando efetivamente seus atalhos.

    Observe que você pode precisar sair e fazer login novamente para que isso entre em vigor.

  3. Recupere (alguns dos) seus atalhos

    while IFS=$'\t' read -r key val; do 
        gsettings set "$key" "$val"
    done < old_settings 
    

    AVISO : Isso provavelmente não funcionará para todas as configurações, pois algumas delas parecem ter um parâmetro extra @asno nome da chave e não sei como lidar com essa. Como eu disse, isso não é uma idéia muito boa.

B. Desative seus atalhos personalizados definidos em ccsm

gsettings set org.gnome.settings-daemon.plugins.media-keys active false

Desta vez, é fácil recuperá-los. Tudo o que você precisa fazer é executar

gsettings set org.gnome.settings-daemon.plugins.media-keys active true
Terdon
fonte
Obrigado, ótimo trabalho, acho que ainda falta os atalhos do Compiz?
User.dz
@Sneetsher parte B. deve lidar com os atalhos de compiz definido pelo usuário. Não tenho certeza sobre os padrões. Deixe-me ver.
terdon
Adicionado um script para ser um pouco mais de um front-end utilizável para fazer o acima: github.com/fatso83/dotfiles/blob/master/utils/scripts/...
oligofren
Com relação ao "não tenho idéia do por que você gostaria de fazer isso", o caso de uso para todos da minha equipe de desenvolvimento é que os atalhos padrão se sobrepõem às ligações de teclas conhecidas nos programas populares. No nosso caso, a maioria dos atalhos do IntelliJ não funcionou, e todos nós realmente precisamos apenas de alguns atalhos do Gnome (como Alt-Tab e redimensionamento de janelas).
oligofren
@oligofren claro, mas por que você precisaria desativar todos os atalhos do terminal? Foi o que achei estranho. Mas de qualquer maneira, cada um na sua :)
terdon
3

Desenvolvi a resposta de @ terdon e criei um script para fazer o mesmo , mas o faz de uma maneira um pouco mais amigável.

Você poderia usá-lo assim:

gnome-key-bindings --unset-all --except 'close|switch-applications'

Como eu gosto de usar as combinações de teclas padrão Alt-F4 e Alt-Tab (e o inverso usando shift), isso removeria todas as combinações de teclas, exceto essas.

Ele também possui um bom menu de ajuda:

List/disable/enable/set gnome-key-bindings

gnome-key-bindings [-h | option] [value]

Options
   --list              Lists all the current keybindings
   --set=key           Set a specific keybinding
   --unset=key         Unsets a specific keybinding
   --unset-all         Unsets all keybindings
   --except=REGEX      Filter out keys matching REGEX from being unset
   --print-default     Prints the default shortcuts per Ubuntu 18.04

Examples:

     Clearing all keys except a few:
       gnome-key-bindings --unset-all --except "close|switch-applications|switch-input-source|show-desktop"

     Setting a shortcut
       gnome-key-bindings --set=maximize "<Super>Up"    

Para usá-lo em sua própria máquina

curl -s https://raw.githubusercontent.com/fatso83/dotfiles/master/utils/scripts/gnome-key-bindings -o gnome-key-bindings
curl -s https://raw.githubusercontent.com/fatso83/dotfiles/master/utils/scripts/easyoptions.sh -o easyoptions.sh
curl -s https://raw.githubusercontent.com/fatso83/dotfiles/master/utils/scripts/easyoptions.rb -o easyoptions.rb
chmod +x ./gnome-key-bindings
sudo mv ./gnome-key-bindings easyoptions.* /usr/local/bin/
oligofren
fonte
0

Para o gnome no Ubuntu 18.04, achei que funcionava:

gsettings list-keys org.gnome.shell.keybindings | xargs -I@ gsettings set org.gnome.shell.keybindings @ ['']
gsettings list-keys org.gnome.mutter.keybindings | xargs -I@ gsettings set org.gnome.mutter.keybindings @ ['']
gsettings list-keys org.gnome.settings-daemon.plugins.media-keys | xargs -I@ gsettings set org.gnome.settings-daemon.plugins.media-keys @ ['']
gsettings set org.gnome.mutter overlay-key ''

Não tenho certeza se são todas as teclas de atalho, mas parece ser a maior parte delas

theicfire
fonte