使用命令列停用所有 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/':這只是添加一個製表符 ( \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 ''

我不確定這是否是所有快捷鍵,但似乎是其中的大部分

相關內容