Чтобы предотвратить принятие слишком широкого ответа, добавьте отдельное решение для 12.04.
До (и включая) 12.04, пользовательские привязки клавиш не хранятся в базе данных dconf, а в ~/.gconf/desktop/gnome/keybindings (в файле xml, в подпапках, таких как custom0 и т. д.).
Сценарий ниже создает файл xml и его папку containg, автоматически именованные правильно.
python /path/to/set_customshortcuts_12.py <name> <command> <key1> <key2> <key3>
key3 является необязательным, команды могут быть, например: python /path/to/set_customshortcuts_12.py run_browser firefox Primary 7
или python /path/to/set_customshortcuts_12.py run_texteditor gedit Primary Alt 3
#!/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")