使用命令行禁用所有 Unity 键盘快捷键

使用命令行禁用所有 Unity 键盘快捷键

我想知道如何通过终端禁用所有键盘快捷键。我知道您可以通过以下方式禁用它们:

系统设置>键盘>快捷键

但我想通过终端禁用它们。有人知道该怎么做吗?

答案1

我不知道你为什么要这样做,我应该警告你,恢复快捷键可能很复杂。如果这真的是你想要做的,下面的命令将禁用所有键盘快捷键。无论是通过 Unity 的 GUI 设置的快捷键,还是你可能使用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/':这只是添加了一个 TAB 字符 ( \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在键名中有一个额外的参数,我不知道如何处理这个参数。正如我所说,这不是一个好主意。

B. 禁用您设置的自定义快捷方式ccsm

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

这次,找回它们很容易。你只需要运行

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

答案2

我根据@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/

答案3

对于 Ubuntu 18.04 上的 gnome,我发现这个有效:

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

我不确定这是否是所有快捷键,但似乎占了大部分

相关内容