λ€λ₯Έ Linux λ²μ μ λν΄ ν°λ―Έλμμ μ¬μ©μ μ μ ν€λ³΄λ λ¨μΆν€λ₯Ό μ€μ νλ λ°©λ²μ 무μμ λκΉ?
κΈ°λ³Έμ μΌλ‘ Linuxκ° ν€λ³΄λ λ¨μΆν€ νμΌμ μ μ₯νλ μμΉμ νΈμ§ λ°©λ²μ μκ³ μΆμ΅λλ€.
λ΄ μ°κ΅¬μμ νμΌμ μ°Ύμ ~/.config/compiz-1/compizconfig
μ§λ§ νμΌ μ μ΄λ €κ³ ν λ μνΈνλμκ±°λ λΉμ·νμ΅λλ€ nano
.
λ΅λ³
λͺ λ Ή νμμ λ λ¨κ³λ‘ λ°λ‘ κ°κΈ° ν€ λ°μΈλ© μΆκ° (14.04+)
λͺ λ Ή νμμ 컀μ€ν λ¨μΆν€λ₯Ό μΆκ°νλ κ²μ κ°λ₯νμ§λ§ μ½κ° 볡μ‘ν©λλ€. ν€ λ°μΈλ©λ§λ€ λͺ λ¨κ³λ₯Ό κ±°μ³μΌν©λλ€. λ€λ₯Έ ννΈμΌλ‘λ μ΄λ€ λ§€μ° κ°λ¨νκ³ μ΄λ»κ² λ λͺ λ Ή ν (μ¦, μ€λ₯Έμͺ½ μ§λ¬Έμ΄μλ€?)μμ μμ μ μννλ €λ κ²½μ° λ§€μ° μ μ€ν¬λ¦½ν ν μ μμ΅λλ€.
μΈν°νμ΄μ€ (μμ€ν μ€μ > βν€λ³΄λβ> βλ°λ‘ κ°κΈ°β> βμ¬μ©μ μ μ λ¨μΆν€β)μμμ κ°μ΄ μ¬μ©μ μ μ ν€λ³΄λ λ¨μΆν€λ λ€μ λ λ¨κ³λ‘ λͺ λ Ή νμμ μμ±λ©λλ€.
-
λͺ λ Ήμ μν΄ λ¦¬ν΄λλ λͺ©λ‘μ νΈμ§ (μΆκ°)νμ¬ ν€ λ°μΈλ©μ μμ±νμμμ€.
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
ν λ€μ μμ μ€λͺ
λλλ‘ μ€ννμμμ€.
κ°μ₯ λ§μ΄ μ¬μ©λλ μ£Όμ μΈκΈ μ€ μΌλΆλ μ€νμ μΌλ‘ 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
λλ¬Έμ λ΄ κ²½νμμ μ΄λ€μ dconf
μ gsettings
ν¬κ² κ·Έκ²μ μ²μ²ν. 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
μλμΌλ‘ μ΄λ¦μ΄ μ¬λ°λ₯΄κ² μ§μ λ νμΌκ³Ό ν΄λΉ ν¬ν¨ ν΄λλ₯Ό λ§λλλ€ .
μ¬μ©νλ λ°©λ²
- μ€ν¬λ¦½νΈλ₯Ό λΉ νμΌμ λΆμ¬λ£κ³ λ€λ₯Έ μ΄λ¦μΌλ‘ μ μ₯νμμμ€.
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
λ ΈνΈ
- ν€ μ΄λ¦μ νΈμ§ μ€μ κ³Ό λ€λ¦ λλ€. ν€λ μμ€ν μ€μ > βν€λ³΄λβ> βλ°λ‘ κ°κΈ°β> βμ¬μ©μ μ μ λ°λ‘ κ°κΈ°βμ νμλλλ‘ μ΄λ¦μ΄ μ§μ λ©λλ€.
- 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><'+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"
}