터미널에서 사용자 정의 키보드 단축키를 설정하는 방법은 무엇입니까? 대해 터미널에서 사용자 정의 키보드 단축키를 설정하는

다른 Linux 버전에 대해 터미널에서 사용자 정의 키보드 단축키를 설정하는 방법은 무엇입니까?

기본적으로 Linux가 키보드 단축키 파일을 저장하는 위치와 편집 방법을 알고 싶습니다.

내 연구에서 파일을 찾았 ~/.config/compiz-1/compizconfig지만 파일 을 열려고 할 때 암호화되었거나 비슷했습니다 nano.



답변

명령 행에서 두 단계로 바로 가기 키 바인딩 추가 (14.04+)

명령 행에서 커스텀 단축키를 추가하는 것은 가능하지만 약간 복잡합니다. 키 바인딩마다 몇 단계를 거쳐야합니다. 다른 한편으로는 이다 매우 간단하고 어떻게 든 명령 행 (즉, 오른쪽 질문이었다?)에서 작업을 수행하려는 경우 매우 잘 스크립팅 할 수 있습니다.

인터페이스 (시스템 설정> “키보드”> “바로 가기”> “사용자 정의 단축키”)에서와 같이 사용자 정의 키보드 단축키는 다음 두 단계로 명령 행에서 작성됩니다.

  1. 명령에 의해 리턴되는 목록을 편집 (추가)하여 키 바인딩을 작성하십시오.

    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

  2. 속성을 설정하십시오.

    • 이름:

      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한 다음 위에 설명 된대로 실행하십시오.

가장 많이 사용되는 주요 언급 중 일부는 실험적으로 GUI가 바인딩 값으로 변경 한 내용을 살펴 보았습니다.

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

기타


답변

다음을 사용하여 간단하게 수행 할 수있는 간단한 방법이 있습니다 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때문에 내 경험에서 이들을 dconfgsettings크게 그것을 천천히. 30 바인딩 변경 / 추가에는 1 초가 걸립니다! 비 로그인 쉘 ( .bashrc) 에서는 이것을 원하지 않습니다 !


답변

모든 사용자 정의 키보드 단축키 설정은 dconf 데이터베이스에 저장됩니다.

다음을 통해 쉽게 액세스 할 수 있습니다 dconf-editor.

sudo apt-get install dconf-editor

그런 다음 편집기에서 다음 dconf 경로로 이동하십시오.

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


답변

12.04의 명령 줄에서 바로 가기 키 바인딩 추가

수락 된 답변이 너무 광범위 해지지 않도록하려면 12.04에 대한 별도의 솔루션을 게시하십시오.

12.04까지 (및 포함) 사용자 정의 키 바인딩은 dconf데이터베이스에 저장되지 않고 ~/.gconf/desktop/gnome/keybindings(xml 파일, 하위 폴더 custom0등) 저장됩니다.

아래 스크립트는 xml자동으로 이름이 올바르게 지정된 파일과 해당 포함 폴더를 만듭니다 .

사용하는 방법

  1. 스크립트를 빈 파일에 붙여넣고 다른 이름으로 저장하십시오. set_customshortcuts_12.py
  2. 다음 명령으로 실행하십시오 :

    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
    

노트

  • 키 이름은 편집 설정과 다릅니다. 키는 시스템 설정> “키보드”> “바로 가기”> “사용자 정의 바로 가기”에 표시된대로 이름이 지정됩니다.
  • VirtualBox에서 12.04의 스크립트를 테스트했습니다. 변경 사항을 적용하려면 로그 아웃 / 인이 필요했습니다.
#!/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")

답변

sed를 사용하여 Python 스크립트없이 새 사용자 정의 바로 가기를 설정할 수 있습니다. 다음 스크립트에서 name , bindingaction 을 원하는대로 설정 하면됩니다.

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"
}