web-dev-qa-db-fra.com

Comment définir des raccourcis clavier personnalisés à partir d'un terminal?

Comment définir des raccourcis clavier personnalisés à partir d'un terminal pour différentes versions de Linux?

En gros, je veux savoir où Linux stocke les fichiers de raccourci clavier et comment ils peuvent être modifiés.

Lors de mes recherches, j'ai trouvé un fichier ~/.config/compiz-1/compizconfig mais il était plus ou moins crypté lorsque j'ai essayé de l'ouvrir avec nano.

53
Anonymous Platypus

Ajout de raccourcis clavier en deux étapes à partir de la ligne de commande (14.04+)

Ajout de raccourcis personnalisés à partir de la ligne de commande peut être fait, mais c'est un peu compliqué; cela doit être fait en quelques étapes par liaison de clé. D'autre part, est assez simple et peut très bien être scripté si vous voulez le faire depuis la ligne de commande (c'était la question, n'est-ce pas?).

Tout comme dans votre interface (Paramètres système> "Clavier"> "Raccourcis"> "Raccourcis personnalisés"), les raccourcis clavier personnalisés sont créés à partir de la ligne de commande en deux étapes:

  1. créez le raccourci clavier en modifiant (en ajoutant) la liste renvoyée par la commande:

    gsettings get org.gnome.settings-daemon.plugins.media-keys custom-keybindings
    

    La liste renvoyée se présente comme suit (s’il ne s’agissait que d’un seul raccourci):

    ['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/']
    

    Appliquez la liste modifiée à l'aide de la commande:

    gsettings set org.gnome.settings-daemon.plugins.media-keys custom-keybindings "[<altered_list>]"
    

    (attention aux guillemets)

    N.B. Inutile de dire que la mention dans la liste (par exemple custom1, custom2) devrait être unique. Si vous écrivez un script, le script devrait empêcher les doublons. Dans ce cas, la liste modifiée devrait ressembler à, par exemple:

    ['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/']
    

    ajouter un raccourci clavier: custom1

  2. définir ses propriétés:

    • prénom:

      gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/ name '<newname>'
      
    • commander:

      gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/ command '<newcommand>'
      
    • Combinaison de touches (par exemple <Primary><Alt>g):

      gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/ binding '<key_combination>'
      

Des informations utiles peuvent être trouvées ici

Exemple de script pour définir un nouveau raccourci personnalisé

Le script ci-dessous peut être utilisé pour définir une nouvelle combinaison de touches de raccourci à partir de la ligne de commande. Il peut être utilisé avec la commande (en supposant que la combinaison de touches soit disponible):

python3 /path/to/script.py '<name>' '<command>' '<key_combination>'

Un exemple:

Pour définir une combinaison de touches de raccourci pour ouvrir geditavec la combinaison de touches Alt+7:

python3 /path/to/script.py 'open gedit' 'gedit' '<Alt>7'

Le script:

#!/usr/bin/env python3
import subprocess
import sys

# defining keys & strings to be used
key = "org.gnome.settings-daemon.plugins.media-keys custom-keybindings"
subkey1 = key.replace(" ", ".")[:-1]+":"
item_s = "/"+key.replace(" ", "/").replace(".", "/")+"/"
firstname = "custom"
# get the current list of custom shortcuts
get = lambda cmd: subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8")
array_str = get("gsettings get "+key)
# in case the array was empty, remove the annotation hints
command_result = array_str.lstrip("@as")
current = eval(command_result)
# make sure the additional keybinding mention is no duplicate
n = 1
while True:
    new = item_s+firstname+str(n)+"/"
    if new in current:
        n = n+1
    else:
        break
# add the new keybinding to the list
current.append(new)
# create the shortcut, set the name, command and shortcut key
cmd0 = 'gsettings set '+key+' "'+str(current)+'"'
cmd1 = 'gsettings set '+subkey1+new+" name '"+sys.argv[1]+"'"
cmd2 = 'gsettings set '+subkey1+new+" command '"+sys.argv[2]+"'"
cmd3 = 'gsettings set '+subkey1+new+" binding '"+sys.argv[3]+"'"

