BanditHijo.dev

SXHKD, Simple X Hotkey Daemon

Created at: 2020-10-09
Author by: BanditHijo

Latar Belakang

SXHKD, adalah Daemon yang sederhana (simple) untuk keyboard shortcut (hotkey) pada lingkungan X (Xorg).

Sederhananya, SXHKD digunakan sebagai alat bantu untuk mendefinisikan “keyboard shortcut” (keybindings) pada lingkungan X.

SXHKD digunakan secara default oleh BSPWM (Binary Space Partitioning Window Manager) sebagai tempat kita mendefinisikan keyboard shortcut.

Umumnya, penggunan Window Manager –terkhusus untuk Tiling Window Manager– akan lebih sering memanipulasi window (seperti: switch window focus, resize window, move window, dll.) dan pemanggilan aplikasi hanya dengan menggunakan keyboard shortcut –tanpa perlu menggunakan mouse.

Window Manager pertama yang saya gunakan untuk beraktifitas adalah i3WM. Pada i3WM, kita dapat mendefinisikan keyboard shortcut langsung di dalam file config dari i3WM.

Berbeda dengan BSPWM, yang menggunakan SXHKD sebagai alat bantu untuk menghandle keyboard shortcut.

Keuntungan Menggunakan SXHKD

Terdapat beberapa keuntungan yang akan kita dapatkan apabila kita memanfaatkan SXHKD sebagai alat bantu untuk menghandle keyboard shortcut, diantaranya:

  1. Modularity
    Kita akan mendapatkan konfigurasi keyboard shortcut yang terpisah dari config yang lain. Ibarat mengklasifikasikan dan memisahkan bagian khusus (tertentu) untuk keyboard shortcut. Dengan begini, diharapkan kita akan mendapatkan keuntungan dalam hal “easy to mantain” apabila konfigurasi yang kita gunakan semakin banyak.

  2. Flexibility
    Kita dapat menulis dan berkespresi dengan lebih bebas dalam mendifinisikan keyboard shortcut serta statement yang akan dipanggil juga menjadi lebih luwes.

  3. Independent
    SXHKD tidak hanya untuk BSPWM, tetapi dapat digunakan untuk Window Manager atau Desktop Environment yang lain pula.

Cara Penggunaan

Untuk memanggil config sxhkd, saya lebih senang menggunakan option -c.

Karena saya memiliki beberapa file config untuk masing-masing WM.

$ sxhkd -c $HOME/.config/sxhkd/sxhkdrc-dwm

Langkah selanjutnya, tinggal dipasang pada konfigurasi autostart yang teman-teman miliki.

Misal, contohnya seperti yang saya pergunakan di bawah ini.

Gambar 1

Contoh Penggunaan

Berikut ini beberapa contoh isi dari konfigurasi SXHKD yang saya pergunakan.

Saya akan ambil beberapa contoh yang simple dan berbeda dengan yang lain.

1. Single Key

Ini adalah contoh yang menggnunakan single key.

$HOME/.config/sxhkd/sxhkdrc
1# screenshot
2Print
3 /usr/bin/scrot-full
4
5# pulseaudio controls mute speaker on/off
6XF86AudioMute
7 pamixer --toggle-mute

Dalam contoh di atas, saya menggunakan tombol PrtScr untuk memanggil script yang bernama scrot-full.

2. Simple Combination Sequence Key

Kita dapat menggunakan 2 atau lebih kombinasi tombol yang kita gunakan dengan cara “press & hold”.

Key1 + Key2 + KeyX

Contoh:

Ini adalah contoh 2 kombinasi untuk menggunakan command terminal.

$HOME/.config/sxhkd/sxhkdrc
1# make sxhkd reload its configuration files
2super + Escape
3 pkill -USR1 -x sxhkd

Ini adalah contoh 2 kombinasi untuk memanggil script dmenu (custom) launcher.

$HOME/.config/sxhkd/sxhkdrc
1# application launcher
2super + d
3 /usr/bin/dmenu-apps

Ini adalah contoh 3 kombinasi untuk memanggil program slock.

$HOME/.config/sxhkd/sxhkdrc
1# lock screen
2super + shift + x
3 /usr/local/bin/slock

3. Simple Parenthesis

Different Statement

1{F1, F2, Fx}
2 {statement A, statement B, statement x}

Arti dari keybind di atas adalah:

F1 untuk menjalankan statement A.

F2 untuk menjalankan statement B.

Dan seterusnya.

Same Statement with Different Options

1{F1, F2, Fx}
2 statement {--option A, --option B, --option x}

Arti dari keybind di atas adalah:

F1, untuk menjalankan statement --option A.

F2, untuk menjalankan statement --option B.

Dan seterusnya.

Contoh:

$HOME/.config/sxhkd/sxhkdrc
1# pulseaudio controls speaker volume up & down
2{XF86AudioRaiseVolume, XF86AudioLowerVolume}
3 pamixer {--increase 2, --decrease 2}

4. Combination Sequence Key with Parenthesis

1super + {_+shift} + F1
2 statement {--option A, --option B}

Kelihatannya ribet yaa? Tapi sebenarnya ini sangat sederhana.

Arti dari keybind di atas adalah:

Super + F1, untuk menjalankan statement --option A. Tanda _ dapat diartikan sebagai null atau tidak ada.

Super + Shift + F1, untuk menjalankan statement --option B.

5. Toggling On/Off

1~F11
2 {statement on, statement off}

