GNU screen, atau singkatnya disebut screen, adalah utilitas berbasis konsol (bukan GUI) untuk melakukan multipleksing terminal. Screen mengizinkan kita menjalankan beberapa terminal virtual (umumnya menjalankan shell interaktif) di bawah satu terminal “fisik”. Jadi, kita menjalankan screen lalu di “bawah”-nya dapat membuka lagi window-window terminal, dapat berpindah dari satu window ke window lain, dapat mengatur jalannya proses di dalam masing-masing window, dapat merangkai tampilan window secara vertikal atau horizontal, dsb. Singkatnya, bisa dibilang bahwa screen adalah window manager berbasis teks.
Kegunaan utama screen adalah untuk menyimpan sesi terminal kita, agar jika kita logout atau terputus dari terminal “fisik”, terminal-terminal yang kita buka di bawah screen masih dapat terus berjalan. Amat bermanfaat jika kita ingin menjaga sesi terminal di server remote, tapi koneksi internet kita sendiri buruk atau tidak 24-jam. Kegunaan lainnya misalnya untuk dapat menjalankan banyak terminal sekaligus, agar bisa mengunci terminal, agar bisa menyimpan output terminal atau melakukan kopi paste tanpa mouse, dll.
Screen juga memiliki fitur multiuser, agar lebih dari satu pemakai dapat berbagi sesi terminal secara bersama-sama. Artikel ini akan membahas fitur tersebut, dan beberapa aplikasi yang mungkin dibuat dengannya.
Sekilas dasar screen
Seingat saya, Infolinux pernah menyajikan tulisan tentang program screen ini, jadi saya tidak akan membahas dasarnya secara panjang lebar lagi di sini. Namun berikut ini dasar-dasar penggunaan screen:
Untuk mulai menjalankan screen, dari terminal/shell ketik:
% screen
screen akan menampilkan pesan selamat datang. Tekan Enter atau spasi. Maka Anda akan kembali ke prompt shell. Ini adalah sesi terminal baru di bawah screen. Anda dapat lanjut memakai shell, menjalankan program command-line lain, dll.
Bedanya setelah pakai screen apa? Anda dapat membuka lebih dari 1 terminal. Tekan Ctrl-a diikuti c. Maka Anda membuat 1 terminal baru lagi dan diberi prompt shell baru. Terminal Anda sebelumnya masih tetap ada. Tekan Ctrl-a diikuti n untuk kembali ke terminal kesatu. Tekan lagi Ctrl-a, n untuk berpindah ke terminal kedua. Berguna misalnya jika terminal 1 sedang sibuk menjalankan perintah dan Anda belum mendapat prompt shell lagi, maka Anda dapat berpindah dulu ke terminal 2, dst.
Jika Anda sedang login remote ke server dan tiba-tiba koneksi putus, jangan khawatir, screen akan otomatis menyelamatkan (autodetach) sesi-sesi terminal di bawah screen (yang saat ini jumlahnya 2) tersebut.
Sewaktu Anda login lagi ke server remote, ketik:
% screen -r
maka sesi terminal Anda akan direstore ke tampilan! “Ajaib,” begitu mungkin seru Anda jika baru pertama kali menyaksikan ini.
Silakan melihat-lihat manpage screen untuk berbagai opsi yang tersedia.
Screen multiuser
Screen memiliki fitur multiuser, namun defaultnya fitur ini dimatikan. Untuk menghidupkannya, di file ~/.screenrc milik Anda, tambahkan baris:
multiuser on
Program screen juga mungkin perlu diset dulu permission-nya agar dapat berjalan dengan mode multiuser. Di Debian atau Ubuntu, caranya:
# chmod u+s /usr/bin/screen
# chmod 755 /var/run/screen
Barulah kini jalankan screen baru (bukan hasil reattach dengan opsi -r). Aktifnya mode multiuser atau tidak dapat dilihat dengan perintah screen -ls:
% screen -ls
There is a screen on:
8175.pts-6.builder (Multi, attached)
1 Socket in /var/run/screen/S-steven.
Apa yang berbeda di screen dengan mode multiuser aktif? Sebuah screen yang multiuser dapat di-attach oleh lebih dari satu user pada saat yang bersamaan (termasuk oleh user Unix lain). Pada screen singleuser, screen hanya dapat di-attach oleh user yang sama, dan begitu di-attach di satu terminal, di terminal yang lain jika sedang di-attach otomatis akan ter-detach.
Memberi akses read-only pada user lain
Screen mengizinkan kita mengatur akses user lain terhadap window-window dalam screen milik kita dan bahkan untuk setiap perintah. Anda dapat melihat detilnya di manpage screen, perintah acladd, aclchg, dan acldel. Namun untuk sederhananya, mari kita mencoba memberi akses read only pada user lain.
Cobalah login sebagai user Unix lain, misalnya Budi, lalu attach-lah screen milik Steven:
% screen -r steven/
Mula-mula screen akan menolak, karena Steven belum memberikan permission apa-apa kepada budi. Dari screen steven, ketikkan Ctrl-a diikuti : (titik dua), lalu ketik:
aclchg budi -w
-w berarti kita tidak memberi Budi akses write.
Kini cobalah kembali, sebagai Budi, masuk ke screen milik Steven:
% screen -r steven/
maka tampilan screen milik Steven akan muncul di terminal Budi. Jika Steven mengetikkan sesuatu di screennya, maka tampilan Budi akan otomatis terupdate. Namun budi tidak dapat mengetikkan perintah screen apa-apa (Ctrl-a …) untuk mengubah atau merecoki sesi terminal Steven. Efeknya adalah, Budi dapat menonton namun tidak dapat ikut berpartisipasi.
Setting seperti ini cocok untuk aplikasi demo. Misalnya, kita sebagai guru/pelatih/pendemo memperlihatkan cara melakukan sesuatu di terminal dan satu atau lebih murid/pengamat, baik yang berada secara fisik di ruangan yang sama, ataupun jauh terpisah di belahan dunia lain dan login remote ke server yang sama, dapat menyaksikannya secara “siaran langsung”.
Aplikasi lain misalnya ujian (dalam konteks sekolah atau wawancara kerja). Orang yang diuji membuka sesi screen multiuser lalu mengizinkan pengujinya masuk. Penguji attach ke screen milik si teruji lalu mengamati yang terjadi sambil memberi penilaian.
Memberi akses read-write pada user lain
Selain hanya akses read (menonton), tentu kita juga dapat mengizinkan user lain akses read-write. Dari screen milik Steven, coba ketikkan Ctrl-a, : lalu
aclchg budi +rwx "#?"
Kini Budi akan dapat masuk ke screen dan juga mengetikkan perintah ke dalam screen. Apa yang diketik oleh Steven maupun Budi akan sama-sama dapat dirasakan efeknya oleh Budi dan Steven.
Si pemilik screen (Steven) dapat membatasi akses terhadap window atau perintah tertentu saja. Misalnya, agar Budi hanya memiliki akses terhadap window ke-0 saja:
Ctrl-a, :, acldel budi
Ctrl-a, :, aclchg budi +rwx "0,?"
Akses read-write bagi user lain dapat dipakai untuk chatting sederhana misalnya. Untuk ini, di screen Steven:
Ctrl-a, S
cat >/dev/null
di screen Budi:
Ctrl-a, S
Ctrl-a, [Tab]
Ctrl-a, c
cat >/dev/null
di screen Steven:
Ctrl-A, [Tab]
Ctrl-a, n
Ctrl-a, n
Ctrl-a, [Tab]
Perintah Ctrl-a, S untuk melakukan split menjadi 2 region sehingga dua buah sesi akan tampak bersamaan atas-bawah. Steven lalu mengetikkan perintah shell cat >/dev/null agar bisa mengetik-ngetik tanpa harus men-save ke file. User budi melakukan hal yang sama, men-split tampilan screen-nya agar bisa menulis juga. Ctrl-A, [Tab] untuk berpindah-pindah antarregion. Kedua user saling menulis di shell masing-masing, dan bisa saling melihat. (Lihat Gambar 1).
Selain chatting, aplikasi lainnya adalah untuk asistansi. Steven dapat membantu Budi dengan mengamati apa yang Budi ketik, lalu nanti jika budi mengalami kesulitan, Steven dapat ikut membantu mengetikkan perintah yang dibutuhkan. Atau, sama seperti chatting, kedua user men-split tampilan masing-masing. Steven dapat mengetikkan sesuatu, lalu Budi mengikuti di terminal miliknya. Keduanya dapat saling melihat hasil perintah yang lainnya. Sehingga benar-benar bisa disebut belajar sambil praktik.
Kemungkinan penggunaan lainnya adalah bermain game teks atau perlombaan lain, bekerja sama menyusun teks, dan masih banyak lagi.