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

use*_*551 8 command-line shortcut-keys

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

系统设置>键盘>快捷方式

但我想通过终端禁用它们。有谁知道如何做到这一点?

ter*_*don 11

我不知道您为什么要这样做,我应该警告您,恢复快捷方式可能很复杂。如果这确实是您想要做的,下面的命令将禁用所有键盘快捷键。通过 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
    
    Run Code Online (Sandbox Code Playgroud)

    这将创建一个old_settings格式如下的文件:

    schema key <TAB> value
    
    Run Code Online (Sandbox Code Playgroud)

    例如:

    org.gnome.desktop.wm.keybindings unmaximize <TAB> ['<Control><Super>Down']
    
    Run Code Online (Sandbox Code Playgroud)
  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
    
    Run Code Online (Sandbox Code Playgroud)

    解释

    • 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 
    
    Run Code Online (Sandbox Code Playgroud)

    警告:这可能不适用于所有设置,因为其中一些设置似乎@as在键名中有一个额外的参数,我不知道如何处理该参数。正如我所说,这都不是一个好主意。

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

gsettings set org.gnome.settings-daemon.plugins.media-keys active false
Run Code Online (Sandbox Code Playgroud)

这一次,让他们回来很容易。您需要做的就是运行

gsettings set org.gnome.settings-daemon.plugins.media-keys active true
Run Code Online (Sandbox Code Playgroud)