- Program CLI untuk Linux yang memungkinkan menjalankan aplikasi GUI langsung dari terminal
- Menggunakan kompositor Wayland buatannya sendiri untuk mengirim output GUI ke terminal alih-alih ke monitor
- Dapat dijalankan juga di lingkungan ssh, dan browser web, file manager, bahkan game Doom bisa dijalankan di dalam terminal
- Kualitas output bergantung pada resolusi terminal (jumlah baris·kolom), dan pada terminal dengan dukungan gambar seperti iTerm2·kitty juga mendukung rendering resolusi penuh
- Dikembangkan berbasis Typescript dan bun dengan sebagian kode C++, saat ini baru mendukung sebagian aplikasi tetapi sedang diperluas dengan tujuan “Term everything❗”
Pentingnya proyek dan keunggulan perbandingan
- Berbeda dari penampil file terminal atau alat output gambar sederhana yang sudah ada, Term.everything dapat menjalankan aplikasi GUI “apa pun” di dalam terminal
- Antarmuka GUI tetap dapat digunakan bahkan di lingkungan jaringan termasuk SSH, sehingga unggul untuk administrasi server dan pengembangan jarak jauh
- Memanfaatkan semaksimal mungkin fitur gambar pada terminal modern seperti kitty dan iterm2, serta menyediakan opsi peningkatan resolusi dan frame rate
Ikhtisar
- Term.everything adalah program CLI Linux, dengan ciri utama mampu menjalankan jendela GUI langsung di terminal
- Inti teknologinya adalah kompositor berbasis Wayland yang dikembangkan sendiri, yang merender GUI ke terminal alih-alih ke monitor biasa
- Mendukung lingkungan berbasis x11 maupun Wayland, dan bisa digunakan dari jarak jauh melalui ssh
- Jumlah baris/kolom terminal yang terbatas memengaruhi kualitas jendela, dan kualitas dapat ditingkatkan dengan menaikkan resolusi terminal (meski ada kemungkinan penurunan performa)
Contoh penggunaan utama
- Menjalankan game: dapat menjalankan game seperti Fontemon atau Doom (episode shareware) di dalam terminal
- Memutar video: memutar film Wing It!, dengan pengaturan keseimbangan frame rate dan kualitas gambar melalui penyesuaian resolusi
- Menjalankan browser: di lingkungan iTerm2 + ssh, dapat terhubung ke Ubuntu dan menjalankan Firefox
- Pengganti penampil file: tanpa perlu membuat penampil file khusus terminal, file manager GUI yang sudah ada bisa langsung digunakan di terminal
- Eksekusi rekursif: menjalankan terminal lain di dalam terminal, yaitu "terminal in a terminal"
Cara kerja dan informasi pengembangan
-
Konsep dasar
- Di masa lalu, agar program dapat menggambar sesuatu ke layar, program bisa menulis langsung ke area tertentu di RAM
- Pada sistem modern, display server mengelola input/output dan mengoordinasikan input seperti mouse/keyboard serta output grafis/gambar
- Di lingkungan Linux, yang umum digunakan adalah protokol Wayland atau X11, dan Term.everything beroperasi berbasis Wayland
-
Protokol Wayland
- Wayland bukan display server itu sendiri, melainkan protokol yang mendefinisikan komunikasi antara server dan program
- Program mengirim hasil render yang dibuatnya sendiri ke display server, lalu server menampilkannya ke layar
- Poin pentingnya adalah model rendering tidak dipaksakan → program dapat menggambar dengan cara yang diinginkan
- Berkat itu, hasil output dapat dikirim ke tempat lain selain layar (misalnya terminal)
-
Pemrosesan output di Term.everything
- Menerima gambar yang digambar oleh klien Wayland (aplikasi GUI yang dijalankan), lalu mengubahnya menjadi output karakter terminal
- Proses konversi:
- 1. Menerima data gambar yang dikirim klien
- 2. Mengubahnya menjadi karakter UTF-8 + kode escape ANSI
- 3. Dalam konversi ini digunakan library chafa untuk memetakan piksel ke karakter terminal
- Untuk input, event keyboard dan mouse yang diteruskan melalui stdin dikirim ke klien Wayland
-
Implementasi nyata
- Ide intinya sederhana, tetapi implementasi nyatanya memerlukan sekitar sepuluh ribu baris kode
- Ditulis dengan Typescript (berbasis bun) dan sebagian C++, serta berperan sebagai display server Wayland kustom
- Kode sumber dapat dilihat di direktori src/
-
Potensi pengembangan
- Term.everything tidak hanya menargetkan menjalankan GUI di terminal semata
- Dengan display server kustom berbasis Wayland, ada kemungkinan untuk mewujudkan ide-ide eksperimental lain juga
- Contoh: menghubungkan perangkat output bukan ke terminal, melainkan ke media yang sama sekali berbeda (misalnya printer, karya seni fisik, dll.)
Belum ada komentar.