X11

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 - X11

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.

  • fd = socket(domain, type, protocol);

Domain ya unix ya da network socket olabilir.

  • Üzerinde bulunduğu host ile haberleşilecekse Unix socket oluşturulur
  • Eğer uzaktaki bir host ile haberleşilecekse Network (Internet) socket oluşturulur.

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:

xdg session type - X11

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.

windowmanager - X11

Örneğin kullanmış olduğumuz linux distorusunda kullanılan windows manager:

wman - X11

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.

centos - X11

# 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.

xforwarding e1573143241182 - X11

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.

Display - X11

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.

  • Host: Displayi kontrol edecek X Serverın adresi.
  • Server (Display) : Server numarası. X Forwarding de her x session için bir sözde x server oluşturulur.
  • Screen:  Serverdaki ekran numarası. Kullanıcı bir den fazla ekranla çalışıyor olabilir. Hangi ekrana aktarılacağı belirtilir.

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.

displayserver - X11

# X Authorization

Bir X Servera, X client bağlanmak istediğinde yetkilendirmeyi aşağıdaki basit yöntemlerle sağlanmaktadır.

  • Host based (xhost): X Servera bağlanacak clientın xhost listesinde olması beklenilir.
  • Cookie based (xauth): startx komutu ile arayüzü açarsanız ~/.Xauthority altında bir key otomatik oluşturulur. Bu key ile yetkilendirme yapılabilir.
  • User based: Sunucuya login olan bir kullanıcıdaki clientda yetkilere sahiptir.