72 votes

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

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

En gros, je veux savoir où Linux stocke les fichiers de raccourcis 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é quand j'ai essayé de l'ouvrir avec nano .

76voto

Jacob Vlijm Points 78990

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

Il est possible d'ajouter des raccourcis personnalisés à partir de la ligne de commande, mais c'est un peu compliqué ; il faut procéder en plusieurs étapes par raccourci clavier. D'un autre côté, il est possible de est assez simple et peut très bien être scriptée si vous souhaitez le faire à partir de la ligne de commande (c'était la question, non ?).

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éer le raccourci clavier en modifiant (ajoutant à-) la liste retournée par la commande :

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

    La liste retournée ressemble (s'il n'y avait qu'un seul raccourci actuellement) :

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

    Appliquer la liste éditée par la commande :

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

    (attention aux guillemets)

    N.B. Il n'est pas nécessaire de dire que la mention dans la liste (par ex. custom1 , custom2 ) doit être unique. Si vous le script, le script devrait empêcher les doublons. Dans ce cas, la liste édité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/']

    pour ajouter une combinaison de touches : custom1

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

    • nom :

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

      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 aquí

Exemple 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 depuis 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 gedit avec 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 l'utiliser :

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

Quelques-unes des mentions de clés les plus utilisées (trouvées expérimentalement, en examinant les modifications apportées par 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.

16voto

naumcho Points 131

Il existe un moyen simple de le faire en utilisant les éléments suivants 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 le custom0 pour l'ajout de nouvelles liaisons, par exemple. custom1 , custom2 etc.

Pour le rendre permanent, il suffit de l'ajouter à .bash_profile ou un script similaire qui est exécuté par les shells de connexion. Ne le faites pas pour les shells non-login. .bashrc parce que d'après mon expérience, ces dconf y gsettings le ralentir de manière significative. Changer/ajouter 30 liaisons prend une seconde ! Vous ne voulez pas cela dans les Shell non-login ( .bashrc ) !

8voto

Sylvain Pineau Points 59212

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

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

sudo apt-get install dconf-editor

Ensuite, allez dans le chemin dconf suivant dans l'éditeur :

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

enter image description here

6voto

Jacob Vlijm Points 78990

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

Afin d'éviter que la réponse acceptée ne devienne trop étendue, publiez une solution séparée pour 12.04.

Jusqu'à la version 12.04 (incluse), les raccourcis clavier personnalisés ne sont pas stockés dans le répertoire de l'utilisateur. 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 le dossier qui le contient, automatiquement nommés correctement.

Mode d'emploi

  1. Collez le script dans un fichier vide, enregistrez-le sous le nom de 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 

Notas

  • Notez que la dénomination des clés est différente de l'édition de gsettings. Les touches sont nommées comme elles apparaissent dans Paramètres système > "Clavier" > "Raccourcis" > "Raccourcis personnalisés", pour autant que je puisse voir.
  • J'ai testé le script sur 12.04 sous VirtualBox ; il fallait une déconnexion/une 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><'+keys[0]+'>'+keys[1]+'</stringvalue>') else: keyfile.insert(9, '\t\t<stringvalue><'+keys[0]+'><'+keys[1]+'>'+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")

2voto

Pablo Bianchi Points 10158

Sauvegarder les raccourcis clavier personnalisés

Vous pouvez sauvegarder/sauvegarder/exporter des raccourcis/clés personnalisés en utilisant seulement dconf y sed

Exportation

dconf dump / | sed -n '/\[org.gnome.settings-daemon.plugins.media-keys/,/^$/p' > custom-shortcuts.ini # Export

Importation

dconf load / < custom-shortcuts.ini # Import

  • Pour la sauvegarde, vous pouvez utiliser custom-shortcuts-$(date -I).ini

  • Notez que dconf lit par défaut le fichier user-db et ne transmet que les valeurs qui ne sont pas par défaut (en gras dans le champ dconf-editor )

  • Seulement pour les raccourcis personnalisés ajoutés

  • Sur la base de La réponse de Ciro (également aquí )

  • Pour vérifier qu'il fonctionne réinitialisation des valeurs par défaut ce chemin avant d'importer

    gsettings reset-recursively org.gnome.settings-daemon.plugins.media-keys
  • De la même manière que vous pouvez sauvegarder par exemple un L'extension GNOME Shell. installation :

    dconf dump / | sed -n '/\[org.gnome.shell.extensions.system-monitor\]/,/^$/p' > extensions-system-monitor-$(date -I).conf

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X