Sejak memasang "dark" theme, saya cenderung menjadi malas menulis. Untuk sementara, dark theme saya disable dulu yaa. Terima kasih (^_^) (bandithijo, 2024/09/15) ●
Prakata
Setelah setahun lebih menggunakan i3 Window Manager (selanjutnya akan saya sebut sebagai i3wm), saya merasa sudah waktunya untuk membagikan pengalaman dalam menggunakan Window Manager yang sekaligus merupakan Window Manager pertama yang saya gunakan sehari-hari.
Berdasarkan daftar log video pada bandithijo.com/vlog, saya menggunakan i3wm pada 30 Oktober 2017.
Saya merasa perlu untuk membuat catatan mengenai apa saja yang sudah saya manfaatkan dan pergunakan dengan i3wm. Mungkin dari catatan ini, teman-teman yang membaca mendapatkan informasi yang subjektif dari sudut pandang saya sebagai pengguna. Jujur saja, saya pun sangat menyukai tulisan-tulisan yang mengulas tentang suatu teknologi dari sudut pandang pengguna.
Window Manager
Buat temen-temen yang belum mengetahui apa itu Window Manager. Window Manager adalah bagian dari Desktop Environment.
Saya akan coba jelaskan dengan menggunakan tabel, insya Allah dapat langsung dipahami dengan mudah.
GNOME2 | Metacity |
GNOME3 | Mutter |
KDE Plasma | KWin |
Cinnamon | Muffin |
Pantheon | Gala |
Deepin | Deepin-Mutter |
XFCE | xfwm4 |
LXDE | Openbox |
dst… | dst… |
Seperti yang saya sebutkan di awal, Window Manager ini adalah komponen, maka beberapa dari Desktop Environment tersebut ada yang mengijinkan user untuk mengganti Window Manager default yang sudah disertakan bersama Desktop Environment. Asik bukan?
Terdapat banyak sekali Window Manager yang dapat kita gunakan, tanpa harus menggunakan Desktop Environment.
Tipe-tipe Window Manager
Window Manager secara umum, terbagi dalam 3 tipe.
- Stacking, atau Floating adalah Window Manager yang seperti Desktop Environment gunakan, yaitu dengan Window yang melayang dan dapat bertumpuk-tumpuk.
- Tiling, adalah Window Manager yang tidak menumpuk Window antara satu dengan yang lain, dan tersusun kotak-kotak seperti lantai (tile).
- Dynamic, adalah Window Manager yang dapat berganti-ganti diantara kedua tipe di atas menyesuaikan dengan kebutuhan user.
Tabel Window Manager
Berikut ini adalah tabel dari Window Manager yang akan memberikan gambaran bahwa GNU/Linux tidak hanya GNOME dan KDE.
1 | 2bwm | Bspwm | awesome |
2 | aewm | EXWM | catwm |
3 | AfterStep | Herbstluftwm | dwm |
4 | BlackBox | howm | echinus |
5 | Compiz | i3 | FrankenWM |
6 | cwm | Ion3 | spectrwm |
7 | eggwm | Notion | Qtile |
8 | Enlightenment | Ratpoison | wmii |
9 | evilwm | Stumpwm | xmonad |
10 | Fluxbox | subtle | |
11 | Flwm | sway | |
12 | FVWM | way-cooler | |
13 | Gala | WMFS | |
14 | Goomwwm | WMFS2 | |
15 | IceWM | ||
16 | jbwm | ||
17 | JWM | ||
18 | Karmen | ||
19 | KWin | ||
20 | lwm | ||
21 | Marco | ||
22 | Metacity | ||
23 | Muffin | ||
24 | Mutter | ||
25 | MWM | ||
26 | Openbox | ||
27 | pawm | ||
28 | PekWM | ||
29 | Sawfish | ||
30 | TinyWM | ||
31 | twm | ||
32 | UWM | ||
33 | Wind | ||
34 | WindowLab | ||
35 | Window Maker | ||
36 | WM2 | ||
37 | Xfwm |
Untuk detail dari masing-masing Window Manager tersebut dapat teman-teman lihat pada Arch Wiki, di sini.
Ada begitu banyak Window Manager, bukan?
i3wm, yang saya gunakan termasuk ke dalam jajaran Tiling Window Manager. Meskipun sebenarnya i3wm juga dapat berganti-ganti layout menjadi tiling, stacking, tabbed, bahkan scratchpad. i3wm juga termasuk dalam tree based Window Manager.
Jadi, mengapa saya menggunakan Window Manager?
Berdasarkan data-data di atas,
- Saya ingin mencoba mengenal hal yang baru, selain Desktop Environment. Window Manager adalah dunia berbeda yang ternyata sangat luas sekali. Meskipun tidak mungkin saya cicipi semuanya.
- Banyak fitur-fitur yang terdapat di dalam Desktop Environment yang sebenarnya tidak saya perlukan.
- Kebebasan memilih komponen-komponen aplikasi pendukung sistem operasi yang menurut saya lebih baik dari aplikasi pendukung bawaan Desktop Environment.
i3 Window Manager
Pertemuan dengan dwm
Berawal dari melihat video-video YouTube dari Kai Hendry channel. Saya memperhatikan bagaimana ia menggunakan dwm Window Manager. Pengalaman yang baru pertama kali saya dapati.
Saat itu, kira-kira inilah yang saya ada dibenak saya.
- Bagaimana bisa ia terlihat sangat mudah dan nyaman berpindah antar satu Workspace ke Workspace menggunakan keyboard shortcut?
- Bagaimana bisa ia begitu terlihat nyaman melakukan window resize hanya dengan menggunakan keyboard shortcut?
- Bagaimana bisa ia tidak direpotkan dengan menyusun Window yang sedang terbuka dalam satu Workspace?
- Bagaimana bisa window yang terbuka itu tidak saling bertumpuk satu dengan yang lain?
Saya pun mencoba memasang dwm, namun karena belum pernah sama sekali mengerti hal-hal apa saja yang saya perlukan dan saya butuhkan dalam menggunakan Window Manager, saya pun kebingungan memilih patch apa yang hendak saya pergunakan. Lantas, saya pun menyerah pada dwm.
Mencoba Memahami i3wm
Kemudian mengingat-ingat kembali, kalau distribusi Manjaro, beberapa kali selalu memberikan info terbaru seputar Manjaro i3 edition pada blog mereka. Kemudian, saya pun mencoba mencari referensi di YouTube mengenai i3wm.
Setelah beberapa kali melihat video ulasan i3wm dari beberapa user, saya pun memutuskan untuk mempelajarinya terlebih dahulu. Kebetulan terdapat video yang memberikan informasi dasar bagaimana cara menggunakan i3wm.
Menurut saya video ini sangat bagus sekali sebagai pondasi awal mengenal i3wm. Video di atas juga termasuk dalam jajaran video yang direkomendasikan oleh website i3wm.org, di sini.
Saya sarankan untuk dapat mempelajari video-video lain yang direkomendasikan oleh i3wm.org.
Sebenarnya, istilah Tiling window manager, bukan pertama kali saya dengar. Saya pernah mendengar dari percakapan beberapa teman-teman di group Telegram BGLI (Belajar GNU/Linux Indonesia). Kang Sucipto pun sudah pernah menawarkan untuk menggunakan i3wm, namun saat itu saya belum memahami apa kelebihannya dan keuntungan menggunakan Tiling window manager.
Mengapa i3 Window Manager?
Saya akan coba merangkum dengan beberapa point, mengapa saya akhirnya memutuskan untuk mantap menggunakan i3wm dan tidak pernah kembali menggunakan Desktop Environment seperti GNOME dan XFCE.
Konfigurasi Menggunakan Plain Text
Untuk yang sudah pernah menggunakan Vim dan Tmux, pasti sudah familiar dengan file konfigurasi yang berbentuk plain text. Cukup menambahkan option-option di dalam file ini, maka program akan mengalami perubahan seperti yang kita isikan di dalam file konfigurasi. Contoh lain aplikasi yang menggunakan file konfigurasi berupa plain text, seperti: URxvt, Termite, Ranger, mpv, mpd, ncmpcpp, irssi, neomutt, newsboat, dunst, compton, cmus, dll.
Ada pula file konfigurasi yang bukan merupakan plain text, namun berupa file header (salah satu contohnya), seperti yang digunakan oleh dwm window manager dan st terminal yang menggunakan bahasa pemrograman C. Sehingga, untuk mendapatkan hasil perubahan yang sudah kita lakukan, kita perlu meng-compile kembali program tersebut. Mantap kan?
Inilah alasan, mengapa saya katakan file konfigurasi yang menggunakan plain text seperti yang digunakan oleh i3wm termasuk mudah digunakan.
i3wm dapat membaca file konfigurasi yang terdapat pada:
~/.i3/config
atau~/.config/i3/config
Namun, untuk alasan kerapian struktur direktori, saya lebih senang mengumpulkan semua file konfigurasi pada direktori ~/.config/
.
Keyboard Shortcut adalah Segalanya
Untuk menggunakan i3wm, sebenarnya tidak juga keyboard sentris, dapat pula menggunakan mouse, namun, saya memang sengaja memaksakan diri saya untuk mencoba workflow yang baru. Ternyata, memang sangat luar biasa mengoperasikan Window Manager tanpa perlu menggunakan mouse.
Kalau teman-teman yang sudah menggunakan Vim sebagai text editor pasti akan memahami bagaimana kemudahan yang didapat setelah mengoperasikan text editor tanpa menggunakan mouse. Ya, itu lah yang akan teman-teman dapatkan pula saat menggunakan i3wm.
Saya akan menunjukkan apa saja yang dapat dilakukan dengan menggunakan keyboard untuk mengoperasikan i3wm dengan sambil menunjukkan blok-blok kode konfigurasi yang ada di dalam file konfigurasi i3wm saya, ~/.config/i3/config
.
Menentukan Modifier Key
Pertama kali kita harus menentukan modifier key, seperti leader key dalam Vim, atau Prefix dalam Tmux.
Bisanya tawarannya antara dua, tombl SUPER atau tombol ALT.
Saya memilih menggunakan tombol SUPER untuk meminimalisir bentrokan dengan keyboard shortcut aplikasi GUI yang rata-rata banyak menggunakan tombol ALT.
1
set $mod Mod4
Saya menggunakan $mod
berupa Mod4
yang merupakan tombol SUPER. Sebagaian user i3, adapula yang menggunakan ALT, namun sangat jarang saya temui.
Memanggil Terminal
Untuk memanggil Terminal yang kita gunakan, dalam kasus ini saya menggunakan st terminal dari Suckless project.
1
2
3
4
5
# ...
# ...
# Start a Terminal
bindsym $mod+Return exec --no-startup-id st
Dapat dilihat pada kode di atas bahwa, saya menggunakan SUPER+ENTER untuk memanggil st
yang merupakan nama program dari st terminal.
Teman-teman dapat mengganti st dengan terminal favorit kalian. Seperti gnome-terminal, xfce4-terminal, urxvt, termite, dll.
Pemanggil Aplikasi
Application launcher, pemanggil aplikasi. Kalau di GNOME saya biasa menggunakan tombol SUPER untuk memanggil application launcher, nah pada i3wm, kita bebas untuk menggunakan aplikasi yang berfungsi sebagai application launcher dan bebas pula ingin kita letakkan pada keyboard shortcut yang mana.
1
2
3
4
5
# ...
# ...
# Start Rofi (a program launcher)
bindsym $mod+d exec --no-startup-id j4-dmenu-desktop --dmenu='rofi -dmenu -lines 6 -width 400 -i -sort -p RUN'
Pada contoh di atas, saya menggunakan aplikasi Rofi sebagai application launcher yang saya letakkan pada SUPER+D.
Sebenarnya saya memanfaatkan dmenu sebagai backend yang berfungsi me-list semua aplikasi saya, kemudian Rofi yang bertugas memberikan tampilan seperti di atas.
Jadi, menggunakan dmenu saja, sebenarnya juga bisa.
Sebelumnya, saya menggunakan paket dmenu
, namun terasa ada delay yang sangat mengganggu. Kemudian, setelah mencari informasi, saya memutuskan untuk menggunakan paket j4-dmenu-desktop
(AUR) karena terasa lebih cepat saat dikombinasikan dengan Rofi.
Konfigurasi Font
Untuk mengatur font pada i3wm, biasaya font akan terlihat pada Title Bar yang ada pada Window Container.
1
2
3
4
5
6
# ...
# ...
# Font for Window Titles. Will also be used by the bar unless a different font
# is used in the bar {} block below.
font pango:Fantasque Sans Mono 10
10
, adalah size dari font.
Window Container
Pada i3wm, Window akan saya sebut sebagai Container. Ya, sesuai dengan penamaannya “kontainer” yang berarti tidak hanya dapat menampung 1 buah Window, namun dapat menampung banyak Window dalam 1 Container. Sehingga akan lebih cocok kalau disebut sebagai Container.
Berpindah Focus Container
Untuk berpindah-pindah fokus antara satu Container ke Container yang lain, saya menggunakan:
1
2
3
4
5
6
7
8
# ...
# ...
# Change Focus
bindsym $mod+h focus left
bindsym $mod+j focus down
bindsym $mod+k focus up
bindsym $mod+l focus right
SUPER+H | Pindah fokus ke kiri |
SUPER+J | Pindah fokus ke bawah |
SUPER+K | Pindah fokus ke atas |
SUPER+L | Pindah fokus ke kanan |
Bagaimana, apakah terlihat familiar dengan navigasi tersebut?
Seperti Vim bukan?
Saya memang sengaja membuatnya agar terasa seperti Vim, untuk memudahkan dalam mengingat.
Secara default, seingat saya kombinasinya tidak menggunakan H, J, K, L, melainkan menggunakan J, K, L, ;.
Alternatifnya selain menggunakan tombol huruf, saya juga mengaturnya pada tombol arrow.
1
2
3
4
5
6
7
8
# ...
# ...
# Alternatively, you Can Use the Arrow Keys
bindsym $mod+Left focus left
bindsym $mod+Down focus down
bindsym $mod+Up focus up
bindsym $mod+Right focus right
Memindahkan Focus Container
Memindahkan di sini dapat kita gunakan untuk memindahkan (menukar) Container pada tiling layout dari kanan ke kiri, viceversa. Dapat pula digunakan untuk menggerakan Container pada floating layout.
1
2
3
4
5
6
7
8
# ...
# ...
# Move Focused Window
bindsym $mod+Shift+h move left 1px
bindsym $mod+Shift+j move down 1px
bindsym $mod+Shift+k move up 1px
bindsym $mod+Shift+l move right 1px
Saya menggunakan SUPER+SHIFT+HJKL.
Pada kode di atas, saya menggunakan kombinasi keyboard shortcut tersebut untuk menggerakkan Container sebesar 1 px apabila pada floating layout. Namun, pada tiling layout, tetap seperti fungsi asal, yaitu memindahkan (menukar) Container dari kiri kanan, atas bawah, viceversa.
Saya juga membuatkan alternatif untuk bergerak atau berpindah sebesar 20 px agar lebih cepat.
1
2
3
4
5
6
7
8
# ...
# ...
# Alternatively, You Can Use the Arrow Keys
bindsym $mod+Shift+Left move left 20px
bindsym $mod+Shift+Down move down 20px
bindsym $mod+Shift+Up move up 20px
bindsym $mod+Shift+Right move right 20px
Mengganti Orientasi Container
Pada i3wm, kita dapat mengganti-ganti orientasi dari Container yang sedang terbuka. Misalkan terdapat 2 buah Container kanan dan kiri, hanya dengan menekan kombinasi keyboard kita dapat membuat menjadi atas dan bawah.
Kira-kira seperti ini ilustrasinya,
# 2 Container, dengan Vertical orientation
+-----+-----+
| | |
| 1 | 2 |
| | |
+-----+-----+
# 2 Container, dengan Horizontal orientation
+-----+-----+
| 1 |
+-----------+
| 2 |
+-----+-----+
Untuk dapat melakukan ini, saya menggunakan,
1
2
3
4
5
6
7
8
# ...
# ...
# Split in Horizontal Orientation
bindsym $mod+b split h
# Split in Vertical Orientation
bindsym $mod+v split v
SUPER+B | Horizontal orientation |
SUPER+V | Vertical orientation |
Hal ini, hanya dapat dilakukan pada tiling layout atau bisa juga kita sebut dengan split layout.
Kita dapat mengatur default orientation saat menggunakan Tiling layout, apakah ingin Vertical atau Horizontal.
1
2
3
4
5
6
7
8
9
# ...
# ...
# Orientation for New Workspaces
# New workspaces get a reasonable default orientation: Wide-screen monitors
# (anything wider than high) get horizontal orientation, rotated monitors
# (anything higher than wide) get vertical orientation.
# Syntax: default_orientation horizontal|vertical|auto
default_orientation horizontal
Membuat Fullscreen Container
Terkadang kita memerlukan untuk membuat sebuah Window menjadi fullscreen karena alasan tertentu. Tentu saja i3wm juga mempunyai fitur ini.
1
2
3
4
5
# ...
# ...
# Enter Fullscreen Mode for the Focused Container
bindsym $mod+f fullscreen toggle
Saya menggunakan SUPER+F. Untuk membuat Container yang sedang difokuskan menjadi fullscreen.
Perhatikan, terdapat option toggle
yang menandakan keyboard shortcut ini berfungsi selayaknya switch yang dapat kita ON dan OFF kan.
# Tiling layout yang terfokus pada Container 1
+-----+-----+
| | |
| [1] | 2 |
| | |
+-----+-----+
# Setelah menekan keyboard shortcut untuk fullscreen pada Container 1
+-----------+
| |
| 1 |
| |
+-----------+
# Viceversa, pada Container 2
Menggati Layout Container
Pada pembahasa di atas, saya beberapa kali menyebutkan tentang tiling layout. i3wm mempunyai 3 macam layout (sepertinya, kalau scratchpad tidak dihitung sebagai layout), yaitu:
- Tiling layout atau Split layout
- Tabbed layout
- Stacking layout
Tiling atau Split layout ini, sebagaimana sudah dicontohkan pada tulisan-tulisan di atas.
# Tiling atau Split layout
+-----+-----+ +----------+ +-----+-----+ +-----+-----+
| | | | 1 | | | 2 | | 1 | 2 |
| 1 | 2 | +----------+ + 1 +-----+ |-----+-----+
| | | | 2 | | | 3 | | 4 | 3 |
+-----+-----+ +----------+ +-----+-----+ +-----+-----+
Tabbed layout ini bayangkan seperti sedang menggunakan Browser memiliki Tab.
# Tabbed layout
+-[1]-+--2--+ +--1--+-[2]-+
| | | |
| 1 | | 2 |
| | | |
+-----------+ +-----------+
Stacking layout pada i3wm ini tidak seperti stacking pada Desktop Environment dengan Window yang melayang. Stacking layout pada i3wm tetap dengan Container yang memenuhi seluruh layar (maximize).
# Stacking layout
+----[1]----+ +-----1-----+
+-----2-----+ +----[2]----+
| | | |
| 1 | | 2 |
| | | |
+-----------+ +-----------+
Kalau masih bingung, saya ambilkan gambar dari i3wm.org.
Kita dapat mengatur default layout yang akan kita gunakan pada setiap Workspace.
1
2
3
4
5
6
7
# ...
# ...
# Layout Mode for New Containers
# This option determines in which mode new containers on workspace level will start
# Syntax: workspace_layout default|stacking|tabbed
workspace_layout default
Saya menggunakan default, yang berarti Tiling atau Split layout.
Membuat Floating Container
Tidak semua Window harus dalam keadaan maximize. Contohnya seperti: dialog notifikasi window, popup window, open dan save dialog window, password dialog window, dll. i3wm secara cerdas dapat mengenali dialog-dialog seperti ini. Sehingga kita tidak perlu mengkonfigurasi lagi.
Lantas, bagaimana apabila kita ingin membuat Container kita menjadi floating?
Sangat mudah, saya menggunakan SUPER+SHIFT+SPACE.
1
2
3
4
5
# ...
# ...
# Toggle Tiling / Floating
bindsym $mod+Shift+space floating toggle border none
Lagi-lagi saya beritahukan bahwa keyboard shortcut ini saya set menjadi toggle
, sehingga dapat digunakan untuk mengaktif dan disablekan floating pada Container.
# Container 1 dan Container 2 dalam Tiling/Split layout
+-------+-------+
| | |
| | |
| [1] | 2 |
| | |
| | |
+-------+-------+
# Container 1 saya buat menjadi Floating
+---------------+
| 2 |
| +-------+ |
| | [1] | |
| +-------+ |
| |
+---------------+
Untuk berpindah focus antar Cotainer floating dengan yang tidak, dapat menggunakan SUPER+SPACE.
1
2
3
4
5
# ...
# ...
# Change Focus Between Tiling / Floating Windows
bindsym $mod+space focus mode_toggle
Ilustrasinya seperti ini.
# Fokus pada Container 1 yang sedang dalam bentuk floating
+---------------+
| 2 |
| +-------+ |
| | [1] | |
| +-------+ |
| |
+---------------+
# Fokus pada Container 2 yang sedang dalam bentuk Tiling
+---------------+
| [2] |
| +-------+ |
| | 1 | |
| +-------+ |
| |
+---------------+
Parent dan Child Container
Saya sudah menyebutkan pada tulisan di atas, bahwa i3wm merupakan tree based window manager. Kita dapat mengasumsikan Container seperti sebuah ranting dan daun.
# Container 1 dan 2, pada Tiling layout di Workspace 1
+-------------+
+-----+-----+ | WORKSPACE 1 |
| | | +-------------+
| 1 | 2 | => / \
| | | / \
+-----+-----+ +-----+ +-----+
| 1 | | 2 |
+-----+ +-----+
# Saya merubah orientasi pada Container 2 menjadi split Vertical (terbagi atas bawah)
# dengan menggunakan SUPER+V pada Container 2,
# kemudian buka Container 3
+-------------+
| WORKSPACE 1 |
+-------------+
/ \
+-----+-----+ / \
| | 2 | +-----+ +---------+
| 1 +-----+ => | 1 | | SPLIT V |
| | 3 | +-----+ +---------+
+-----+-----+ / \
/ \
+-----+ +-----+
| 2 | | 3 |
+-----+ +-----+
Seperti pohon faktorial yaa?
Tidak ada batasan sampai berapa cabang ranting dan daun yang ingin kalian buat.
Split Vertical berarti di dalam satu Container akan dibagi kedalam 2 ruang, atas dan bawah. Begitu pula untuk Split Horizontal, berarti Container akan dibagi menjadi 2 ruang, kanan dan kiri.
Nah, yang dimaksud dengan PARENT di sini adalah ranting sedangkan CHILD adalah daun.
Sehingga, apabila kita ingin melakukan focus terhadap Container 2 dan 3, ibarat ranting yang memiliki 2 daun, daun Container 2 dan 3. Ini disebut Focus Parent.
1
2
3
4
5
# ...
# ...
# Focus the Parent Container
bindsym $mod+a focus parent
Sebaliknya, untuk focus kepada Container 1, atau Container 2 saja, atau 3 saja, ibarat daun pada ujung ranting. Kita sebut dengan Focus Child.
1
2
3
4
5
# ...
# ...
# Focus the Child Container
bindsym $mod+Shift+a focus child
Pembahasan mengenai layout ini sangat kompleks dan seru sekali. Sepertinya, tidak sanggup kalau harus menuliskan semuanya. Mungkin kapan-kapan akan saya buatkan video ulasannya saja.
Memanfaatkan Scratchpad
Pada i3wm, kita tidak mengenal minimize. Dan memang tidak diperlukan fitur ini.
Untuk apa kita memerlukan fitur minimize kalau kita memiliki 10 Workspaces?
Lantas, apabila kita sedang membuka Text Editor pada Workspace 1, lalu ingin menggunakan Browser, tidak diperlukan me-minimize text editor, cukup jalankan Browser pada Workspace selanjutnya.
Apakah ada diantara teman-teman yang berpikiran menggunakan banyak Workspace akan memberatkan memory (RAM)?
Oh, come on geys… Ini Window Manager, bukan Browser. Manfaatkan fitur Workspace semaksimal mungkin untuk memanajemen window kalian. Memanfaatkan banyak Workspace sama sekali tidak ada hubungan langsung dengan memberatkan memory.
Nah, lantas, akan ada kasus dimana kita ingin memanggil aplikasi bantuan saat sedang fokus pada aplikasi utama.
Contohnya:
-
Sedang membaca ebook dengan Evince. Kemudian menemukan kata yang belum diketahui artinya, lantas kita ingin membuka gKamus.
-
Sedang melakukan pemilihan warna untuk CSS code kita, lantas kita memerlukan apliaksi GColor3 untuk mengambil sampel warna.
Dari kedua kasus di atas, apakah kita langsung mengeluarkan atau memindahkan aplikasi pembantu (gKamus dan GColor3) ke tempat lain?
Akan sangat repot untuk memanggilnya kembali karena kita tidak ingin berpindah Workspace karena alasan tertentu.
Solusi dari masalah di atas adalah dengan memanfaatkan Scratchpad.
Scratchpad ini ibarat seperti buku coretan, kita dapat panggil dan sembunyikan sesuai kemauan kita.
Untuk menginisialisasi Container menjadi sebuah Scratchpad, saya menggunakan SUPER+SHIFT+-.
1
2
3
4
5
# ...
# ...
# Make the Currently Focused Window a Scratchpad
bindsym $mod+Shift+minus move scratchpad
Lalu untuk memanggil dan menyembunyikannya, saya mengguakan SUPER+-.
1
2
3
4
5
# ...
# ...
# Show the First Scratchpad Window
bindsym $mod+minus scratchpad show
Membuat Sticky Container
Secara sederhana fitur ini mirip dengan Always on Top pada Window yang dimiliki oleh Desktop Environment.
Saya biasa menggunakan fitur ini saat melakukan screencasting dengan menampilkan output dari kamera WebCam agar tetap dapat dilihat saat berpindah-pindah antar Workspace.
1
2
3
4
5
6
# ...
# ...
# Sticky Floating Windows
# Syntax: sticky enable|disable|toggle
bindsym $mod+Shift+plus sticky toggle
Membuat Default Floating Container
Pasti akan ada beberapa aplikasi yang memiliki Window yang kecil, namun pada i3wm akan dijalankan secara maximize, dan kita harus melakukan floating terhadap aplikasi tersebut secara manual. Beberapa contoh dari aplikasi tersebut adalah GKamus, GColor3, Gnome Power Statistics, Pavucontrol, Arandr, Blueman Manager, dll.
Untuk menginisialisasi agar aplikasi-aplikasi tersebut saat dijalankan sudah berada pada kondisi floating container, kita dapat mengaturnya pada file konfigurasi. Asik bukan?
Saya akan mencontohkan beberapa bentuk variasi konfigurasi yang saya pergunakan.
1
2
3
4
5
6
7
8
9
10
11
12
# ...
# ...
# Enable Floating Mode for Specific Programs
for_window [class="Gkamus"] floating enable border normal 1
for_window [class="Gnome-power-statistics"] floating enable border normal 1
for_window [class="Modem-manager-gui"] floating enable border normal 1
for_window [class="Gnome-system-monitor"] floating enable border normal 1
for_window [class="Nm-connection-editor"] floating enable border normal 1
for_window [class="zoom" title="Zoom - Free Account"] floating enable border pixel 1 move right 470px,move down 0px
for_window [class="st-256color" title="ncpamixer"] floating enable border normal 1 resize set 500 600,move right 90px,move up 80px
for_window [class="scrcpy" title="Mi-4c"] floating enable border none move right 460px,move down 0px
Sebaliknya pula, kita dapat membuat aplikasi yang secara default berjalan floating menjadi tidak.
1
2
3
4
5
# ...
# ...
# Disable Floating Mode for Specific Programs
for_window [class="pavucontrol-qt"] floating disable
Meskipun sangat jarang saya temui aplikasi yang sejak awal sudah berada pada floating container, namun saya rasa perlu juga untuk memiliki konfigurasi ini apabila sewaktu-waktu diperlukan pada kasus yang lain.
Menutup/mengakhiri Window Container
Di dalam sebuah Window, dapat berupa apa saja. Aplikasi, program, dialog, terminal, pokoknya apa saja yang ada di dalam Window, kita dapat mengakhirinya dengan SUPER+SHIFT+Q.
1
2
3
4
5
# ...
# ...
# Kill Focused Window
bindsym $mod+Shift+q kill
Hal ini diperlukan mengingat i3wm tidak menyediakan tombol close atau menu exit pada title bar. Tentu saja hal ini malah membuat proses menutup/mengakhiri sebuah window menjadi lebih praktis tanpa perlu menggerakkan mouse ke arah menu atau tombol close pada title bar.
Mengganti Window Container Border Color
Kita dapat mengganti warna dari Window Container border.
Dimulai dari mendefinisikan variabel dan mengisikan warnanya.
1
2
3
4
5
6
7
8
9
10
11
12
# ...
# ...
# Define Color Variables
set $bg-color #B58900
set $text-color #002B36
set $border-color #B58900
set $inactive-bg-color #264A53
set $inactive-text-color #657B83
set $urgent-bg-color #CB4B16
set $urgent-text-color #FFFFFF
set $indicator #FFAF00
Setelah itu baru masukkan variabel-variabel tersebut dengan fungsinya.
1
2
3
4
5
6
7
8
9
10
# Define Color Variables
# ...
# ...
# Window Colors
# Opetion Name # Border # Background # Text # Indicator
client.focused $bg-color $bg-color $text-color $indicator
client.unfocused $inactive-bg-color $inactive-bg-color $inactive-text-color $indicator
client.focused_inactive $inactive-bg-color $inactive-bg-color $inactive-text-color $indicator
client.urgent $urgent-bg-color $urgent-bg-color $urgent-text-color $indicator
Hasilnya akan seperti ini.
Menentukan Container Border
Kita dapat menentukan apakah aplikasi yang kita panggil, akan memiliki border seperti apa. Atau tidak memiliki border sama sekali.
1
2
3
4
5
6
# ...
# ...
# Window Container Border Settings
# syntax: new_window normal|none|pixel
new_window none
Dapat pula kita atur, apakah floating container secara default memiliki border atau tidak.
1
2
3
4
5
# ...
# ...
# Syntax: new_float normal|none|pixel
new_float normal 1
Terdapat 3 option yang dapat kita gunakan.
normal |
Border + Title Bar |
pixel |
Border saja |
none |
Tanpa Border |
Untuk option normal
dan pixel
, kita dapat menambahkan value dari ketebalan border seperti 0
, 1
, atau 2
.
Kita juga dapat memanipulasi Window Container Border secara langsung menggunakan keyboard shortcut.
1
2
3
4
5
6
7
8
# ...
# ...
# For Direct Border Changing with Keyboard Shortcut
bindsym $mod+Shift+t border normal 0
bindsym $mod+t border normal 1
bindsym $mod+Shift+y border pixel 1
bindsym $mod+y border none
Hasilnya akan seperti ini,
Border Normal 0, menggunakan SUPER+SHIFT+T
Border Normal 1, menggunakan SUPER+T
Border Pixel 1, menggunakan SUPER+SHIFT+Y
Border None, menggunakan SUPER+Y
Menentukan Container Border Aplikasi Tertentu
Seperti halnya floating container, kita dapat juga menentukan contianer border pada aplikasi yang kita inginkan.
1
2
3
4
5
# ...
# ...
# Enable Specific Window Border
for_window [class="Wine"] border normal 1
Contohnya, seperti di atas. Kalian dapat menambahkan sendiri. Hampir sama seperti floating container, hanya berbeda pada parameter border di bagian buntutnya saja.
Atau, dapat pula sekalian ditambahkan pengaturan border pada saat menentukan floating container, seperti contoh di sini.
Merubah Title Container
Kita dapat pula merubah-rubah alignment dari Title yang ada pada Title Bar.
1
2
3
4
5
6
7
8
# ...
# ...
# Window Title Alignment
# This option determines the window title’s text alignment.
# Default is left
# Syntax: title_align left|center|right
title_align left
Selain itu, dapat pula merubah format dari tulisan yang ada di Title bar.
1
2
3
4
5
# ...
# ...
# For Adding Space and [] Character on Window Title
for_window [class="^.*"] title_format " > %title"
Membuka Container Kosong
Untuk alasan tertentu, mungkin kita ingin membuka Container kosong. Misalkan seperti yang biasa saya lakukan, untuk sekedar melihat Conky yang ada pada desktop. Atau untuk sekedar gaya-gaya saja saat mengambil screenshot.
Saya menggunakan SUPER+O.
1
2
3
4
5
# ...
# ...
# Open the Blank Space "i3 open" or "i3-msg open"
bindsym $mod+o open
Workspaces
Secara default pada file konfigurasi i3wm sudah menyediakan 10 Workspaces.
Kita dapat mendifinisikan Workspace dengan cara seperti ini.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# ...
# ...
# Define Workspace
set $workspace1 "1"
set $workspace2 "2"
set $workspace3 "3"
set $workspace4 "4"
set $workspace5 "5"
set $workspace6 "6"
set $workspace7 "7"
set $workspace8 "8"
set $workspace9 "9"
set $workspace10 "10"
Berpindah antar Workspaces
Setelah kita mendifinisikan Workspace, kita berikan pengaturan keyboard shortcut untuk dapat berpindah antar Workspace dengan mudah.
Saya meletakkan keyboard shortcut untuk berpindah antar Workspace pada SUPER+1 sampai 0.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# ...
# ...
# Switch to Workspace
bindsym $mod+1 workspace $workspace1
bindsym $mod+2 workspace $workspace2
bindsym $mod+3 workspace $workspace3
bindsym $mod+4 workspace $workspace4
bindsym $mod+5 workspace $workspace5
bindsym $mod+6 workspace $workspace6
bindsym $mod+7 workspace $workspace7
bindsym $mod+8 workspace $workspace8
bindsym $mod+9 workspace $workspace9
bindsym $mod+0 workspace $workspace10
Memindahkan Container ke Workspace Lain
Kemudian, Apabila diperlukan, kita juga dapat memindahkan Container dari satu Workspace ke Workspace yang lain.
Untuk melakukan hal ini, saya meletakkan keyboard shortcut pada SUPER+SHIFT+1 sampai 0.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# ...
# ...
# Move Focused Container to Workspace
bindsym $mod+Shift+1 move container to workspace $workspace1
bindsym $mod+Shift+2 move container to workspace $workspace2
bindsym $mod+Shift+3 move container to workspace $workspace3
bindsym $mod+Shift+4 move container to workspace $workspace4
bindsym $mod+Shift+5 move container to workspace $workspace5
bindsym $mod+Shift+6 move container to workspace $workspace6
bindsym $mod+Shift+7 move container to workspace $workspace7
bindsym $mod+Shift+8 move container to workspace $workspace8
bindsym $mod+Shift+9 move container to workspace $workspace9
bindsym $mod+Shift+0 move container to workspace $workspace10
Menurut saya ini adalah kombinasi keyboard shortcut paling natural untuk berpindah-pindah antar Workspace. Sangat praktis namun taktis. Taktis dalam hal seperti ini contoh kasusnya.
- Saya sedang mengerjakan tulisan untuk Blog. Vim+Tmux saya buka pada Workspace 1.
- Kemudian sambil melihat hasilnya pada Browser yang saya buka pada Workspace 2.
- Untuk urusan editing file-file gambar, saya mengerjakannya pada Workspace 3 yang berisi File Manager sambil terkadang membuka Inkscape dan GIMP di workspace ini juga.
- Workspace 4,5,6 jarang sekali saya pergunakan karena letaknya yang agak di posisi tengah, sehingga agak menyulitkan jari-jemari saya untuk menjangkaunya tanpa perlu mengangkat telapak tangan.
- Terkadang saya sambil mengecek Email Client yang saya buka pada Workspace 7.
- Kalau bosan menulis, biasanya saya mencari bahan bacaan pada daftar blog/website langganan saya, melalui RSS feed reader yang saya letakkan pada Workspace 8.
- Sembari kadang-kadang mengecek apakah terdapat kawan-kawan sesama pengguna GNU/Linux yang memerlukan bantuan di group Telegram, aplikasi Telegram biasanya saya letakkan pada Workspace 9.
- Aktifitas yang memerlukan Terminal, biasanya saya buka pada Workspace 10.
Kira-kira seperti di atas ini sebagian sekenario yang sering saya lakukan. Tidak selalu sama, tergantung dari aktivitas yang sedang saya kerjakan.
Kita dapat membuat aplikasi yang kita ingin jalankan, secara default terbuka pada Workspace tertentu. Misalkan, kita selalu menggunakan browser pada Workspace 2, IRC client pada Workspace 6, email client pada Workspace 7, RSS feed reader pada Workspace 8, Telegram pada Workspace 9, dll.
1
2
3
4
5
6
7
8
9
# ...
# ...
# Assign Startup Application to Specific Workspace
assign [class="Firefox"] $workspace2
assign [class="st-256color" title="irssi"] $workspace6
assign [class="st-256color" title="neomutt"] $workspace7
assign [class="st-256color" title="newsboat"] $workspace8
assign [class="Telegram"] $workspace9
Untuk mendapatkan nilai class= dan nilai title=, saya menggunakan perintah xprop
yang langsung saya jalankan dari Terminal. Kemudian, tinggal klik Window Container mana yang ingin diketahui nilai class dan title nya.
Hasilnya, akan seperti ini kira-kira. (Contoh: Firefox)
_NET_WM_OPAQUE_REGION(CARDINAL) = 2, 0, 596, 2, 0, 2, 600, 498 _NET_WM_WINDOW_TYPE(ATOM) = _NET_WM_WINDOW_TYPE_NORMAL _NET_WM_SYNC_REQUEST_COUNTER(CARDINAL) = 65011721, 65011722 _NET_WM_USER_TIME_WINDOW(WINDOW): window id # 0x3e00008 WM_CLIENT_LEADER(WINDOW): window id # 0x3e00001 _NET_WM_PID(CARDINAL) = 3842 WM_LOCALE_NAME(STRING) = "en_US.UTF-8" WM_CLIENT_MACHINE(STRING) = "BanditHijo-X260" WM_NORMAL_HINTS(WM_SIZE_HINTS): program specified minimum size: 138 by 162 program specified base size: 0 by 0 window gravity: NorthWest WM_CLASS(STRING) = "python3", "Python3" WM_ICON_NAME(STRING) = "SoundConverter" _NET_WM_ICON_NAME(UTF8_STRING) = "SoundConverter" WM_NAME(STRING) = "SoundConverter" _NET_WM_NAME(UTF8_STRING) = "SoundConverter"
Perhatikan bagian yang saya marking adalah, bagian yang kita perlukan.
class= |
WM_CLASS(STRING) = |
"Python3" |
title= |
WM_NAME(STRING) = |
"SoundConverter" |
Memanfaatkan Workspace pada i3wm benar-benar sangat membantu mempermudah hampir setiap pekerjaan yang saya kerjakan di atas Window Manager ini.
Coba teman-teman bandingkan dengan keyboard shortcut yang disediakan oleh Desktop Environment untuk berpindah antar Workspace atau untuk berpindah antar focus Window.
Kira-kira, kalau sudah dapat berpindah antar Workspace dan Container dengan mudah, apakah masih diperlukan perintah seperti ALT+TAB?
Apabila memang diperlukan, saya juga menyediakan fitur ini, namun sangat jarang sekali saya pergunakan.
1
2
3
4
5
# ...
# ...
# For List All the Opened Container in Every Workspace
bindsym $mod+Tab exec --no-startup-id j4-dmenu-desktop --dmenu="rofi -show window -lines 10 -width 500 -display-window 'WORKSPACE'"
Saya menggunakan SUPER+TAB, sebagai ganti dari ALT+TAB.
Memuat Ulang Konfigurasi
Setiap kita selesai mengubah atau mengurangi beberapa konfigurasi pada file ~/.configi/i3/config
, tidak serta merta langsung dapat kita lihat hasilnya. Selayaknya aplikasi konfigurasi GUI, kita perlu menekan tombol “Apply” terlebih dahulu. Nah, pada i3wm, setelah kita menyimpan file konfigurasi, kita dapat memuat ulang (reload) konfigurasi i3wm.
Saya menggunakan keyboard shortcut, SUPER+SHIFT+C.
1
2
3
4
5
# ...
# ...
# Reload the Configuration File
bindsym $mod+Shift+c reload
Nah, apabila terjadi keanehan atau kejanggalan pada i3 wm layout, kita dapat pula memuat ulang i3wm tanpa perlu keluar dari X session. Ini dapat pula kita lakukan untuk melihat hasil perubahan konfigurasi apabila menggunakan keyboard shortcut reload
di atas tidak berdampak apa-apa.
Saya menggunakan keyboard shortcut, SUPER+SHIFT+R.
1
2
3
4
5
# ...
# ...
# Restart i3 Inplace (preserves your layout/session, can be used to upgrade i3)
bindsym $mod+Shift+r restart
Binding Mode
Ini adalah salah satu fitur dari i3wm yang saya suka, namun belum saya manfaatkan dengan maksimal.
Binding Mode, adalah fitur dimana kita dapat mengumpulkan semua fungsi keyboard shortcut yang memiliki kelas yang sama.
Maksudnya gimana sih?
Jumlah karakter yang ada di atas keyboard memang sangat banyak. Namun, tidak menutup kemungkinan apabila kita memiliki kombinasi keyboard shortcut yang banyak, kita pun akan merasa kekurangan juga.
Untuk mengatasi hal ini, kita dapat mengelompokkan fungsi-fungsi keyboard shortcut yang memiliki tujuan yang sama, dalam satu tempat, dalam hal ini disebutnya Mode. Maka dari itu dinamakan Binding Mode.
Langsung saja saya berikan contohnya.
Saya ingin membuat pengaturan keyboard shortcut untuk “Resize Window Container” baik dalam tiling layout, maupun floating container. Fitur ini sangat diperlukan mengingat terkadang kita merasa butuh melebarkan atau mengecilkan sebuah Window Container.
Fitur ini setidaknya 8 kombinasi keyboard shortcut. 4 untuk me-resize atas, bawah, kanan kiri sebesar 1 px. 4 yang lain untuk me-resize atas, bawah, kanan, kiri sebesar 1 ppt.
Saya tetap ingin menggunakan tombol HJKL, namun sudah digunakan untuk fungsi “Window Focus”.
Saya masih tetap dapat menggunakan kombinasi keyboard shortcut yang serupa, dengan membuatnya menjadi Mode yang berbeda. Saya beri nama mode Resize.
Untuk membuatnya, pertama saya perlu menginisialisasi keyboard shortcut untuk mengaktifkan mode Resize.
1
2
3
4
5
# ...
# ...
# Resize Window (you can also use the mouse for that)
bindsym $mod+r mode "resize"
Dapat dilihat, saya menggunakan SUPER+R, untuk masuk/mengaktifkan mode ini.
Setelah itu saya akan mendefinisikan fungsi dari masing-masing keyboard shortcut.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# ...
# ...
mode "resize" {
# These bindings trigger as soon as you enter the resize mode
# Pressing left will shrink the window’s width.
# Pressing right will grow the window’s width.
# Pressing up will shrink the window’s height.
# Pressing down will grow the window’s height.
bindsym h resize shrink width 1 px
bindsym j resize grow height 1 px
bindsym k resize shrink height 1 px
bindsym l resize grow width 1 px
# same bindings, but for the arrow keys
bindsym Left resize shrink width 1 px or 1 ppt
bindsym Down resize grow height 1 px or 1 ppt
bindsym Up resize shrink height 1 px or 1 ppt
bindsym Right resize grow width 1 px or 1 ppt
# back to normal: Enter or Escape
bindsym Return mode "default"
bindsym Escape mode "default"
}
Kalau kita lihat, kombinasi keyboard shortcut ini mirip dengan konfigurasi pada “Window Focus”. Ya, benar sekali. Namun bedanya, kita perlu mengaktifkan mode Resize terlebih dahulu, untuk dapat menggunakan kombinasi keyboard shortcut di atas ini.
Sehingga, walaupun memiliki kombinasi keyboard shortcut yang sama, namun berada pada mode yang berbeda.
Pada baris di bawahnya, saya menambahkan keyboard shortcut untuk keluar dari mode Resize ke mode Default.
Keren bukan?
Saya baru menggunakan untuk 1 mode ini saja.
Sekarang teman-teman pasti sudah mempunyai gambaran, berapa banyak kombinasi *keyboard shortcut8 yang dapat kita buat. Tentunya akan sangat cukup dan memenuhi kebutuhan kita.
Gaps
Perlu teman-teman ketahui, bahwa i3wm tidak menyediakan fitur gaps atau “jeda” antar Window Container pada tiling layout.
Untuk dapat memiliki fitur gaps kita memerlukan forking project yaitu i3-gaps.
Bagi yang ingin menggunakan fitur ini. Silahkan merujuk pada dokumentasi i3-gaps, pada halam Github mereka.
Saya sendiri menggunakan i3-gaps juga.
1
2
3
4
5
6
7
8
9
# ...
# ...
# gaps inner|outer
# current|all
# set|plus|minus <px>
gaps inner 0
gaps outer 0
smart_gaps on
Karena saya cepat sekali bosan, jadi saya sering berganti-ganti suasana. Terkadang ingin menggunakan gaps, kadang juga tidak.
BAR
i3wm juga sudah secara default menyediakan atau membawa Bar mereka sendiri. Bar adalah tempat untuk Workspace indicator dan Status indicator.
Secara default, i3 meletakkan di bagian bawah dari layar.
Sejak Juli 2018, saya sudah memigrasikan penggunaan i3 bar menjadi Polybar, sehingga saya tidak lagi menggunakan i3 bar milik i3wm.
1
2
3
4
5
6
# ...
# ...
# bar {
# 2018/07 - I had migrated to PolyBar (https://github.com/jaagr/polybar)
# }
Mengapa menggunakan Polybar?
Lebih fleksibel untuk membuat bar layout kita sendiri.
Mengeset Wallpaper
Saya menggunakan aplikasi bantuan bernama feh
untuk membuat desktop background saya memiliki wallpaper.
$ sudo pacman -S feh
Kemudian tambahkan konfigurasinya.
1
2
3
4
5
# ...
# ...
# Background Wallpaper
exec_always --no-startup-id feh --bg-fill -Z ~/pix/Wallpapers/Arch-Wallpaper-Solarized.png
Mengeset LockScreen
Seperti Desktop Environment, pada Window Manager, kita juga dapat mengeset lock screen.
Saya menggunakan aplikasi bantuan, di antaranya:
i3lock-color
xautolock
1
2
3
4
5
6
7
8
# ...
# ...
# i3lock lockscreen
# (lock is bash script from nandavera | i3lock-color)
# Source: https://github.com/okitavera/dotfiles/blob/master/.bin/lock
bindsym $mod+Shift+x exec --no-startup-id /usr/bin/lock-dark
exec_always --no-startup-id xautolock -time 15 -locker "/usr/bin/lock-dark" && echo mem ? /sys/power/state
Saya menggunakan SUPER+SHIFT+X untuk mengaktifkan lock screen secara manual. Saya menggunakan aplikasi bantuan yang saya rename menjadi lock-dark
yang awalnya bernama lock
buatan Nanda Okitavera yang juga menggunakan backend i3lock-color
.
Saya juga mengeset agar sistem akan mengaktifkan lock screen secara otomatis pada menit ke 15, menggunakan aplikasi xautolock
.
Atau, apabila terlalu ribet menggunakan script i3lock-color
dan lock
, bisa juga menggunakan slimlock
. Ini adalah aplikasi lock screen yang sudah disediakan oleh SLiM Display Manager.
Saya sendiri sudah tidak lagi menggunakan lightdm
sebagai Display Manager. Saat ini sedang menggunakan slim
. Karena lebih mudah untuk dikustomisasi.
Autostart Application
Untuk membuat aplikasi berjalan secara otomatis saat sistem pertama kali di jalankan, sangat mudah sekali dalam i3wm.
Cukup tambahkan pada file konfigurasi ~/.config/i3/config
baris kode seperti ini.
1
2
3
4
5
6
7
8
# ...
# ...
exec <nama_program>
exec_always <nama_program>
exec --no-startup-id <nama_program>
exec_always --no-startup-id <nama_program>
Saya akan mem-breakdown apalikasi apa saja yang saya jalankan saat sistem startup.
Power Manager
Saya menggunakan XFCE4-POWER-MANAGER.
1
2
3
4
5
# ...
# ...
# XFCE4-power-manager
exec --no-startup-id xfce4-power-manager
Saya menggunakan aplikasi ini karena mudah digunakan, secara dulunya saya adalah XFCE user.
Beberapa pemanfaatan aplikasi xfce-power-manager yang pernah saya tuliskan ada di sini.
Clipboard
Saya menggunakan Clipmenu.
1
2
3
4
5
# ...
# ...
# Clipmenu
exec --no-startup-id clipmenud
Konfigurasi ini sudah pernah saya bahas pada postingan, di sini.
Disable Touchpad
Karena saya pengguna TrackPoint pada ThinkPad, saya kurang suka menggunakan Touchpad. Saya perlu untuk menonaktifkannya sejak sistem startup.
1
2
3
4
5
# ...
# ...
# Disable TouchPad
exec_always --no-startup-id xinput --disable "SynPS/2 Synaptics TouchPad"
Saya juga perlu menjaga agar Touchpad tetap dapat melakukan “Tap to Click”.
1
2
3
4
5
# ...
# ...
# Enable Tap to Click
exec_always --no-startup-id xinput --set-prop "SynPS/2 Synaptics TouchPad" "libinput Tapping Enabled" 1
Polkit
Saya menggunakan memilih menggunakan lxpolkit
karena lebih independen dan dapat dipasang tanpa membawa dependensi lain seperti polkit yang dimiliki oleh GNOME.
1
2
3
4
5
# ...
# ...
# Polkit-lxsession
exec --no-startup-id /usr/bin/lxpolkit
Window Compositor
Saya menggunakan compton
sebagai window compositor. Secara sederhaa window compositor adalah aplikasi yang memberikan efek-efek pada Window Manager kita. Seperti shadow, blur, fade, opacity, dll.
1
2
3
4
5
# ...
# ...
# Enable Compton for compositor
exec --no-startup-id compton --config ~/.config/compton/compton.conf
Notification
Sebelumnya saya menggunakan notify-osd
, namun setelah mengenal dunst
saya malah jatuh cinta sama kesederhanannya. Sangat simpel dan tentu saja dapat dikonfigurasi menggunakan plain text.
1
2
3
4
5
# ...
# ...
# Enable Dunst Notifications
exec --no-startup-id dunst -config ~/.config/dunst/dunstrc
Conky
Window Manager masih memerlukan Compton?
Ini soal selera dan kebutuhan. Saya perlu dan butuh, jadi mengapa tidak.
1
2
3
4
5
# ...
# ...
# Start Conky
exec --no-startup-id conky -c ~/.config/conky/conkyrc
Polybar
Polybar termasuk aplikasi pengganti bar yang dapat kita gunakan. i3wm tentu saja mengijinkan usernya untuk mengganti default bar milik mereka dengan pihak ketiga, seperti: lemonbar, tint2, dzen, polybar, dll.
1
2
3
4
5
# ...
# ...
# Enable Polybar
exec_always --no-startup-id ~/.config/polybar/launch.sh
Keyboard Shortcuts
Kita juga dapat menambahkan pengaturan keyboard shortcut sendiri untuk memanggil apalikasi yang kita inginkan.
System Session
Saya menggunakan script rofi-power
untuk menampilkan dialog System Session seperti Logout, Restart, dan Shut Down.
1
2
3
4
5
# ...
# ...
# Restart, Suspend, Shutdown, Logout Dialog
bindsym $mod+Shift+End exec --no-startup-id ~/.local/bin/rofi-power "i3-msg exit"
Saya memanggil script ini dengan menggunakan SUPER+SHIFT+END
Script ini dapat teman-teman dapatkan pada dotfiles milik saya, di sini.
Clipmenu
Sebelumnya saya sudah menuliskan cara menjalankan backend service dari clipmenud
pada bagian autostart. Pada bagian ini saya akan menunjukkan pengaturan keyboard shortcut yang saya gunakan untuk memanggil Rofi yang berisi Clipboard.
1
2
3
4
5
# ...
# ...
bindsym $mod+p exec --no-startup-id clipmenu
bindsym $mod+Shift+p exec --no-startup-id rm -rf /tmp/clipmenu/*
Dapat dilihat, saya menggunakan SUPER+P untuk memanggil Rofi yang menampilkan isi dari clipboard.
Sedangkan untuk menghapus seluruh isi clipboard, saya menggunakan SUPER+SHIFT+P.
Volume Control
Sudah merupakan keharusan untuk memiliki sebuah keyboard shortcut yang dapat mengatur besar dan kecilnya volume suara.
1
2
3
4
5
6
7
8
# ...
# ...
# Pulse Audio controls
bindsym XF86AudioRaiseVolume exec --no-startup-id pamixer --increase 2
bindsym XF86AudioLowerVolume exec --no-startup-id pamixer --decrease 2
bindsym XF86AudioMute exec --no-startup-id pamixer --toggle-mute
bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute 1 toggle
Dapat dilihat, kode dari keyboard di atas sangat aneh. Itu adalah penamaan dari function keyboard. Setiap laptop biasanya memiliki function keyboard seperti ini.
Di sini saya menggunakan paket pamixer
.
Audio Mixer
Audio mixer adalah aplikasi yang saya perlukan. Sebenarnya teman-teman juga memerlukan ini dan perlu mengetahui akan hal ini.
Karena tidak jarang saya mendapati pertanyaan seputar audio pada group Telegram Belajar GNU/Linux Indonesia, yang mempersoalkan tentang audio.
1
2
3
4
5
# ...
# ...
# Pavucontrol
bindsym $mod+F3 exec --no-startup-id pavucontrol
Saya menggunakan SUPER+F3 untuk memanggil pavucontrol
karena tombol F3 pada ThinkPad saya memiliki gambar Speaker. Untuk mempermudah dalam mengingat jadi saya manfaatkan.
Namun, belakangan ini sudah sangat jarang saya menggunakan pavucontrol
, lebih sering menggunakan ncpamixer
, tapi enah mengapa, aplikasi ini tidak dapat dijalankan dengan keybinding.
Brightness Control
Kita juga memerlukan pengaturan pencahayaan pada layar agar tetap nyaman menggunakan laptop dalam waktu lama dan dapat menyesuaikan dengan kondisi cahaya dari lingkungan sekitar.
1
2
3
4
5
6
# ...
# ...
# Screen Brightness controls
bindsym XF86MonBrightnessUp exec --no-startup-id xbacklight -inc 2
bindsym XF86MonBrightnessDown exec --no-startup-id xbacklight -dec 2
Saya mendapati informasi, bahwa beberapa distribusi sistem operasi sudah tidak dapat menggunakan perintah xbacklight
.
Apabila ini terjadi pada teman-teman, mungkin bisa mencari solusinya sendiri. Karena saya belum mengalaminya. Akan sangat sulit bagi saya melakukan perbaikan apabila saya belum mengalami pada sistem saya. Hehe.
Arandr
Arandr adalah aplikasi GUI untuk Xrandr. Sederhananya aplikasi ini saya gunakan untuk mengatur monitor apabila sedang menggunakan dual monitor.
1
2
3
4
5
# ...
# ...
# Arandr
bindsym $mod+F7 exec --no-startup-id arandr
Saya menggunakan SUPER+F7.
Lagi-lagi, karena tombol F7 saya bergambar projector, maka saya letakkan kombinasi untuk memanggil Arandr pada tombol ini.
Network Manager
Saya tidak menggunakan trayicon untuk memilih network dan memanggil Network Manager Settings. Saya lebih senang tidak menggunakan trayicon agar tampilan desktop tetap clean dan tidak terlalu banyak icon yang tidak konvergen dengan theme.
Sebelumnya, saya menggunakan aplikasi nmtui
untuk melakukan konfigurasi jaringan, seperti: memilih-milih SSID. Namun, baru-baru saja saya menggunakan networkmanager_dmenu
.
Untuk memanggilnya, saya menggunakan SUPER+F8.
1
2
3
4
5
# ...
# ...
# Network Manager Dmenu
bindsym $mod+F8 exec --no-startup-id networkmanager_dmenu
Aplikasi ini dapat kita gunakan untuk memilih-mili jaringan dan beberapa menu jaringan. Dapat menggunakan dmenu
atau rofi
sebagai frontend nya. Tentu saja saya memilih menggunakan rofi
agar seragam dengan theme. Hehehe.
Instalasi
$ mkdir -p ~/.config/networkmanager-dmenu
$ git clone https://github.com/firecat53/networkmanager-dmenu.git ~/.config/networkmanager-dmenu
Konfigurasi
$ cd ~/.config/networkmanager-dmenu
$ cp config.ini.example config.ini
Edit file config.ini
untuk konfigurasi sesuai preferensi pribadi.
Contohnya seprti saya, yang ingin menggunakan Rofi sebagai user interface.
$ vim ~/.config/rofi/config.ini
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
[dmenu]
fn = Fantasque Sans Mono
dmenu_command = /usr/bin/rofi -width 25
# # Note that dmenu_command can contain arguments as well like `rofi -width 30`
# # Rofi and dmenu are set to case insensitive by default `-i`
# l = number of lines to display, defaults to number of total network options
# fn = font string
# nb = normal background (name, #RGB, or #RRGGBB)
# nf = normal foreground
# sb = selected background
# sf = selected foreground
# b = (just set to empty value and menu will appear at the bottom
# m = number of monitor to display on
# p = Custom Prompt for the networks menu
p = NETWORKS
# pinentry = Pinentry command
# rofi_highlight = <True or False> # (Default: False) use rofi highlighting instead of '**'
# # override normal foreground and background colors (dmenu) or use the
# # -password option (rofi) to obscure passphrase entry
# [dmenu_passphrase]
# nf = #222222
# nb = #222222
# rofi_obscure = True
[editor]
terminal = st
gui_if_available = True
# terminal = <name of terminal program>
# gui_if_available = <True or False>
Hasilnya, akan seperti di bawah ini.
Dotfiles
Bagi yang memerlukan contoh file konfig secara lengkap, dapat melihat pada dotfiles milik saya, di sini. (Sedang Diperbaiki)
Pesan Penulis
i3wm dapat dikatakan Window Manager yang cukup kaya fitur, ada beberapa orang yang tidak menyukai hal ini, karena dianggap terlalu bloated.
Bagi yang sudah mengenal banyak Window Manager mungkin dapat secara mandiri menanamkan fitur-fitur yang mereka perlukan, namun bagi saya yang baru pertama kali belajar menggunakan Window Manager, adanya fitur-fitur ini dapat menjadi jembatan belajar untuk mengerti apa saja fitur-fitur yang diperlukan oleh sebuah Window Manager.
Bagi teman-teman yang membutuhkan workflow yang efisien dan efektif. Saya sangat merekomendasikan untuk menggunakan i3wm.
Selama setahun terakhir, saya sudah merasakan manfaatnya. Tentu saja akan terasa sulit pada awalnya. Semua hal juga seperti itu. Jadi, paksakan dan biasakan saja, karena nikmatnya akan kamu petik tidak akan lama lagi.
Tulisan ini bukan merupakan tandingan dari dokumentasi resmi yang sudah ada. i3wm disebut sebagai Window Manager yang memiliki dokumentasi yang baik, lengkap dan up to date. Jadi, sangat saya rekomendasikan untuk berekplorasi menggunakan dokumentasi resmi.
Banyak sekali hal-hal teknis yang tidak atau belum sempat saya tuliskan. Seperti halnya aplikasi-aplikasi pendukung yang perlu dijalankan saat startup session, seperti: keyring, ssh-agent, gpg-agent, dll.
Tapi tidak mengapa. Saya yakin teman-teman dapat mencarinya sendiri pada referensi yang lain.
Sekiranya seperti ini saja.
Mudah-mudahan dapat bermanfaat bagi teman-teman.
Terima kasih.
Per-April 2019, saya sudah berpindah menggunakan BSPWM (Binary Space Partition Window Manager)
Per-April 2020, saya sudah beralih menggunakan DWM (Dynamic Window Manager)
Referensi
-
wiki.archlinux.org/index.php/Window_manager
Diakses tanggal: 2019/02/26 -
wiki.archlinux.org/index.php/Desktop_environment
Diakses tanggal: 2019/02/26 -
www.youtube.com/watch?v=j1I63wGcvU4&list=PL5ze0DjYv5DbCv9vNEzFmP6sU7ZmkGzcf
Diakses tanggal: 2019/02/26 -
i3wm.org/docs/
Diakses tanggal: 2019/02/26 -
i3wm.org/docs/userguide.html
Diakses tanggal: 2019/02/26 -
github.com/Airblader/i3
Diakses tanggal: 2019/02/26
Lisensi
Atribusi-NonKomersial-BerbagiSerupa 4.0 Internasional (CC BY-NC-SA 4.0)
Penulis
My journey kicks off from reading textbooks as a former Medical Student to digging bugs as a Software Engineer – a delightful rollercoaster of career twists. Embracing failure with the grace of a Cat avoiding water, I've seamlessly transitioned from Stethoscope to Keyboard. Armed with ability for learning and adapting faster than a Heart Beat, I'm on a mission to turn Code into a Product.
- Rizqi Nur Assyaufi