Ini adalah contoh dari penggunaan toggling function. Cirinya adalah penggunaan tanda tilda ~.

Toggling artinya kita bisa berganti on/off dengan menggunakan keybind yang sama.

Kalau diperhatikan, bagian statement menggunakan parenthesis.

Penggunaannya adalah pada dua statement yang saling berlawanan atau statement yang sama namun berbeda option.

Misal, statement A, adalah statement untuk memanggil, sedangkan statement B, adalah statement untuk menutup.

Intinya, jangan terpaku pada on & off, tapi bisa beranekaragam tergantung dari kreatifitas teman-teman.

Contoh:

$HOME/.config/sxhkd/sxhkdrc
1# key-mon
2super + ~F11
3 {/usr/bin/key-mon, killall key-mon}

6. Multiline for Long Statement

1super + F1
2 notify-send \
3 "Header Title" \
4 "Isi dari notifikasi"

Kita dapat menggunakan \ backslash untuk memisahkan satu statement panjang menjadi beberapa baris. Dengan begini, command yang kita tulis akan lebih mudah untuk dibaca.

7. Multistatement

$HOME/.config/sxhkd/sxhkdrc
1super + F1
2 pamixer --increase 10; notify-send "Volume +"

Kita dapat menggunakan tanda ; untuk memisahkan antar statement. Maka statement ini akan dijalankan berurutan dimulai dari yang paling depan.

8. Multiline for Multistatement

$HOME/.config/sxhkd/sxhkdrc
1super + F1
2 pamixer --increase 10; \
3 notify-send "Volume +"

Ini adalah kombinasi dari point ke 6 & 7. Tujuannya agar statement yang kita definisikan menjadi lebih readable.

9. Etc.

Silahkan lihat pada man sxhkd untuk fungsi-fungsi yang lain.

Contoh

Saya akan mencontohkan penggunaan yang terlihat ribet.

Tujuannya untuk menjelaskan dari keuntungan menggunakan SXHKD sesuai pada point ke-2, yaitu “Fleksibilitas”.

$HOME/.config/sxhkd/sxhkdrc
1# pulseaudio controls speaker volume up & down
2{XF86AudioRaiseVolume, XF86AudioLowerVolume}
3 pamixer {-i 2, -d 2}; \
4 ou_vol=$(pamixer --get-volume); \
5 jack_stat=$($HOME/bin/has_headphone); \
6 [ $jack_stat = "yes" ] && icon=" "; \
7 [ $jack_stat = "no" ] && icon=" "; \
8 dunstify "$icon Volume: "$ou_vol -t 1000 -r 1
9
10# pulseaudio controls mic volume up & down
11shift + {XF86AudioRaiseVolume, XF86AudioLowerVolume}
12 pamixer --source 1 {-i 2, -d 2}; \
13 ou_mic=$(pamixer --source 1 --get-volume); \
14 dunstify " Microphone: "$ou_mic -t 1000 -r 1
15
16# pulseaudio controls monitor volume up & down
17alt + {XF86AudioRaiseVolume, XF86AudioLowerVolume}
18 pamixer --source 0 {-i 2, -d 2}; \
19 ou_mon=$(pamixer --source 0 --get-volume); \
20 dunstify " Monitor: "$ou_mon -t 1000 -r 1
21
22# pulseaudio controls mute speaker
23XF86AudioMute
24 pamixer \
25 --toggle-mute; \
26 ou_mute=$(pamixer --get-mute); \
27 jack_stat=$($HOME/bin/has_headphone); \
28 [ $jack_stat = "yes" ] && icon_on=" " icon_off=" "; \
29 [ $jack_stat = "no" ] && icon_on=" " icon_off=" "; \
30 [ $ou_mute = "true" ] && dunstify "$icon_off MUTED" -t 1000 -r 1; \
31 [ $ou_mute = "false" ] && dunstify "$icon_on UNMUTED" -t 1000 -r 1
32
33# pulseaudio controls mute mic
34shift + XF86AudioMute
35 pamixer \
36 --source 1 --toggle-mute; \
37 in_mute=$(pamixer --source 1 --get-mute); \
38 [ $in_mute = "true" ] && dunstify " MUTED" -t 1000 -r 1; \
39 [ $in_mute = "false" ] && dunstify " UNMUTED" -t 1000 -r 1
40
41# pulseaudio controls mute monitor
42alt + XF86AudioMute
43 pamixer \
44 --source 0 --toggle-mute; \
45 mo_mute=$(pamixer --source 0 --get-mute); \
46 [ $mo_mute = "true" ] && dunstify " MUTED" -t 1000 -r 1; \
47 [ $mo_mute = "false" ] && dunstify " UNMUTED" -t 1000 -r 1
48
49# screen brightness controls
50{XF86MonBrightnessUp, XF86MonBrightnessDown}
51 xbacklight {-inc 5, -dec 5}; \
52 get_brightness=$(xbacklight -get | cut -f 1 -d '.'); \
53 dunstify " Brightness: "$get_brightness -t 1000 -r 1

Penggunaan seperti ini tidak saya rekomendasikan. Saya lebih merekomendasikan dimasukkan saja ke dalam file script.

Pesan Penulis

Sepertinya, segini dulu yang dapat saya tuliskan.

Untuk repositori SXHKD milik saya, dapat teman-teman lihat di sini.

Mudah-mudahan dapat bermanfaat.

Terima kasih.

(^_^)

Referensi

  1. baskerville/sxhkd
    Diakses tanggal: 2020/10/12