Отключите все сочетания клавиш Unity с помощью командной строки

8

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

настройки системы> клавиатура> ярлыки

но я хочу отключить их через терминал. кто-нибудь знает, как это можно сделать?

user278551
источник
О каких сочетаниях клавиш ты говоришь? Есть очень много разных наборов. У вас есть некоторые, которые работают в командной строке, некоторые, которые активируют GUI и т. Д. Они полностью разделены.
Тердон
Если вы идете в настройки системы> клавиатура> сочетания клавиш, в Ubuntu есть все сочетания клавиш, и я хочу отключить все из них.
user278551
Итак, вы имеете в виду только ярлыки GUI. Я предполагаю, что вы используете Ubuntu по умолчанию, поэтому ваша рабочая среда Unity. Это верно?
Тердон
Да, это правильно.
user278551

Ответы:

11

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

A. Отключить ключевые соединения Unity

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

    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
    

    Это создаст файл с именем old_settingsв следующем формате:

    schema key <TAB> value
    

    Например:

    org.gnome.desktop.wm.keybindings unmaximize <TAB> ['<Control><Super>Down']
    
  2. Теперь отключите ярлыки

    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
    

    объяснение

    • gsettings list-recursively org.gnome.desktop.wm.keybindings : здесь перечислены все сочетания клавиш и их текущие значения
    • perl -pe 's/(.*)\s*(\[.*?\])\s*$/$1\t$2\n/': это просто добавляет символ табуляции ( \t), отделяющий значение от ключа. Этот шаг необходим, чтобы можно было правильно прочитать их в следующем.
    • while IFS=$'\t' read -r key val: пройти каждую строку и прочитать ключ в $kи его значение в $val. $IFS=$'\t'означает разделение на вкладки, чтобы ключ и значение были прочитаны правильно.
    • gsettings set $key [''] : это фактически устанавливает значение пустым, эффективно отключая ваши ярлыки.

    Обратите внимание, что вам может потребоваться выйти из системы и войти снова, чтобы это вступило в силу.

  3. Получить (некоторые из) ваши ярлыки обратно

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

    ВНИМАНИЕ : Это, вероятно, не будет работать для всех настроек, так как некоторые из них имеют дополнительный параметр @asв имени ключа, и я не знаю, как с этим справиться. Как я уже сказал, это не очень хорошая идея.

Б. Отключите ваши собственные ярлыки, установленные в ccsm

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

На этот раз вернуть их легко. Все, что вам нужно сделать, это бежать

gsettings set org.gnome.settings-daemon.plugins.media-keys active true
terdon
источник
Спасибо, отличная работа, я думаю, все еще не хватает ярлыков Compiz?
user.dz
@Sneetsher part B. должен иметь дело с пользовательскими ярлыками compiz. Не уверен насчет стандартных. Дай мне проверить.
Тердон
Добавлен сценарий, чтобы сделать его немного более удобным для выполнения вышеописанного: github.com/fatso83/dotfiles/blob/master/utils/scripts/…
oligofren
Что касается «Я понятия не имею, почему вы хотели бы сделать это», сценарий использования для всех в моей команде разработчиков состоит в том, что сочетания клавиш по умолчанию перекрываются с известными привязками клавиш в популярных программах. В нашем случае большинство сочетаний клавиш IntelliJ не работали, и нам всем на самом деле просто нужно несколько сочетаний клавиш Gnome (например, Alt-Tab и изменение размера окна).
oligofren
@oligofren конечно, но зачем вам тогда отключать все ярлыки из терминала? Вот что я нашел странным. Но все равно каждому свое :)
тердон
3

Я основывался на ответе @ terdon и создал сценарий, чтобы сделать то же самое , но сделал это несколько более удобным для пользователя способом.

Вы можете использовать это так:

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

Поскольку мне нравится использовать стандартные сочетания клавиш Alt-F4 и Alt-Tab (и их обратное использование shift), это удалит все сочетания клавиш, кроме этих.

У этого также есть хорошее меню помощи:

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"    

Чтобы использовать его на своей машине

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
источник
0

Для gnome в Ubuntu 18.04 я обнаружил, что это работает:

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 ''

Я не уверен, что это все сочетания клавиш, но, похоже, основная их часть

theicfire
источник