for cmd in [cmd0, cmd1, cmd2, cmd3]:
    subprocess.call(["/bin/bash", "-c", cmd])

Comment utiliser:

Collez le script dans un fichier vide, enregistrez-le sous set_customshortcut.py, exécutez-le comme expliqué ci-dessus.

Certaines des mentions clés les plus utilisées (trouvées expérimentalement, examinant les modifications apportées par la méthode de l'interface graphique à la valeur de liaison):

Super key:                 <Super>
Control key:               <Primary> or <Control>
Alt key:                   <Alt>
Shift key:                 <Shift>
numbers:                   1 (just the number)
Spacebar:                  space
Slash key:                 slash
Asterisk key:              asterisk (so it would need `<Shift>` as well)
Ampersand key:             ampersand (so it would need <Shift> as well)

a few numpad keys:
Numpad divide key (`/`):   KP_Divide
Numpad multiply (Asterisk):KP_Multiply
Numpad number key(s):      KP_1
Numpad `-`:                KP_Subtract

etc.

60
Jacob Vlijm

Tous les paramètres de raccourcis clavier personnalisés sont stockés dans la base de données dconf.

Vous pouvez facilement y accéder avec dconf-editor:

Sudo apt-get install dconf-editor

Ensuite, accédez au chemin d'accès dconf suivant dans l'éditeur:

/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/

enter image description here

10
Sylvain Pineau

Il existe un moyen simple de le faire en utilisant dconf:

dconf write /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/command "'move-window.sh'"
dconf write /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/binding "'<Primary><Alt>Page_Down'"
dconf write /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/name "'move-window'"

Utilisation de gsettings:

gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/ name "'move-window'"
gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/ binding "'<Primary><Alt>Page_Down'"
gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/ command "'/usr/local/bin/move-window.sh'"

Vous devez augmenter le nombre dans la custom0part pour ajouter plus de liaisons, c'est-à-dire. custom1, custom2, etc.

Pour le rendre permanent, ajoutez-le simplement à .bash_profile ou à un script similaire exécuté par des shells de connexion. Ne le faites pas pour les shells non-connectés .bashrc car, d'après mon expérience, ces dconf et gsettings le ralentissent considérablement. Changer/ajouter 30 liaisons prend une seconde! Vous ne voulez pas cela dans un shell non connecté (.bashrc)!

10
lisak

Ajout de raccourcis clavier à partir de la ligne de commande dans 12.04

Pour éviter que la réponse acceptée ne devienne trop volumineuse, publiez une solution distincte pour 12.04.

Jusqu'au 12.04 inclus (et y compris), les associations de touches personnalisées ne sont pas stockées dans la base de données dconf, mais dans ~/.gconf/desktop/gnome/keybindings (dans un fichier xml, dans des sous-dossiers tels que custom0 etc.).

Le script ci-dessous crée le fichier xml et son dossier contenant, nommé automatiquement correctement.

Comment utiliser

  1. Collez le script dans un fichier vide, enregistrez-le sous le nom set_customshortcuts_12.py
  2. Exécutez-le avec la commande:

    python /path/to/set_customshortcuts_12.py <name> <command> <key1> <key2> <key3>
    

    key3 est facultatif, les commandes peuvent être par exemple:

    python /path/to/set_customshortcuts_12.py run_browser firefox Primary 7 
    

    ou

    python /path/to/set_customshortcuts_12.py run_texteditor gedit Primary Alt 3 
    

Remarques

  • notez que la dénomination des touches diffère de celle de l'édition de paramètres. Les touches sont nommées comme elles apparaissent dans Paramètres système> "Clavier"> "Raccourcis"> "Raccourcis personnalisés", à ma connaissance.
  • J'ai testé le script sur 12.04 sous VirtualBox; il avait besoin d'une connexion/déconnexion pour que les changements aient lieu.
#!/usr/bin/env python
import os
import sys

home = os.environ["HOME"]
name = sys.argv[1]
command = sys.argv[2]
keys = sys.argv[3:]

keyfile = [
    '<?xml version="1.0"?>',
    '<gconf>',
    '\t<entry name="action" mtime="1427791732" type="string">',
    '\t\t<stringvalue>'+command+'</stringvalue>',
    '\t</entry>',
    '\t<entry name="name" mtime="1427791732" type="string">',
    '\t\t<stringvalue>'+name+'</stringvalue>',
    '\t</entry>',
    '\t<entry name="binding" mtime="1427791736" type="string">',
    '\t</entry>',
    '</gconf>',
    ]

if len(keys) == 2:
    keyfile.insert(9, '\t\t<stringvalue>&lt;'+keys[0]+'&gt;'+keys[1]+'</stringvalue>')
else:
    keyfile.insert(9, '\t\t<stringvalue>&lt;'+keys[0]+'&gt;&lt;'+keys[1]+'&gt;'+keys[2]+'</stringvalue>')

n = 0
while True:
    check = home+"/"+".gconf/desktop/gnome/keybindings/custom"+str(n)
    if os.path.exists(check):
        n = n+1
    else:
        newdir = check
        newfile = check+"/"+"%gconf.xml"
        break

os.makedirs(newdir)
with open(newfile, "wt") as shortcut:
    for l in keyfile:
        shortcut.write(l+"\n")
6
Jacob Vlijm

Vous pouvez définir un nouveau raccourci personnalisé sans script python, à l'aide de sed. Vous devez juste définir nom, liaison et action à votre choix dans le script suivant:

name="myaction"
binding="<CTRL><ALT>v"
action="/usr/local/bin/myaction"

media_keys=org.gnome.settings-daemon.plugins.media-keys
custom_kbd=org.gnome.settings-daemon.plugins.media-keys.custom-keybinding
kbd_path=/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/$name/
new_bindings=`gsettings get $media_keys custom-keybindings | sed -e"s>'\]>','$kbd_path']>"| sed -e"s>@as \[\]>['$kbd_path']>"`
gsettings set $media_keys custom-keybindings "$new_bindings"
gsettings set $custom_kbd:$kbd_path name $name
gsettings set $custom_kbd:$kbd_path binding $binding
gsettings set $custom_kbd:$kbd_path command $action
1
mmai

A écrit un script pour ça. Voir ci-dessous.

Voir l'utilisation dans l'invocation creatShortcut.

export nextShortcutId=0
function creatShortcut() {
    name="$1"
    commandToRun="$2"
    binding="$3"
    path="/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom${nextShortcutId}"
    nextShortcutId=$nextShortcutId+1
    dconf write "$path/name" "'""$name""'"
    dconf write "$path/command" "'""$commandToRun""'"
    dconf write "$path/binding" "'""$binding""'"
}

# dconf write /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/binding '"<Primary><Shift>exclam"'
creatShortcut 'copyq show' 'copyq show' '<Primary><Shift>exclam'
creatShortcut 'System Monitor' 'gnome-system-monitor' '<Primary><Alt>m'
creatShortcut 'Suspend' 'systemctl suspend -i' '<Super>d'
creatShortcut 'Volume Up' 'amixer -D Pulse sset Master 5%+' '<Super>Page_Up'
creatShortcut 'Volume Down' 'amixer -D Pulse sset Master 5%-' '<Super>Page_Down'

overallbindings=""
for ((i = 0 ; i < $nextShortcutId ; i++ ));
do
    overallbindings="$overallbindings, '$customindingPathPrefix$i/'"
done
overallbindings="[${overallbindings:2}]" # Delete the first 2 chars: " ," - space and comma
# echo $overallbindings

# Update the list of bindings for the shortcuts to work
dconf write /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings "$overallbindings"
# dconf write /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings "['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom2/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom3/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom4/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom5/']"
1
AlikElzin-kilaka