답변:
명령 행에서 커스텀 단축키를 추가하는 것은 가능하지만 약간 복잡합니다. 키 바인딩마다 몇 단계를 거쳐야합니다. 다른 한편으로는 이다 매우 간단하고 어떻게 든 명령 행 (즉, 오른쪽 질문이었다?)에서 작업을 수행하려는 경우 매우 잘 스크립팅 할 수 있습니다.
인터페이스 (시스템 설정> "키보드"> "바로 가기"> "사용자 정의 단축키")에서와 같이 사용자 정의 키보드 단축키는 다음 두 단계로 명령 행에서 작성됩니다.
명령에 의해 리턴되는 목록을 편집 (추가)하여 키 바인딩을 작성하십시오.
gsettings get org.gnome.settings-daemon.plugins.media-keys custom-keybindings
반환 된 목록은 다음과 같습니다 (현재 하나의 바로 가기 인 경우).
['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/']
다음 명령으로 편집 된 목록을 적용하십시오.
gsettings set org.gnome.settings-daemon.plugins.media-keys custom-keybindings "[<altered_list>]"
(큰 따옴표를 생각하십시오)
NB는 필요가 목록에서 언급 (예를 들어 말 없습니다 custom1
, custom2
) 고유 한 것이어야한다. 스크립트를 작성하면 스크립트가 중복을 방지해야합니다. 이 경우 편집 된 목록은 다음과 같아야합니다.
['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/']
하나의 키 바인딩을 추가하려면 custom1
속성을 설정하십시오.
이름:
gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/ name '<newname>'
명령:
gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/ command '<newcommand>'
키 조합 (예 <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>'
아래 스크립트는 명령 행에서 새 단축키 조합을 설정하는 데 사용할 수 있습니다. 키 조합을 사용할 수 있다고 가정하면 명령과 함께 사용할 수 있습니다.
python3 /path/to/script.py '<name>' '<command>' '<key_combination>'
예를 들면 :
gedit
키 조합 Alt+ 로 열 바로 가기 키 조합을 설정하려면 7:
python3 /path/to/script.py 'open gedit' 'gedit' '<Alt>7'
스크립트 :
#!/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])
사용하는 방법:
스크립트를 빈 파일에 붙여넣고로 저장 set_customshortcut.py
한 다음 위에 설명 된대로 실행하십시오.
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
기타
custom-keybinding
스키마 내부에서 끝에 "s"를 포함해서는 안됩니다. 그러나 키 또는 경로로 작동 할 때는 "s"를 포함해야합니다. 그렇지 않으면 "set"명령에서 예외가 발생합니다. 따라서 custom-keybinding
스키마에서 의 "s"를 제거하십시오 . 게다가 파이썬 스크립트도 업데이트해야합니다.
gsettings
반환 @as []
됩니다.
다음을 사용하여 간단하게 수행 할 수있는 간단한 방법이 있습니다 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'"
사용 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'"
custom0
바인딩을 더 추가 하려면 파트 에서 숫자를 늘려야 합니다. custom1
, custom2
등
영구적으로 만들려면 .bash_profile
로그인 셸에서 실행하는 유사한 스크립트 또는 유사한 스크립트에 추가하십시오 . 그냥 비 로그인 쉘을 위해 그것을하지 않는 .bashrc
때문에 내 경험에서 이들을 dconf
와 gsettings
크게 그것을 천천히. 30 바인딩 변경 / 추가에는 1 초가 걸립니다! 비 로그인 쉘 ( .bashrc
) 에서는 이것을 원하지 않습니다 !
custom0
를) 사용하여 사용자 정의 바로 가기 목록 에 추가해야합니다 gsettings set org.gnome.settings-daemon.plugins.media-keys custom-keybindings "['.../custom1/']"
. 에 대해 모르겠습니다 dconf
.
dconf dump DIR
에 덤프합니다. 출력은 GVariant 구문의 값을 가진 키 파일과 같은 형식으로되어 있습니다.
모든 사용자 정의 키보드 단축키 설정은 dconf 데이터베이스에 저장됩니다.
다음을 통해 쉽게 액세스 할 수 있습니다 dconf-editor
.
sudo apt-get install dconf-editor
그런 다음 편집기에서 다음 dconf 경로로 이동하십시오.
/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/
수락 된 답변이 너무 광범위 해지지 않도록하려면 12.04에 대한 별도의 솔루션을 게시하십시오.
12.04까지 (및 포함) 사용자 정의 키 바인딩은 dconf
데이터베이스에 저장되지 않고 ~/.gconf/desktop/gnome/keybindings
(xml 파일, 하위 폴더 custom0
등) 저장됩니다.
아래 스크립트는 xml
자동으로 이름이 올바르게 지정된 파일과 해당 포함 폴더를 만듭니다 .
set_customshortcuts_12.py
다음 명령으로 실행하십시오 :
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")
sed를 사용하여 Python 스크립트없이 새 사용자 정의 바로 가기를 설정할 수 있습니다. 다음 스크립트에서 name , binding 및 action 을 원하는대로 설정 하면됩니다.
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
이를 위해 스크립트를 작성했습니다. 아래를 참조하십시오.
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/']"
@JacobVlijm이 게시 한 답변 , 특히 스크립트가 매우 유용하다는 것을 알았습니다 . 코드를에 포트했습니다 bash
. 나는이 기능이 완벽하지는 않지만 몇 가지 버그가있을 수 있지만 나에게 효과적입니다.
function set_shortcuts(){
# Usage: set_shortcuts [name] [command] [shortcut]
unset num i name command shortcut value test value_new
local name="$1"
local command="$2"
local shortcut="$3"
local value=$(gsettings get org.gnome.settings-daemon.plugins.media-keys custom-keybindings)
local test=$(echo $value | sed "s/\['//;s/', '/,/g;s/'\]//" - | tr ',' '\n' | grep -oP ".*/custom\K[0-9]*(?=/$)")
if [ "$(echo "$value" | grep -o "@as")" = "@as" ]; then
local num=0
local value_new="['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom${num}/']"
else
local i=1
until [ "$num" != "" ]; do
if [ "$(echo $test | grep -o $i)" != "$i" ]; then
local num=$i
fi
i=$(echo 1+$i | bc);
done
local value_new=$(gsettings get org.gnome.settings-daemon.plugins.media-keys custom-keybindings | sed "s#']\$#', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom${num}/']#" -)
fi
gsettings set org.gnome.settings-daemon.plugins.media-keys custom-keybindings "$value_new"
gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom${num}/ name "$name"
gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom${num}/ command "$command"
gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom${num}/ binding "$shortcut"
}