Xin amacı her sisteme uygun grafiksel bir window sistemi standartı oluşturmaktır.
X11in ilk releasei 1987 yılında MIT tarafından çıkarılmıştır. 11, Xinde son major sürümüdür.
X11 de kendi içerisinde çeşitli releaselere sahiptir. X11 in son release i bu yazıyı yazdığım tarih itibariyle X11 Release 7.7 dir.
X geliştirmeleri artık X.org tarafından yayınlanmaktadır.
# Çalışma mekanizması
X network tabanlı bir window protokoldür. Localden çalışabileceği gibi uzak bir sunucu üzerindeki windowu görünteleyebilir.
Görüntüyü gösteren, çizen sunucu bileşenine X Server deniliyor. Bu kullanıcının makinesinde yüklü oluyor.
X Server localdeki ve remotedaki uygulamalardan aldığı istekleri işleyip kullanıcıya ekran olarak sunuyor.
# IPC
X Server ve X client localde ve remoteda IPC olarak socketleri kullanırlar.
Unixlerde Socket dosyasının tanımı yapılırken domain, tipi ve protokol belirtilir.
Domain ya unix ya da network socket olabilir.
X Server ve X Client aynı hostda olduğu durumlarda unix socket, X Clientın remote olduğu durumlarda ise network socket kullanılır.
# X Server Implementations
X aslında unix/linux sistemler için olsa da farklı platformlar için farklı variantlar geliştiriciler tarafından portlanmıştır.
Şuanda en çok kullanılan implementasyon X.org-X11 Serverdır. 2004 öncesinde ise en çok kullanılan implementasyon XFree86 idi.
Mac OS larda çalışabilen X Server için XQuartz projesi bulunmaktadır. Bu X Server farklı platformlardaki X uygulamaları da desteklemektedir.
Windows OSlerden çalışabilen X Server için Cygwin X , Xming vb. bir çok alternatif bulunmaktadır.
# Linux X Server
Linux kullanıyorsanız muhtemelen görüntüleme sunucusu olarak X Server kullanma olasılığınız çok yüksek.
Örneğin kullandığım bir linux dağıtımına bakalım:
Her ne kadar Wayland gibi X Server alternatifleri olsa da, vazgeçilmiyor olmasının sebebi bir çok clientın hala Xi kullanıyor olmasıdır.
# Window Manager
Uygulamalar pencereleri yönetmezler. Yani bir windowun boyunu düzenleyen, görünüme karar veren x11 uygulaması değildir. Bu pencere dekorasyonunu yöneten bileşen window managerdır.
Desktop envoriment tek bir monolithic yani tek bir yazılımdan oluşmaz. Kullanıcıya sunulan arayüz aslında bir çok bileşenden oluşmaktadır. Window Manager bu bileşenlerden biridir.
Window Manager olmaksızın bir uygulama çalıştırdığınızda eğer ki bir gui framework kullanmıyorsa normal bir pencerede aşina olduğumuz kapatma, küçültme gibi butonlar olduğu yer olmayacaktır.
Örneğin kullanmış olduğumuz linux distorusunda kullanılan windows manager:
Linux sistemlerde window manager ı kaldırıp başka bir windows manager kullanmak oldukça kolaydır.
Compositor aslında window managera bağlıdır. Çeşitli efektlerle pencereler arası geçiş kolaylaştıran yapıdır. Her window manager compisitor özelliğine sahip olmayabilir.
Performans sizin önemliyse compositordan kurtulmak iyi bir seçenek olabilir.
# Güvenlik
X11de bileşenlere ait sürüm bilgileri bulunmaktadır ve bileşenlerde çıkan güvenlik zafiyetleri X.orgda veya güvenlik bültenlerince yayınlanır.
Bileşenlere zafiyetlerin giderilmesi için önerilen patchlerin geçilmesi gerekmektedir.
X server ve remote X client arasındaki trafik encrypted değildir. Güvensizdir. SSH tünel aracılığıyla verinin encrypted gitmesi sağlanabilir.
Güvenlik açısından X11Forwarding kapatılır.
# X Window Kurulum
Örneğin Centos minimal sunucumuza X Window ve örnek bir desktop ortamı kuralım.
yum groupinstall X Window System Gnome Desktop
Kurulum sonrasında çokça aşina olabileceğiniz startx komutu ile diyip çalıştırmayı deneyelim.
# SSH X11-Forwarding
SSH protokolü x11 forwardingi desteklemektedir. Uzak sunucuya bağlanıp remote x pencereleri localde güvenli bir kanal üzerinden gösterebilirsiniz.
Örneğin bir centos sunusuna ssh ile bağlanıp firefox yazılıını çalıştırmak isteyelim. SSH client da (OpenSSH) bağlanırken X forwardingi aktif etmek için -X parametresi ile bağlanılır.
Yukarıdaki ekran görüntüsündeki komut centos sunucusuna bağlanıyor. Centos makinemizde de X11-forwarding sshd konfigürasyonu içinde aktif olsun. Hemen aşağıdaki gibi $DISPLAY set ediliyor. Artık bu DISPLAYe gelecek istekler bir proxy gibi ssh client yapan kali makinemize forward edilir. Centos makinesinde x-server kurulu olmasına gerek bulunmamaktadır. Kali makinemizde ise x-server yüklü olması gerekir.
Her ssh ile bağlanıldığında x11-forwardingi aktif etmek, -X parametresini her seferinde kullanmak istemiyorsanız ssh_config aktif edilir.
ForwardX11 yes
Siz diyelim ki client makinenizde -X parametresiyle bağlanmak istediniz. Hedef hostda sshd_config içerisinden aşağıdaki gibi X11 forwarding kapalıysa tünel oluşmayacaktır.
X11Forwarding no
# Display
X Server tarafından yönetilen, gösterilecek görüntüdür.
X Client görüntüsünü hangi nereye vermesini bilmesi gerekmektedir. Bunu da bir display string ile belirtir. Bu string host:server.screen (host:display.screen olarakta ifade edilebilir) fortmatında olmalıdır.
Bununu için genellikle çevresel değişkene $DISPLAY tanımlanır. Örneğin yukarıdaki X-Forwarding başlığında geçen işlemi yapmadan evvel aşağıdaki gibi bir çevresel değişken otomatik tanımlandı.
Örneğin aynı bilgisayarımızdan iki terminalden bağlanmak istersek Server numarası değişecektir.
# X Authorization
Bir X Servera, X client bağlanmak istediğinde yetkilendirmeyi aşağıdaki basit yöntemlerle sağlanmaktadır.