Term.everything - Menjalankan semua aplikasi GUI di terminal
(github.com/mmulet)- 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.)
9 komentar
lapisan berlapis
Ini yang benar-benar geek banget ya, haha
Kenapa saya cuma melihat logo dan tidak berjalan ya??
Saya menggunakan Synergy untuk mengendalikan Mac pribadi dari Mac kantor. Sekarang karena saya sudah melepas Mac pribadi dan hanya memakai Linux, alur kerja saya jadi lebih merepotkan.
Tapi kalau memakai alat ini, berarti saya bisa terhubung dari terminal Mac kantor ke desktop Linux pribadi dan bebas melakukan macam-macam pekerjaan di sana, ya?
Sepertinya tim keamanan tidak akan menyukainya.
Mungkin saya saja yang sudah terlalu lama berkecimpung, tapi apakah ini memang perlu?
Sepertinya ini akan berguna saat melakukan eksperimen terkait web di server (via localhost).
Maksud Anda ketika ingin menyelesaikannya secara lokal dan mengujinya sebelum deployment, bukan?
Bekerja dari jarak jauh, saat sulit mengakses jaringan internal dan berada di lingkungan yang terbatas...
Kalau membuka iTerm di dalam iTerm dengan term.everything.. apakah bisa?
Komentar Hacker News
bash_completionharus dibuat benar-benar mudah digunakan, padahal kenyataannya menulisnya lebih sulit dari perkiraan, bahkan sekadar copy-paste pun merepotkan, pengembang yang pintar sejak awal membuat aplikasi yang cocok denganbash_completion, misalnya jika argumen inti pertama ramah untuk bash, struktur sepertimycli myfunc ...saja sudah cukup untuk mengetahui semua fungsi langsung dengan sekali tekan tab, fitur baru juga tidak perlu diiklankan, kalau hanya dihapus dari completion maka skrip lama tidak akan rusak sambil tetap memungkinkan fitur dipensiunkan secara alami, pada akhirnya semua hal jadi masuk ke CLI berkat seseorang yang sudah menyiapkannya lebih dulu