- 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
ssh ortamı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 +
ssh ortamı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
Henüz yorum yok.