Menggunakan GNU Screen untuk Melampirkan dan Melepaskan Sesi Konsol
GNU Screen adalah terminal multiplexer yang memungkinkan Anda membuat, mengelola, dan melanjutkan kembali beberapa sesi shell independen secara persisten dari satu koneksi terminal. Ketika Anda melepaskan (detach) sesi Screen, setiap proses yang berjalan di dalamnya terus dieksekusi di latar belakang — bertahan dari pemutusan SSH, gangguan jaringan, dan penutupan terminal — hingga Anda secara eksplisit menyambungkan kembali (reattach) atau mengakhiri sesi tersebut.
Kemampuan ini sangat diperlukan bagi administrator sistem yang mengelola server jarak jauh melalui SSH. Baik saat Anda mengompilasi basis kode yang besar, menjalankan migrasi database, memantau log, atau menjalankan pekerjaan backup yang memakan waktu berjam-jam, Screen memastikan pekerjaan tetap berlanjut terlepas dari apa yang terjadi pada koneksi klien Anda.
Mengapa GNU Screen Masih Relevan di Infrastruktur Modern
Alat seperti `tmux` telah mendapatkan popularitas, tetapi GNU Screen tetap tersebar luas di lingkungan Linux enterprise, sistem tertanam, dan infrastruktur lama. Screen hadir sebagai paket default atau hampir default di sebagian besar distribusi server, tidak memerlukan konfigurasi apa pun untuk langsung digunakan, dan model persistensi sesinya sangat andal. Pada VPS atau dedicated server di mana uptime dan eksekusi tugas tanpa gangguan sangat penting, Screen sering kali menjadi cara tercepat untuk mendapatkan sesi persisten yang andal.
Keunggulan operasional utama:
- Persistensi sesi saat terjadi pemutusan koneksi — proses bertahan dari timeout SSH dan gangguan jaringan
- Multiplexing multi-jendela — jalankan tugas paralel dalam satu koneksi SSH
- Overhead sumber daya rendah — jejak CPU dan memori yang dapat diabaikan dibandingkan alternatif berbasis GUI
- Manajemen sesi yang dapat diotomatisasi — otomatiskan pembuatan sesi dan injeksi perintah melalui skrip shell
- Kompatibilitas luas — tersedia di hampir setiap sistem yang sesuai dengan POSIX
GNU Screen vs. tmux: Memilih Multiplexer yang Tepat
Kedua alat ini memecahkan masalah inti yang sama tetapi berbeda secara berarti dalam arsitektur, kedalaman konfigurasi, dan ergonomi skrip.
| Fitur | GNU Screen | tmux |
|---|---|---|
| — | — | — |
| Ketersediaan default | Sudah terpasang di sebagian besar distro | Memerlukan instalasi eksplisit |
| File konfigurasi | `.screenrc` | `.tmux.conf` |
| Pemisahan panel | Vertikal dan horizontal (terbatas) | Pemisahan panel penuh dengan tata letak |
| Skrip / otomatisasi | Injeksi perintah `screen -X` | `tmux send-keys`, API yang kaya |
| Kustomisasi bilah status | Dasar | Sangat dapat dikustomisasi |
| Mode salin | Mirip Vi, kurang intuitif | Mode Vi dan Emacs, integrasi clipboard |
| Berbagi sesi | Didukung melalui flag `-x` | Didukung secara native |
| Kurva pembelajaran | Dangkal | Sedang |
| Kasus penggunaan ideal | Sesi persisten cepat, sistem lama | Alur kerja multi-panel yang kompleks |
Untuk persistensi sesi sederhana pada server jarak jauh — kasus penggunaan sysadmin yang paling umum — kesederhanaan Screen adalah sebuah fitur, bukan keterbatasan.
Menginstal GNU Screen
Sebelum melanjutkan, verifikasi apakah Screen sudah ada:
“`bash
screen –version
“`
Jika belum terinstal, gunakan manajer paket yang sesuai untuk distribusi Anda.
Debian / Ubuntu:
“`bash
sudo apt-get update && sudo apt-get install screen
“`
CentOS / RHEL 7 dan sebelumnya:
“`bash
sudo yum install screen
“`
CentOS Stream / RHEL 8+ / Fedora:
“`bash
sudo dnf install screen
“`
Arch Linux:
“`bash
sudo pacman -S screen
“`
macOS (melalui Homebrew):
“`bash
brew install screen
“`
Verifikasi:
“`bash
screen –version
Output example: Screen version 4.09.00 (GNU) 30-Jan-22
“`
Memulai Sesi Screen
Memulai Sesi Dasar
“`bash
screen
“`
Ini akan membawa Anda ke sesi Screen baru dengan prompt shell standar. Sesi tersebut secara otomatis diberi pengenal berbasis PID numerik.
Sesi Bernama (Sangat Direkomendasikan)
Selalu beri nama sesi Anda di lingkungan produksi. Sesi bernama jauh lebih mudah diidentifikasi dan disambungkan kembali ketika Anda memiliki beberapa pekerjaan yang berjalan secara bersamaan:
“`bash
screen -S session_name
“`
Contoh praktis:
“`bash
screen -S db_migration
screen -S log_monitor
screen -S build_job
“`
Penamaan sangat berharga saat mengelola beberapa beban kerja pada dedicated server di mana beberapa administrator mungkin bekerja secara bersamaan.
Memulai Sesi dengan Perintah
Anda dapat meluncurkan Screen dan langsung mengeksekusi perintah di dalamnya:
“`bash
screen -S backup_job bash -c 'rsync -avz /data/ /backup/ && echo "Done"'
“`
Sesi tetap ada bahkan setelah perintah selesai, memungkinkan Anda untuk menyambungkan kembali dan memeriksa hasilnya.
Melepaskan dari Sesi Screen
Melepaskan (detach) adalah alur kerja inti yang membuat Screen bernilai. Ini menangguhkan tampilan sesi Anda sambil membiarkan semua yang ada di dalamnya tetap berjalan.
Pintasan keyboard:
“`
Ctrl + A, then D
“`
- `Ctrl + A` — awalan perintah Screen (semua perintah Screen dimulai dengan ini)
- `D` — lepaskan (detach)
Setelah melepaskan, terminal Anda kembali ke prompt shell asli. Sesi Screen dan semua proses di dalamnya terus berjalan di latar belakang. Anda akan melihat pesan konfirmasi:
“`
[detached from 12345.db_migration]
“`
Jebakan kritis: Jangan bingung antara melepaskan (`Ctrl+A, D`) dengan menutup jendela (`Ctrl+A, K` mematikan jendela saat ini). Menutup semua jendela akan mengakhiri sesi sepenuhnya.
Menampilkan Daftar Sesi Screen yang Aktif
“`bash
screen -ls
“`
Contoh keluaran:
“`
There are screens on:
18423.db_migration (Detached)
18891.log_monitor (Attached)
19204.build_job (Detached)
3 Sockets in /var/run/screen/S-root.
“`
Indikator status memiliki arti penting:
- Detached — tidak ada terminal yang saat ini terhubung; sesi berjalan di latar belakang
- Attached — sebuah terminal sedang aktif terhubung ke sesi ini
- Dead — proses sesi telah berakhir tetapi file soket belum dibersihkan (gunakan `screen -wipe` untuk menghapus sesi yang mati)
Menyambungkan Kembali ke Sesi Screen
Sambungkan Kembali Berdasarkan Nama Sesi
“`bash
screen -r db_migration
“`
Sambungkan Kembali Berdasarkan PID Sesi
“`bash
screen -r 18423
“`
Sambungkan Kembali Ketika Hanya Ada Satu Sesi
“`bash
screen -r
“`
Screen akan menyambungkan kembali secara otomatis jika hanya ada satu sesi yang terlepas.
Paksa-Sambungkan Kembali Sesi yang Sudah Terhubung
Ini adalah skenario yang sering mengejutkan banyak administrator. Jika koneksi SSH Anda terputus secara tidak bersih, sesi mungkin masih tampak sebagai Attached karena terminal sebelumnya tidak melepaskan diri dengan bersih. Mencoba `screen -r` standar akan gagal dengan:
“`
There is a screen on: 18891.log_monitor (Attached)
There is no screen to be resumed.
“`
Solusinya adalah melepaskan terminal lama secara paksa dan langsung menyambungkan kembali:
“`bash
screen -d -r log_monitor
“`
- `-d` — lepaskan sesi dari jarak jauh dari terminal mana pun yang saat ini memegangnya
- `-r` — sambungkan kembali ke terminal saat ini
Alternatif dengan ID sesi eksplisit:
“`bash
screen -d -r 18891
“`
Ini adalah salah satu perintah Screen yang paling penting secara operasional dan sering diperlukan setelah pemutusan koneksi yang tidak terduga dari VPS.
Manajemen Multi-Jendela di Dalam Sesi
Salah satu fitur Screen yang paling kuat adalah kemampuan untuk menjalankan beberapa jendela independen (terminal virtual) dalam satu sesi. Setiap jendela mempertahankan shell, pohon proses, dan buffer gulir baliknya sendiri.
Membuat Jendela Baru
“`
Ctrl + A, then C
“`
Berpindah Antar Jendela
| Tindakan | Pintasan |
|---|---|
| — | — |
| Jendela berikutnya | `Ctrl + A, N` |
| Jendela sebelumnya | `Ctrl + A, P` |
| Pergi ke jendela berdasarkan nomor | `Ctrl + A, [0-9]` |
| Daftar jendela interaktif | `Ctrl + A, "` |
| Jendela aktif terakhir | `Ctrl + A, Ctrl + A` |
Memberi Nama Jendela
“`
Ctrl + A, then A
“`
Anda akan diminta untuk memasukkan nama untuk jendela saat ini. Jendela bernama muncul di daftar jendela dan bilah status, membuat navigasi jauh lebih mudah saat menjalankan lima atau lebih tugas paralel.
Menutup Jendela
Ketik `exit` di shell, atau tekan `Ctrl + D`. Ketika jendela terakhir dalam sesi ditutup, sesi Screen itu sendiri akan berakhir.
Untuk menutup paksa jendela saat ini tanpa keluar dari shell:
“`
Ctrl + A, then K
“`
Membagi Layar (Regions)
GNU Screen mendukung pemisahan terminal dasar, yang kurang fleksibel dibandingkan tmux tetapi fungsional untuk pemantauan berdampingan.
Bagi secara horizontal (atas/bawah):
“`
Ctrl + A, then S
“`
Bagi secara vertikal (kiri/kanan):
“`
Ctrl + A, then |
“`
Pindahkan fokus ke region berikutnya:
“`
Ctrl + A, then Tab
“`
Hapus region saat ini (tanpa menutup jendela):
“`
Ctrl + A, then X
“`
Hapus semua region kecuali yang saat ini:
“`
Ctrl + A, then Q
“`
Setelah membagi, setiap region awalnya kosong. Navigasi ke sebuah region dengan `Tab` lalu buka jendela di dalamnya menggunakan `Ctrl + A, N` atau `Ctrl + A, "`.
Berbagi Sesi Screen Antara Beberapa Pengguna
Screen mendukung berbagi sesi multi-pengguna, yang berguna untuk debugging kolaboratif atau administrasi berpasangan. Ini memerlukan Screen yang diinstal dengan izin setuid.
Aktifkan mode multi-pengguna di dalam sesi:
“`
Ctrl + A, then :multiuser on
“`
Berikan akses ke pengguna lain:
“`
Ctrl + A, then :acladd username
“`
Pengguna lain kemudian dapat terhubung ke sesi Anda:
“`bash
screen -x your_username/session_name
“`
Catatan keamanan: Sesi Screen multi-pengguna memerlukan kontrol akses yang cermat. Hanya berikan izin `acladd` kepada akun yang dipercaya. Di lingkungan shared hosting, fitur ini biasanya dibatasi.
Mengirim Perintah ke Sesi yang Terlepas
Salah satu kemampuan Screen yang kurang diapresiasi adalah kemampuan untuk menyuntikkan perintah ke dalam sesi yang sedang berjalan tanpa menyambungkan kembali:
“`bash
screen -S db_migration -X stuff "tail -f /var/log/app.logn"
“`
Perintah `-X stuff` mengirimkan penekanan tombol ke sesi seolah-olah diketik. `n` mensimulasikan penekanan Enter. Ini sangat berguna untuk skrip otomatisasi yang perlu berinteraksi dengan sesi Screen yang sedang berjalan.
Mengonfigurasi Screen dengan .screenrc
File `.screenrc` di direktori home Anda mengontrol perilaku default Screen. Konfigurasi minimal namun praktis:
“`bash
~/.screenrc
Disable the startup message
startup_message off
Set scrollback buffer to 10,000 lines
defscrollback 10000
Enable UTF-8
defutf8 on
Show a status bar at the bottom
hardstatus alwayslastline
hardstatus string '%{= kG}[ %{G}%H %{g}][%= %{= kw}%?%-Lw%?%{r}(%{W}%n*%f%t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}][%{B} %m-%d %{W}%c %{g}]'
Set default shell
shell -$SHELL
“`
Pengaturan `defscrollback 10000` sangat penting — buffer gulir balik default hanya 100 baris, yang tidak cukup untuk memantau proses yang berjalan lama.
Referensi Perintah Screen Lengkap
| Perintah / Pintasan | Fungsi | |
|---|---|---|
| — | — | |
| `screen` | Mulai sesi baru tanpa nama | |
| `screen -S name` | Mulai sesi bernama | |
| `screen -ls` | Tampilkan semua sesi | |
| `screen -r name` | Sambungkan kembali ke sesi yang terlepas | |
| `screen -d -r name` | Paksa-lepaskan dan sambungkan kembali | |
| `screen -x name` | Terhubung ke sesi yang sudah terhubung (tampilan bersama) | |
| `screen -wipe` | Hapus soket sesi yang mati | |
| `Ctrl + A, D` | Lepaskan dari sesi saat ini | |
| `Ctrl + A, C` | Buat jendela baru | |
| `Ctrl + A, N` | Jendela berikutnya | |
| `Ctrl + A, P` | Jendela sebelumnya | |
| `Ctrl + A, "` | Daftar jendela interaktif | |
| `Ctrl + A, A` | Ganti nama jendela saat ini | |
| `Ctrl + A, K` | Tutup jendela saat ini | |
| `Ctrl + A, S` | Bagi secara horizontal | |
| `Ctrl + A, | ` | Bagi secara vertikal |
| `Ctrl + A, Tab` | Pindah ke region berikutnya | |
| `Ctrl + A, Q` | Hapus semua region kecuali yang saat ini | |
| `Ctrl + A, [` | Masuk ke mode salin/gulir balik | |
| `Ctrl + A, ?` | Tampilkan semua pintasan tombol | |
| `Ctrl + A, :quit` | Akhiri seluruh sesi |
Mencatat Keluaran Sesi Screen
Screen dapat mencatat semua yang dicetak di jendela ke sebuah file — sangat berharga untuk mengaudit pekerjaan yang berjalan lama:
Aktifkan/nonaktifkan pencatatan untuk jendela saat ini:
“`
Ctrl + A, then H
“`
Ini membuat file bernama `screenlog.N` (di mana N adalah nomor jendela) di direktori saat ini. Anda juga dapat mengaktifkan pencatatan dari baris perintah saat memulai sesi:
“`bash
screen -L -S monitored_job
“`
Atau tentukan file log kustom di `.screenrc`:
“`bash
logfile /var/log/screen/session_%t_%Y%m%d.log
“`
Kasus Penggunaan Praktis di Server Jarak Jauh
Migrasi database yang berjalan lama: Mulai migrasi di dalam sesi Screen bernama, lepaskan, dan pantau kemajuannya dengan menyambungkan kembali secara berkala. Jika koneksi SSH terputus, migrasi terus berlanjut tanpa gangguan.
Pemantauan log berkelanjutan: Jalankan `tail -f` atau `multitail` di jendela Screen. Lepaskan dan sambungkan kembali kapan pun Anda perlu memeriksa kondisi saat ini.
Pekerjaan kompilasi: Kompilasi C++ besar atau kernel dapat memakan waktu berjam-jam. Screen memastikan build selesai meskipun laptop Anda kehilangan konektivitas.
Proses interaktif yang tidak dapat dijalankan di latar belakang: Beberapa alat — CLI database, sesi Python interaktif, penginstal berbasis teks — tidak dapat begitu saja dikirim ke latar belakang dengan `&`. Screen membungkusnya dalam sesi persisten dengan bersih.
Koordinasi multi-administrator: Menggunakan `screen -x`, dua administrator dapat mengamati sesi yang sama secara bersamaan, yang berguna selama respons insiden pada dedicated server.
Jika Anda mengelola infrastruktur web bersamaan dengan sesi persisten, memadukan Screen dengan VPS dengan cPanel yang dikonfigurasi dengan baik memberi Anda antarmuka manajemen grafis sekaligus kemampuan multiplexing terminal penuh. Bagi tim yang mengelola pembaruan SSL dan penerapan sertifikat melalui baris perintah, SSL Certificates yang dikombinasikan dengan skrip otomatisasi berbasis Screen dapat membuat prosesnya sepenuhnya otomatis.
Jebakan Umum dan Cara Menghindarinya
Sesi yang terbengkalai menumpuk: Administrator sering lupa mengakhiri sesi setelah pekerjaan selesai. Jalankan `screen -ls` secara berkala dan gunakan `screen -wipe` untuk membersihkan soket yang mati. Akhiri sesi yang tidak aktif dengan `screen -S session_name -X quit`.
Buffer gulir balik terlalu kecil: Buffer default 100 baris berarti Anda kehilangan riwayat keluaran dengan cepat. Selalu atur `defscrollback 10000` atau lebih tinggi di `.screenrc`.
Sesi Screen bersarang: Jika Anda SSH dari dalam sesi Screen dan memulai sesi Screen lain di host jarak jauh, perintah `Ctrl + A` akan ditangkap oleh sesi luar. Gunakan `Ctrl + A, A` untuk mengirim `Ctrl + A` literal ke sesi dalam, atau gunakan `Ctrl + A, :sessionname` untuk membedakannya.
Sesi tetap Attached setelah pemutusan koneksi: Koneksi SSH yang terputus mungkin meninggalkan sesi dalam keadaan Attached. Selalu gunakan `screen -d -r` daripada `screen -r` biasa saat menyambungkan kembali setelah pemutusan koneksi yang tidak terduga.
Masalah lokal dan pengkodean: Jika Anda melihat karakter yang kacau, pastikan terminal dan Screen Anda keduanya menggunakan UTF-8. Tambahkan `defutf8 on` ke `.screenrc` dan verifikasi variabel lingkungan `LANG` Anda diatur ke lokal UTF-8 (misalnya, `en_US.UTF-8`).
Matriks Keputusan: Kapan Menggunakan Screen
| Skenario | Gunakan Screen? | Catatan |
|---|---|---|
| — | — | — |
| Proses jarak jauh yang berjalan lama | Ya | Kasus penggunaan utama |
| Perintah SSH sekali pakai yang cepat | Tidak | Overhead tidak sepadan |
| Alur kerja terminal multi-panel | Mungkin | Pertimbangkan tmux untuk tata letak yang kompleks |
| Sesi debugging bersama | Ya | Gunakan `-x` untuk tampilan bersama |
| Skrip otomatis tanpa interaksi | Tidak | Gunakan layanan `nohup` atau `systemd` |
| Proses interaktif yang tidak dapat di-daemonkan | Ya | Screen sangat ideal |
| Dasbor pemantauan persisten | Ya | Padukan dengan jendela bernama dan pencatatan |
Daftar Periksa Poin Teknis Utama
- Selalu beri nama sesi dengan `screen -S descriptive_name` — sesi tanpa nama menjadi tidak terkelola dalam skala besar
- Atur `defscrollback 10000` di `.screenrc` sebelum Anda membutuhkannya, bukan setelah kehilangan keluaran
- Gunakan `screen -d -r` sebagai perintah reattach default Anda untuk menangani kondisi Attached maupun Detached tanpa perlu berpikir
- Aktifkan pencatatan sesi dengan `screen -L` untuk setiap pekerjaan yang keluarannya mungkin perlu Anda audit nanti
- Jalankan `screen -wipe` secara berkala untuk menghapus soket sesi yang mati dan menjaga keluaran `screen -ls` tetap mudah dibaca
- Suntikkan perintah ke sesi yang terlepas dengan `screen -X stuff` untuk mengotomatiskan interaksi tanpa menyambungkan kembali
- Untuk lingkungan multi-administrator, konfigurasikan `.screenrc` dengan `multiuser on` dan ACL eksplisit daripada mengandalkan akses root bersama
- Uji konfigurasi `.screenrc` Anda pada sistem non-produksi sebelum menerapkannya ke infrastruktur kritis
Pertanyaan yang Sering Diajukan
Apa yang terjadi pada sesi Screen jika server melakukan reboot?
Semua sesi Screen hilang saat reboot. Sesi Screen adalah proses yang berjalan di memori — mereka tidak bertahan dari restart sistem. Untuk layanan yang benar-benar persisten, gunakan file unit `systemd` atau skrip init. Screen digunakan untuk persistensi sesi interaktif saat terjadi pemutusan koneksi, bukan saat reboot.
Bisakah saya menggunakan Screen pada akun shared hosting?
Lingkungan shared web hosting standar biasanya membatasi akses SSH dan mungkin tidak memiliki Screen yang terinstal atau dapat diakses. Screen paling efektif di lingkungan VPS atau dedicated server di mana Anda memiliki akses shell penuh dan hak akses root atau sudo.
Apa perbedaan antara `screen -r` dan `screen -x`?
`screen -r` menyambungkan kembali ke sesi yang terlepas, memberi Anda akses eksklusif. `screen -x` terhubung ke sesi yang sudah terhubung, menciptakan tampilan bersama di mana beberapa terminal melihat sesi yang sama secara bersamaan — berguna untuk pemecahan masalah kolaboratif.
Bagaimana cara menggulir ke atas di sesi Screen untuk melihat keluaran sebelumnya?
Masuk ke mode salin/gulir balik dengan `Ctrl + A, [`. Gunakan tombol panah atau Page Up/Page Down untuk navigasi. Tekan `Escape` atau `Q` untuk keluar dari mode salin. Pastikan buffer gulir balik Anda cukup besar dengan mengatur `defscrollback` di `.screenrc`.
Apakah GNU Screen masih aktif dipelihara?
Ya. GNU Screen aktif dipelihara di bawah Proyek GNU. Versi 4.9.x dirilis pada tahun 2022. Meskipun tidak menerima pengembangan fitur secepat tmux, Screen menerima patch keamanan dan perbaikan bug, menjadikannya andal untuk penggunaan produksi pada infrastruktur server yang berjalan lama.
