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

40

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 il peut être modifié.

Sur 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 .

    
posée Anonymous Platypus 16.03.2015 - 11:49
la source

6 réponses

46

Ajout de raccourcis clavier à deux pas de la ligne de commande (14.04 +)

L'ajout de raccourcis personnalisés à partir de la ligne de commande peut être fait, mais c'est un peu compliqué. cela doit se faire en quelques étapes par raccourci clavier. D'un autre côté, est très simple et peut très bien être scripté si vous voulez le faire depuis la ligne de commande (c'était la question, non?).

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

  1. créer la reliure en éditant (en ajoutant à) la liste renvoyée par la commande:

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

    La liste renvoyée ressemble à (si ce n’était qu’un seul raccourci actuellement):

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

    Appliquez la liste modifiée par la commande:

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

    (attention aux guillemets doubles)

    NB: Inutile de dire que la mention dans la liste (par exemple, custom1 , custom2 ) doit être unique. Si vous le scriptez, 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 un raccourci clavier: 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>'
      
    • commande:

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

Vous trouverez des informations utiles 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 est disponible):

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

Un exemple:

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")
current = eval(get("gsettings get "+key))
# 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 le nom set_customshortcut.py , exécutez-le comme expliqué ci-dessus.

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

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.

    
réponse donnée Jacob Vlijm 16.03.2015 - 12:45
la source
9

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, allez dans le chemin dconf suivant dans l'éditeur:

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

    
réponse donnée Sylvain Pineau 16.03.2015 - 12:40
la source
8

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 partie custom0 pour ajouter plus de liaisons, c.-à-d. custom1 , custom2 , etc.

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

    
réponse donnée lisak 18.09.2016 - 01:04
la source
5

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

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

Jusqu'au (inclus) 12.04, les raccourcis clavier personnalisés ne sont pas stockés 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 containg, nommés 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 
    

Notes

  • notez que le nommage des clés est différent de l'édition des paramètres. Les clés sont nommées comme elles apparaissent dans les paramètres système & gt; "Clavier" & gt; "Raccourcis" & gt; "Raccourcis personnalisés", pour autant que je sache.
  • J'ai testé le script le 12.04 sous VirtualBox; il fallait se déconnecter pour que les modifications puissent avoir 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")
    
réponse donnée Jacob Vlijm 31.03.2015 - 14:08
la source
0

Vous pouvez définir un nouveau raccourci personnalisé sans script python, en utilisant sed. Vous devez simplement 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
    
réponse donnée mmai 17.02.2018 - 12:01
la source
0

A écrit un script pour cela. Voir ci-dessous.

Voir l’utilisation dans l’invocation creatShortcut .

export nextShortcutId=0
function creatShortcut() {
    name=""
    commandToRun=""
    binding=""
    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/']"
    
réponse donnée AlikElzin-kilaka 20.03.2018 - 11:39
la source

Lire d'autres questions sur les étiquettes