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


8

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

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

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


您在说什么键盘快捷键?有很多不同的集合。您有一些可以在命令行上工作,有一些可以激活GUI东西等。它们是完全独立的。
terdon

如果转到系统设置>键盘>快捷方式,ubuntu中将包含所有快捷方式,我想禁用所有快捷方式。
user278551 2014年

好的,所以您的意思是仅GUI快捷方式。我假设您使用的是默认Ubuntu,因此您的桌面环境是Unity。那是对的吗?
2014年

对,那是正确的。
user278551 2014年

Answers:


11

我不知道您为什么要这样做,我应该警告您,找回快捷方式可能很复杂。如果这确实是您要执行的操作,则以下命令将禁用所有键盘快捷键。这些都是通过Unity的GUI设置的,也可能是您使用ccsm

A.禁用Unity keyindings

  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

谢谢您的出色工作,我认为仍然缺少Compiz快捷方式吗?
user.dz 2014年

@Sneetsher B部分应处理用户定义的compiz快捷方式。不确定默认值。我检查一下
terdon 2014年

添加了一个脚本,使其更多地可以用作执行上述操作的前端:github.com/fatso83/dotfiles/blob/master/utils/scripts/…–
oligofren

关于“我不知道为什么要这么做”,我的开发团队中每个人的用例是,默认快捷方式与流行程序中的已知键绑定重叠。在我们的案例中,大多数IntelliJ快捷方式都无法使用,我们真的只需要少数Gnome快捷方式(例如Alt-Tab和窗口大小调整)。
oligofren

@oligofren当然可以,但是为什么您随后需要从终端禁用所有快捷方式?那就是我发现的奇怪之处。但是无论如何,对每个人自己:)
terdon

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/

0

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.