Term.everything - Terminalde tüm GUI uygulamalarını çalıştırmak
(github.com/mmulet)- Linux için bir CLI programı; GUI uygulamalarını doğrudan terminalden çalıştırmayı mümkün kılar
- Monitör yerine GUI çıktısını terminale iletmek için kendi geliştirdiği Wayland compositor'ını kullanır
sshortamında da çalışabilir; web tarayıcısı, dosya yöneticisi, hatta Doom oyunu bile terminal içinde çalıştırılabilir- Çıktı kalitesi terminal çözünürlüğüne (satır/sütun sayısı) göre değişir; iTerm2 ve kitty gibi görüntü destekli terminallerde tam çözünürlüklü render da desteklenir
- Typescript ve bun tabanlı geliştirilmiştir, bazı C++ kodları içerir; şu anda yalnızca bazı uygulamaları desteklese de hedefi “Term everything❗” doğrultusunda genişlemektir
Projenin önemi ve karşılaştırmalı üstünlükleri
- Term.everything, mevcut terminal dosya görüntüleyicileri veya basit görsel çıktı araçlarından farklı olarak, “tüm” GUI uygulamalarını terminal içinde çalıştırabilir
- SSH dahil ağ ortamlarında da GUI arayüzü kullanılabildiği için sunucu yönetimi ve uzaktan geliştirme açısından güçlüdür
- kitty, iTerm2 gibi modern terminallerin görüntü özelliklerini azami ölçüde kullanır ve çözünürlük/kare hızı iyileştirme seçenekleri sunar
Genel bakış
- Term.everything bir Linux CLI programıdır ve terminalde GUI pencerelerini doğrudan çalıştırabilmesiyle öne çıkar
- Kendi geliştirdiği Wayland tabanlı compositor temel bileşendir; normal monitör yerine GUI’yi terminale render eder
- Hem X11 hem Wayland tabanlı uygulamaları destekler ve
sshüzerinden uzaktan da kullanılabilir - Terminalin sınırlı satır/sütun yapısı pencere kalitesini etkiler; terminal çözünürlüğü artırılırsa kalite yükselebilir (ancak performans düşebilir)
Başlıca kullanım örnekleri
- Oyun çalıştırma: Terminal içinde Fontemon gibi oyunlar veya Doom (shareware bölümü) çalıştırılabilir
- Video oynatma: Wing It! filmi oynatılabilir; çözünürlük ayarıyla kare hızı ve görüntü kalitesi arasında denge kurulabilir
- Tarayıcı çalıştırma: iTerm2 +
sshortamında Ubuntu’ya bağlanıp Firefox çalıştırılabilir - Dosya görüntüleyici alternatifi: Terminale özel bir dosya görüntüleyici yapmak yerine, mevcut GUI dosya yöneticileri doğrudan terminalde kullanılabilir
- Özyinelemeli çalıştırma: Terminal içinde başka bir terminal çalıştıran "terminal in a terminal"
Çalışma prensibi ve geliştirme bilgileri
-
Temel kavram
- Geçmişte bir programın ekrana bir şey çizmesi için RAM'in belirli bir alanına doğrudan yazabilmesi mümkündü
- Modern sistemlerde Display Server giriş/çıkışı yönetir; fare/klavye gibi girdiler ile grafik/görüntü çıktısını koordine eder
- Linux ortamında çoğunlukla Wayland protokolü veya X11 kullanılır; Term.everything ise Wayland tabanlı çalışır
-
Wayland protokolü
- Wayland, display server'ın kendisi değil; sunucu ile program arasındaki iletişimi tanımlayan bir protokoldür
- Programlar doğrudan render ettikleri çıktıyı display server'a iletir, sunucu da bunu ekrana basar
- Önemli nokta, bir render modelinin zorunlu tutulmamasıdır → programlar istedikleri yöntemle çizim yapabilir
- Bu sayede çıktı ekrana değil, başka bir yere de (ör. terminale) gönderilebilir
-
Term.everything’in çıktı işleme süreci
- Wayland istemcisinin (çalıştırılan GUI uygulamasının) çizdiği görüntüyü alıp terminal karakter çıktısına dönüştürür
- Dönüştürme süreci:
- 1. İstemcinin ilettiği görüntü verisini alır
- 2. Bunu UTF-8 karakterler + ANSI escape kodları biçimine dönüştürür
- 3. Dönüşümde pikselleri terminal karakterlerine eşlemek için chafa kütüphanesi kullanılır
- Girdi tarafında, stdin üzerinden gelen klavye ve fare olaylarını Wayland istemcisine iletir
-
Gerçek uygulama
- Temel fikir basit olsa da, gerçek uygulama için yaklaşık 10 bin satır kod gerekir
- Typescript (bun tabanlı) ve kısmen C++ ile yazılmıştır; özel bir Wayland display server rolünü üstlenir
- Kaynak kod src/ dizininde görülebilir
-
Genişleme potansiyeli
- Term.everything yalnızca GUI’yi terminalde çalıştırmanın ötesini hedefler
- Wayland tabanlı özel bir display server ile başka deneysel fikirlerin de uygulanma potansiyeli vardır
- Örneğin çıktı aygıtını terminal yerine tamamen farklı bir ortama (ör. yazıcı, fiziksel sanat eseri vb.) bağlamak mümkün olabilir
9 yorum
Gereksizin de gereksizi
İşte gerçekten geekçe olan şey bu :)
Bende neden sadece logo görünüyor ve çalışmıyor??
Ben şirket Mac’imden kişisel Mac’imi kontrol etmek için Synergy kullanıyordum. Şimdi ise kişisel Mac’imi elden çıkarıp sadece Linux kullandığım için iş akışım daha zahmetli hale geldi.
Ama bu aracı kullanırsam şirket Mac’inin terminalinden kişisel Linux masaüstüme bağlanıp istediğim gibi çeşitli işler yapabileceğim anlamına mı geliyor?
Güvenlik ekibinin bundan pek hoşlanmayacağı kesin gibi.
Ben de eski kurtlardan sayılırım ama buna gerçekten ihtiyaç var mı?
Sunucuda web ile ilgili deneyler yaparken (
localhostüzerinden) faydalı olabilir gibi görünüyor.Yerelde çözmek ve dağıtımdan önce test etmek istediğiniz durumlardan bahsediyorsunuz, değil mi?
Uzak konumda çalışmak, iç ağa erişimin zor olduğu kısıtlı bir ortamdayken...
iTerm içinde term.everything ile iTerm'i açarsanız.. olur mu?
Hacker News görüşleri
bash_completion'ın gerçekten kolay kullanılabilir hâle getirilmesi gerektiğini düşünüyorum. Aslında yazması göründüğünden daha zor; basit kopyala-yapıştır bile zahmetli. Akıllı geliştiriciler en baştanbash_completionile iyi çalışan uygulamalar yapıyor. Örneğin ilk temel argüman bash dostuysa,mycli myfunc ...gibi bir yapı sayesinde tek bir Tab ile tüm işlevler hemen görülebiliyor. Yeni özelliklerin ayrıca duyurulmasına da gerek kalmıyor. Completion'dan çıkararak eski script'leri bozmadan özellikleri doğal biçimde kullanımdan kaldırmak da mümkün. Sonuçta birisi önceden emek verdiği için CLI içinde her şey yerini bulmuş oluyor.