# Referensi Cepat GNU Screen

*Sesi, window, split, copy mode, dan berbagi layar*

> Source: GNU Screen Manual (gnu.org/software/screen) · MIT

## Manajemen Sesi

### Buat & Tampilkan Sesi

```
screen                        # new unnamed session
screen -S work                # new session named "work"
screen -ls                    # list all sessions
screen -list                  # same as -ls
```

### Perintah Sesi

| Command | Description |
|---------|-------------|
| `screen -S name` | Mulai sesi baru dengan nama |
| `screen -r name` | Sambungkan kembali ke sesi yang terlepas |
| `screen -x name` | Sambungkan ke sesi yang sudah aktif (berbagi) |
| `screen -d name` | Lepaskan sesi dari jarak jauh |
| `screen -d -r name` | Lepas dari tempat lain, sambungkan di sini |
| `screen -D -RR` | Paksa lepas dan sambungkan kembali |
| `screen -ls` | Tampilkan semua sesi beserta PID |
| `screen -wipe` | Bersihkan sesi yang sudah mati |

## Window

### Dasar Window

| Command | Description |
|---------|-------------|
| `Ctrl-a c` | Buat window baru |
| `Ctrl-a n` | Window berikutnya |
| `Ctrl-a p` | Window sebelumnya |
| `Ctrl-a 0-9` | Pindah ke window berdasarkan nomor |
| `Ctrl-a "` | Tampilkan daftar semua window (interaktif) |
| `Ctrl-a '` | Pindah ke window berdasarkan nama/nomor |
| `Ctrl-a A` | Ganti nama window saat ini |
| `Ctrl-a k` | Tutup window saat ini |

### Manajemen Window

| Command | Description |
|---------|-------------|
| `Ctrl-a w` | Tampilkan daftar window di status line |
| `Ctrl-a Ctrl-a` | Beralih antara dua window terakhir |
| `Ctrl-a N` | Tampilkan nomor dan nama window |
| `exit / Ctrl-d` | Tutup window (keluar dari shell) |

## Split & Region

### Perintah Split

| Command | Description |
|---------|-------------|
| `Ctrl-a S` | Bagi horizontal (atas/bawah) |
| `Ctrl-a \|` | Bagi vertikal (kiri/kanan) |
| `Ctrl-a Tab` | Pindah fokus ke region berikutnya |
| `Ctrl-a X` | Tutup region saat ini |
| `Ctrl-a Q` | Tutup semua region kecuali yang aktif |

### Alur Kerja Region

```
Ctrl-a S             # split horizontal
Ctrl-a Tab           # move to new region
Ctrl-a c             # create window in region
Ctrl-a :resize 20   # set region to 20 lines
```

## Copy Mode

### Scrollback & Copy

| Command | Description |
|---------|-------------|
| `Ctrl-a [` | Masuk ke copy/scrollback mode |
| `Space` | Mulai/akhiri seleksi (dalam copy mode) |
| `Enter` | Salin seleksi dan keluar dari copy mode |
| `Ctrl-a ]` | Tempel teks yang telah disalin |
| `h/j/k/l` | Gerakkan kursor (tombol vi dalam copy mode) |
| `Ctrl-u / Ctrl-d` | Scroll naik/turun setengah halaman |
| `/ or ?` | Cari ke depan/belakang |
| `Esc` | Keluar dari copy mode |

### Alur Kerja Copy

```
Ctrl-a [         # enter copy mode
Space            # mark start (navigate first)
Space            # mark end + copy (navigate first)
Ctrl-a ]         # paste into current window
```

## Lepas & Sambungkan Kembali

### Melepas Sesi

| Command | Description |
|---------|-------------|
| `Ctrl-a d` | Lepaskan sesi saat ini |
| `Ctrl-a D D` | Lepas dan log out |
| `Ctrl-a z` | Suspensi screen (seperti Ctrl-Z) |
| `screen -d PID` | Lepas sesi dari jarak jauh berdasarkan PID |

### Menyambungkan Kembali

```
screen -r                 # reattach (if only one session)
screen -r work            # reattach by name
screen -r 12345           # reattach by PID
screen -d -r work         # steal session from other terminal
```

### Alur Kerja Persisten

```
# Start long-running task, detach, reconnect later
screen -S build
make -j4 all        # start build
Ctrl-a d             # detach, go home
screen -r build      # reattach later
```

## Berbagi Layar

### Mode Multi-Pengguna

```
# Host enables multiuser
Ctrl-a :multiuser on
Ctrl-a :acladd alice    # grant access to user alice
# Alice attaches
screen -x hostuser/sessionname
```

### Kontrol Akses

| Command | Description |
|---------|-------------|
| `:multiuser on` | Aktifkan mode multi-pengguna |
| `:acladd user` | Beri pengguna akses penuh |
| `:aclchg user -w '#'` | Jadikan pengguna hanya bisa baca (semua window) |
| `:acldel user` | Hapus akses pengguna |
| `screen -x user/sess` | Sambungkan ke sesi yang dibagikan |

## Konfigurasi

### Esensial ~/.screenrc

```
startup_message off          # skip splash screen
defscrollback 10000          # scrollback buffer lines
hardstatus alwayslastline
hardstatus string '%{gk}%H %{wk}%?%-Lw%?%{bw}%n*%f %t%{wk}%?%+Lw%?'
shell -$SHELL                # use login shell
```

### Pengaturan Berguna

| Command | Description |
|---------|-------------|
| `startup_message off` | Sembunyikan pesan startup |
| `defscrollback N` | Atur buffer scrollback (default 100) |
| `escape ^Bb` | Ganti prefix key ke Ctrl-b |
| `shelltitle '$ \|bash'` | Atur judul window secara otomatis |
| `caption always '%n %t'` | Selalu tampilkan caption dengan info window |
| `autodetach on` | Auto-detach saat koneksi putus (default on) |
| `vbell on` | Gunakan visual bell, bukan suara |

## Pola Umum

### Setup Development

```
# Auto-create windows in .screenrc
screen -t editor 0 vim
screen -t server 1 python -m http.server
screen -t shell  2 bash
select 0                     # start on editor window
```

### Logging & Monitoring

```
Ctrl-a H                     # toggle logging to screenlog.N
Ctrl-a M                     # monitor window for activity
Ctrl-a _                     # monitor window for silence
```

### Referensi Cepat

| Command | Description |
|---------|-------------|
| `Ctrl-a ?` | Tampilkan semua key binding |
| `Ctrl-a :help` | Bantuan bawaan |
| `Ctrl-a :source file` | Muat file konfigurasi |
| `Ctrl-a :screen cmd` | Jalankan perintah di window baru |
| `Ctrl-a :quit` | Tutup semua window dan keluar dari sesi |
