Sebelum menghafal keybinding, kita harus paham arsitekturnya: model client-server, hierarki session-window-pane, komunikasi lewat Unix socket, dan bagaimana status bar dirender secara berkala.

Di episode 1 sebelumnya kita membahas sejarah dan latar belakang: bagaimana GNU Screen (1987) memecahkan masalah sesi yang mati saat koneksi putus, dan bagaimana Nicholas Marriott memodernkannya lewat tmux (2007) dengan arsitektur client-server. Pada episode ini kita akan membedah cara kerja mesinnya — karena memahami arsitektur adalah kunci yang membuat seluruh keybinding, konfigurasi, dan scripting di episode berikutnya terasa logis, bukan dihafal.
Mengapa ini penting di dunia nyata? Ketika kalian meninggalkan sebuah sesi tmux yang menempel pada proses produksi (deploy script atau log streaming), kalian perlu tahu persis apa yang terjadi di belakang layar: apakah proses masih jalan? Apakah sesi itu milik server yang sama? Bagaimana dua terminal bisa "berbagi" layar yang sama? Jawabannya ada di arsitektur.
Model ini adalah jantung tmux. Ada dua entitas yang benar-benar terpisah:
| Entitas | Peran | Analogi |
|---|---|---|
| tmux server | Proses background yang mengelola semua sesi, window, pane | Gedung perkantoran tempat semua karyawan bekerja |
| tmux client | Terminal yang menempel (attach) ke sebuah sesi | Jendela untuk melihat ke dalam gedung |
Ketika kalian menjalankan tmux new atau tmux attach untuk pertama kalinya, sebuah server diluncurkan di background (jika belum ada). Server inilah yang sebenarnya menjalankan semua shell. Client hanyalah pintu pandang — kalian bisa menutup jendelanya (detach), tapi gedung dan semua yang bekerja di dalamnya tetap berdiri.
Inilah yang memungkinkan multi-client: dua terminal, bahkan dua mesin berbeda (lewat SSH), bisa meng-attach sesi yang sama dan melihat layar yang identik.
Buktikan sendiri. Buka terminal, jalankan tmux, detach, lalu dari prompt shell:
ps -ef | grep tmux
devnull 1234 1 0 08:00 pts/0 00:00:00 tmux: server
devnull 1235 1234 0 08:00 pts/1 00:00:00 -bashPerhatikan dua hal: proses tmux: server berjalan sebagai child dari init (PID 1), bukan dari terminal — jadi menutup terminal tidak menyentuhnya. Dan shell -bash yang kalian pakai adalah child dari server, bukan dari client. Detach tidak memengaruhi keduanya.
Important
Ini bedanya dengan job control shell biasa. Saat kalian menjalankan perintah &, proses itu tetap child dari shell yang akan mati saat terminal ditutup. Dengan tmux, seluruh pohon proses diadopsi oleh server — itulah mengapa sesi bertahan jauh melampaui usia client.
Semua state tmux hidup dalam hierarki tiga tingkat:
Session (paling luar; wadah kerja, bisa punya nama)
└── Window 0: [zsh]
│ └── Pane 0.0 (satu layar penuh)
├── Window 1: [code]─ Pane 1.0 │ Pane 1.1 (split vertikal)
├── Window 2: [logs]─ Pane 2.0 │ Pane 2.1 │ Pane 2.2
└── Window 3: [ops]─ Pane 3.0 (atas) / Pane 3.1 (bawah)| Tingkat | Fungsi | Analogi |
|---|---|---|
| Session | Wadah kerja terbesar; bisa di-detach/attach | Proyek / ruang kerja |
| Window | Tab dalam satu sesi; punya nomor & nama | Tab browser |
| Pane | Split viewport dalam satu window; menjalankan proses tersendiri | Split screen |
Session adalah unit persistence — inilah yang kalian detach dan attach. Sebuah server bisa menjalankan banyak session sekaligus, masing-masing dengan nama unik. Kita akan mempelajari lifecycle lengkapnya di episode 3.
Window seperti tab: satu sesi bisa memiliki banyak window, masing-masing dengan nomor (0, 1, 2, ...) dan nama. Setiap window memiliki working directory dan layout pane-nya sendiri.
Pane adalah area di dalam window. Setiap pane menjalankan satu proses (biasanya shell) di PTY-nya sendiri, dan bisa di-split lagi secara rekursif. Inilah yang membuat tmux menjadi "window manager" di dalam terminal.
Di balik tiap pane ada PTY (pseudo-terminal) — perangkat kernel yang memisahkan input/output terminal dari layar fisik. Shell menulis output ke PTY, dan tmux menangkapnya ke dalam grid: array sel layar (karakter + atribut warna) berukuran baris × kolom. Grid inilah yang dirender ke layar client dan disimpan saat detach.
Server dan client tidak berkomunikasi lewat network — mereka berkomunikasi lewat Unix domain socket di file system. Lokasi defaultnya:
/tmp/tmux-<uid>/default<uid> adalah user ID kalian (id -u), sehingga tiap user punya direktori terpisah. Lihat isinya:
ls -la /tmp/tmux-$(id -u)
drwx------ 2 devnull devnull 120 Aug 2 08:00 .
srwxr-xr-x 1 devnull devnull 0 Aug 2 08:00 defaultFile default bertipe srwxr-xr-x — sebuah socket. Ketika kalian menjalankan tmux ls, client mengirim request lewat socket ini ke server. Socket inilah jawaban teknis kenapa dua terminal bisa berbagi sesi: keduanya terhubung ke socket yang sama.
Tip
Kalian bisa menjalankan beberapa server terpisah dengan flag -L (nama socket berbeda), misalnya tmux -L proyek-b new -s inti dan tmux -L proyek-b ls. Ini berguna saat ingin memisahkan environment kerja yang benar-benar berbeda — kita bahas di episode 16.
Status bar adalah satu baris di bawah layar yang menampilkan kondisi sesi secara live: daftar window (window aktif ditandai), nama sesi, hostname, waktu, dan segmen custom. Status bar dirender dari format string — kita akan membangunnya dari nol di episode 10.
tmux bekerja dalam beberapa mode:
| Mode | Cara Masuk | Fungsi |
|---|---|---|
| Command (prefix) | Ctrl+B lalu tombol perintah | Menjalankan keybinding |
| Copy mode | Ctrl+B lalu [ | Navigasi & seleksi teks (scrollback) |
| Zoom | Ctrl+B lalu z | Memperbesar satu pane ke layar penuh |
Karena tmux hidup di dalam terminal, ia harus berbagi input dengan proses lain. Solusinya: prefix key. Semua perintah tmux dimulai dengan prefix — secara default Ctrl+B — lalu diikuti satu tombol. Ctrl+B lalu d = detach; Ctrl+B lalu % = split vertikal. Prefix inilah "trigger" yang memberitahu server bahwa input berikutnya adalah perintah tmux, bukan input untuk proses pane.
Warning
Banyak pemula menekan Ctrl+B dan d bersamaan — itu tidak bekerja. Prefix harus ditekan, dilepas, baru diikuti tombol kedua. Latih ritme "tekan, lepas, tekan" ini sampai otomatis, karena semua keybinding tmux mengikuti pola ini.
Bagaimana tmux tahu harus merender apa? Ada dua mekanisme:
1. Rendering grid. Setiap kali proses di dalam pane menulis output, tmux menangkap byte dari PTY, meng-update grid pane tersebut, lalu mengirim delta (sel yang berubah) ke client yang ter-attach. Ini membuat output scrollback tetap bisa dibaca ulang di copy mode meski sudah lewat layar.
2. Status line update berkala. Status bar tidak dirender ulang setiap keystroke — tmux mengecek status secara periodik (default 15 detik, diatur oleh status-interval) dan saat ada event penting (window berubah, pane aktif berganti). Karena itu, jam di status bar tidak selalu presisi ke detik — itu disengaja untuk menghemat sumber daya.
Note
Implikasi praktisnya: jika kalian mengubah format status bar, hasilnya bisa butuh beberapa detik untuk muncul. Dan jika kalian menjalankan banyak server tmux sekaligus, status line tiap server di-update secara independen.
tmux ls
0: 1 windows (created Mon Aug 2 08:00:00 2026)
1: 2 windows (created Mon Aug 2 08:01:00 2026)Format output ini menyimpan informasi: nomor/nama sesi, jumlah window, dan waktu dibuat. Semua informasi ini bisa diakses secara programatik lewat format string — dasar dari episode 10.
Ctrl+B lalu d berarti dua penekanan terpisah. Tekan Ctrl+B, lepas, lalu d.ps -ef | grep tmux untuk melihat proses tmux: server — bukan tmux attach yang hanya berupa client sementara./tmp/tmux-<uid> tidak membersihkan server — server masih hidup dan akan membuat socket baru. Gunakan tmux kill-server untuk mematikan semua sesi.status-interval, default 15 detik). Beri waktu, atau gunakan tmux refresh-client -S.history-limit atau proses yang di-restart.Di episode 2 ini kita sudah membedah arsitektur tmux: model client-server dengan satu server background yang mengelola semua sesi, hierarki session → window → pane yang masing-masing memetakan ke PTY dan grid sel layar, komunikasi lewat Unix socket di /tmp/tmux-<uid>/default, serta mekanisme rendering grid dan update status bar berkala.
Poin penting yang harus kalian bawa:
Ctrl+B) adalah trigger semua perintah tmux — tekan, lepas, tekan.Arsitektur sudah jelas, sekarang waktunya menggerakkan mesinnya. Di episode 3 selanjutnya, kita akan membahas Session, Window & Pane Lifecycle Dasar — membuat, melampirkan, melepas, dan menghancurkan session; mengelola window dengan c, n/p/0-9, rename, dan find; serta membagi dan menavigasi pane. Pastikan tetap semangat, karena mulai episode 3 kalian akan benar-benar "tinggal" di dalam tmux.