Linux grafik yığını nasıl düzenlenir?


31

Herkes bir resimle (umarım bir resimle) açıklayabilir mi, linux grafik yığını nasıl düzenlenir? X / GTK / GNOME / KDE vb. Hakkında her zaman duyuyorum, ancak gerçekte ne yaptıkları ve birbirleriyle ve yığının diğer bölümleriyle nasıl etkileşime girdikleri konusunda hiçbir fikrim yok. Unity ve Wayland nasıl uyum sağlar?


1
Xorg geliştiricisi Keith Packard'ın Ocak 2011'de linux.conf.au'daki Linux grafiklerinin geleceği hakkında video: linuxconfau.blip.tv/dosya/4693305 Bu, hem mevcut modeli hem de yakın ve orta gelecek için planlarını kapsar.
mattdm

arstechnica.com/open-source/guides/2011/03/… aynı zamanda yığının üzerinden geçen ve Ubuntu'nun Wyland'a olan bağlılığını öven yeni bir makale.
apoorv020

- evet, bu makale eksik parçalarla ve hatta yanlışlıklarla dolu olmasına rağmen, benim düşünceme göre, korkunç derecede tutarlı değil.
mattdm

@mattdm - Tutarsız, vs. olsa bile, aşağıdaki cevaplarda doğrudan değinilmeyen konunun daha büyük resmine girer.
apoorv020

Yanıtlar:


29

X Pencere Sistemi, bir istemci-sunucu mimarisini kullanır. X sunucusu, ekrana sahip olan (izleyiciler + giriş aygıtları) makinede çalışıyor, X istemcileri başka herhangi bir makinede çalışabiliyor ve X protokolünü kullanarak X sunucusunu kullanarak (doğrudan değil, aksine bir kütüphane kullanarak Xlib veya daha modern, blokaj yapmayan olay odaklı XCB). X protokolü genişletilebilir olacak şekilde tasarlanmıştır ve birçok uzantıya sahiptir (bkz xdpyinfo(1)).

X sunucusu, pencereleri oluşturma ve yok etme, çizim işlemleri yapma (günümüzde çoğu çizim istemcide yapılır ve sunucuya görüntü olarak gönderilir), pencerelere olay gönderme gibi, yalnızca düşük düzeyli işlemler gerçekleştirir ... Ne kadar az görebilirsiniz bir X sunucusu çalıştırarak X :1 &(başka bir X sunucusu tarafından kullanılmamış herhangi bir sayıyı kullanın) veya Xephyr :1 &(Xephyr, geçerli X sunucunuza katıştırılmış bir X sunucusunu çalıştırır) ve ardından xterm -display :1 &yeni X sunucusunu çalıştırıp açarak (X yetkilendirmesi ayarlamanız gerekebilir) kullanarak xauth(1)).

Gördüğünüz gibi, X sunucusu çok az şey yapıyor, başlık çubukları çizmiyor, pencere küçültme / simgeleştirme yapmıyor, pencere yerleşimini yönetmiyor ... Tabii ki, bir komutu kullanarak pencere yerleşimini kontrol edebilirsiniz gibi xterm -geometry -0-0, ancak genellikle yukarıdaki işleri yapan özel bir X müşteriniz olur. Bu müşteriye pencere yöneticisi denir . Bir seferde sadece bir pencere yöneticisi aktif olabilir. Hala önceki komutların çıplak X sunucusu açık varsa, üzerinde bir pencere yöneticisi çalıştırmayı deneyebilirsiniz gibi twm, metacity, kwin, compiz, larswm, pawm, ...

Söylediğimiz gibi, X yalnızca düşük seviyeli işlemler yapar ve butonlar, menüler, araç çubukları gibi daha yüksek seviyeli kavramlar sağlamaz ... Bunlar araç takımı adı verilen kütüphaneler tarafından sağlanır , örneğin: Xaw, GTK, Qt, FLTK, ...

Masaüstü ortamları, birleşik bir kullanıcı deneyimi sağlamak için tasarlanmış programların koleksiyonlarıdır. Bu yüzden masaüstü ortamları tipik olarak paneller, uygulama rampaları, sistem tepsileri, kontrol panelleri, yapılandırma altyapısı (ayarların kaydedileceği yer) sağlar. Bilinen bazı masaüstü ortamları KDE (Qt araç seti kullanılarak oluşturulmuş), Gnome (GTK kullanarak), Aydınlanma (kendi araç seti kütüphanelerini kullanarak), ...

Bazı modern masaüstü efektleri en iyi 3d donanım kullanılarak yapılır. Böylece yeni bir bileşen ortaya çıkar, bileşik yönetici . Bir X uzantısı, XComposite uzantısı, pencere içeriğini bileşik yöneticisine gönderir. Kompozit yönetici bu içerikleri dokulara dönüştürür ve OpenGL aracılığıyla birçok donanımı (alfa harmanlama, 3d projeksiyonlar, ...) oluşturmak için OpenGL aracılığıyla 3B donanımı kullanır.

Çok uzun zaman önce, X sunucusu doğrudan donanım aygıtlarıyla konuştu. Bu cihazın kullanımının önemli bir kısmı işletim sistemi çekirdeğine doğru hareket ediyor: DRI (X ve doğrudan görüntü oluşturma istemcileri tarafından 3B donanıma erişim izni ), evdev (giriş aygıtı işlemesi için birleştirilmiş arabirim), KMS (çekirdeğe hareketli grafik modu ayarı) , GEM / TTM (doku belleği yönetimi).

Böylece, artık çoğunlukla X dışında cihaz kullanımının karmaşıklığıyla, basitleştirilmiş pencere sistemlerini denemek daha kolay hale geldi. Wayland , bileşik yönetici kavramına dayanan bir pencere sistemidir, yani pencere sistemi bileşik yöneticidir. Wayland, X'ten çıkmış ve OpenGL kullanarak işleyen cihazların kullanımını kullanıyor.

Birlik gelince, netbooklar için uygun bir kullanıcı arayüzü olması için tasarlanmış bir masaüstü ortamıdır.


Son cümleye katılmıyorum, ama bilgi açısından zengin bir cevap. +1.
missingfaktor

"(günümüzde çoğu çizim müşteri üzerinde yapılıyor ve sunucuya bir resim olarak gönderiliyor)" Bu doğru değil, bunlardan birkaçı bir besteci olmasa bile xgl uzantısı aracılığıyla opengl renderleme yapacak.
Adam D. Ruppe

13

Geleneksel yığın 3 ana bileşen üzerine kuruludur:

  • Görüntülemeyi yöneten X sunucusu
  • Pencereleri çerçevelere yerleştiren, pencereleri küçültürken vb. Yöneten pencere yöneticisi Bu, Unix'te mekanizmanın politikadan ayrılmasının bir parçası.
  • Stackexchange web sitesini görüntüleme olarak yararlı görev yapan istemciler. Doğrudan X protokolünü kullanabilir (intihar), xlib veya xcb kullanabilir (biraz daha kolay) veya GTK + veya QT gibi araç takımı kullanabilirler.

X mimarisi ağ yapılarak müşterilerin sunucudan sonra ayrı bir ana bilgisayarda bulunmalarını sağladı.

Çok uzak çok iyi. Ancak bu geri dönüş görüntüsü oldu. Günümüzde grafikleri işleyen CPU değil, GPU'dur. Modele dahil etmek için çeşitli girişimlerde bulunuldu - ve çekirdeğin daha fazla uzanması için yerine oturduğu zaman.

Öncelikle grafik kartın kullanımı ile ilgili bazı varsayımlar yapılmıştır. Örneğin, yalnızca ekran görüntülemesi kabul edildi. Şu anda wikipedia'da bu bilgiyi bulamıyorum, ancak DRI 1, aynı anda yalnızca bir uygulamanın OpenGL kullanacağını varsaydı (hemen alıntı yapamam, ancak DRI'yı beklemek için notla birlikte WONTFIX'e yakın olan hatayı kazıp çıkarabilirim) 2).

Dolaylı görüntü oluşturma için birkaç geçici çözüm önerilmiştir (bileşik WM için gerekli):

  • XGL - doğrudan karta konuşan uygulamaları destekleyen erken teklif
  • AIGLX - OpenGL protokolünün ağ özelliklerini kullanan kabul edilen teklif
  • NVidia'nın tescilli çözümü

Yeni mimari çalışmaları (DRI 2) başlatıldı. Bu dahil:

  • Bellek kullanımı için çekirdek içi destek (GEM / TTM)
  • Çekirdek modunu ayarlama (KMS) çekirdek içindeki çözünürlüğü değiştirmeyi sağlar, böylece X ile konsol arasında ve diğer birkaç özellik arasında geçiş yaparken gecikmeleri önler (X çalışırken bile panik üzerinde mesaj görüntülemek gibi - hangi IIRC'nin uygulanması planlanır).

Her nasılsa ortogonal çekirdeğe geçmek için Gallium sürücüleri üzerinde çalışmalara başlandı. Mesa kütüphanesi CPU'da OpenGL uygulaması olarak başladı ve ardından GPU hızlandırması kullanmaya başladı. Her zaman OpenGL'ye sıkıldı. OpenGL 3.0'da model önemli ölçüde değişti ve kitaplığın yeniden yazılması kaçınılmazdı. Bununla birlikte, kodu ortak katman çıkaran birkaç katmana bölme ve üzerine çeşitli 3D API uygulamalarına izin veren düşük seviyeli API sağlama fırsatını kullanıyorlar - örneğin Wine'ın OpenGL'den geçmek yerine doğrudan Gallium'a konuşmasını sağlamak için Wine'a izin vermek API katmanı (doğrudan 1-1 çağrıları olmayabilir).


Wayland, yukarıdakileri biraz karmaşık ve “tarih” içeren bir projedir. 1984'teki tasarım (yüksek oranda değiştirilmiş ve uyarlanmış olmasına rağmen) 21 c'nin başlangıcına karşılık gelmez. yandaşlarına göre.

Tam OpenGL desteği (ve bazıları için önemli - bazı ağ desteği) gibi bazı önemli özellikleri hala eksik olmasına rağmen, daha fazla esneklik ve daha iyi performans sunması gerekiyor.


Masaüstü ortamları ve pencere yöneticileri hakkında biraz daha fazla. Pencere yöneticisi, pencerenin nasıl davranacağından sorumlu bir uygulamadır - örneğin çalışma alanlarını yönetmekten, başlık çubuğunu çizmekten (windo başlıklı ekranın üstündeki şey ve düğmeleri küçültmek / küçültmek / kapatmak) vb.

Öncelikle sadece çok az WM kullanılmış, ancak daha sonra kullanıcı masaüstü ortamları istemeye başlamıştır - yani menü başlangıcı, masaüstü arkaplanı gibi daha özellikli sürümler.

Bir süre sonra, işlerini yapmak için OpenGL ve dolaylı renderleme kullanan kompozit WM tanıtıldı. Yalnızca grafik efektler sağlamakla kalmaz, aynı zamanda bazı erişilebilirlik özelliklerinin (büyüteç gibi) kolay uygulanmasını sağlar.


Yani QT gibi bir çerçeve bir uygulamanın kendini çizmesine izin veriyor ve Gnome ve KDE gibi masaüstü ortamları aynı masaüstünde birden fazla pencere çizmeye karar veriyor mu?
apoorv020

Tam değil. QT, uygulamanın kendisini çizmesine izin verir (yani uygulamanın nasıl davranacağını belirtmesine izin verir). WM benzeri metacity (Gnome için) veya kwin (KDE için) pencerenin çevrede nasıl davrandığını belirtir. Masaüstü ortamı, WM, paneller ve PIM gibi diğer uygulamaları içeren, kullanıcı için örtüşme deneyimi sağlayan bir pakettir.
Maciej Piechotka

9

Her şeyden önce, hiçbir Linux grafik yığını yoktur. Linux'un grafiksel görüntü özelliği yoktur.

Bununla birlikte, Linux uygulamaları grafiksel göstergeler kullanabilir ve bunu yapmak için birçok farklı sistem vardır. En yaygın olanları, X pencerelerinin üzerine inşa edilmiştir.

X bir ağ protokolüdür, çünkü bir X protokol yığınının ortasında standart bir bileşen olarak bir ağa sahip olabilirsiniz. Belirli bir kullanım durumuna bakalım. Berlin'deki bir fizikçi, İsviçre'deki CERN'de nükleer parçacık çarpıştırıcılarından biri üzerinde bir deney yapmak istiyor. Uzaktan oturum açar ve CERN'in süper bilgisayar dizilerinden birinde bir veri analizi programı çalıştırır ve sonuçları ekranda çizer.

Berlin'de fizikçinin, bazı X-sunucu yazılımlarını çalıştıran ve uzaktaki uygulamalara grafiksel bir görüntü sağlayan bir X-terminal cihazı var. X-server yazılımı, belirli bir donanım için belirli bir cihaz sürücüsüyle görüşen bir çerçeveye sahiptir. Ve X-server yazılımı X protokolünü konuşur. Dolayısıyla katmanlar grafiksel aygıt> aygıt aygıtı-> çerçeve arabelleği-> X sunucu-> X protokolü olabilir.

Daha sonra İsviçre'de, uygulama X protokolünü kullanarak bir ekrana bağlanır ve "dikdörtgen çiz" ya da "alfa karışımı" gibi grafik ekran komutları gönderir. Uygulama muhtemelen yüksek seviyede bir grafik kütüphanesi kullanır ve bu kütüphanenin de daha düşük seviyeli bir kütüphaneye dayanması muhtemeldir. Örneğin, uygulama, çekirdek grafiksel çizim komutları için Kahire adlı bir kütüphane kullanan GTK'nın üzerine inşa edilmiş WxWidget araç seti kullanılarak Python'da yazılabilir. Kahire'nin tepesinde de OPENGL olabilir. Katmanlar şöyle olabilir: WxWidgets-> GTK-> Cairo-> X Toolkit-> X protokolü. Açıkçası ortadaki şeyleri birbirine bağlayan protokoldür ve Linux veri için tamamen dahili bir aktarım olan UNIX soketlerini de desteklediğinden, isterseniz bu iki tür şey bir makinede çalışabilir.

X protokolü ve grafik ekranı, işaretleme aygıtını ve klavyeyi çalıştıran X sunucusu gibi mimarlık için temel olan her şeyi ifade eder.

GTK ve QT, pencereleri, diyalogları, düğmeleri vb. Destekleyen iki genel amaçlı GUI kütüphanesidir.

GNOME ve KDE, pencereleri grafik masaüstünde yöneten, kullanışlı uygulamalar ve düğme çubukları gibi şeyler sağlayan iki masaüstü ortamıdır. Ayrıca, uygulamalar farklı uzak bilgisayarlarda çalışıyor olsalar bile, birden fazla uygulamanın X-sunucusu (X-terminal cihazı) üzerinden iletişim kurmasına izin verir. Örneğin kopyala ve yapıştır, bir arada iletişim şeklidir. GNOME, GTK'nın üzerine inşa edilmiştir. KDE QT üzerine kuruludur. Ayrıca GNOME uygulamalarını KDE masaüstünde çalıştırmak veya KDE uygulamalarını GNOME masaüstünde çalıştırmak mümkündür, çünkü hepsi aynı X protokolüyle çalışır.


7
Bu cevap çok eski. Çekirdek uzun zamandan beri grafiklerle uğraşıyor.
mattdm

5
Mattdm'in yorumunu genişletmek için, grafikler çekirdek ağacının dışından sürücüler tarafından yönlendiriliyor olsalar bile, grafik kaynaklarına erişimi kontrol etmek için hala çekirdek hizmetlerini kullanıyorlar. Çekirdek daima yığının altında oturur.
dmckee

Çekirdeğin yığının altında olduğuna katılıyorum. Tabii ki, aygıt sürücüleri donanıma ayrıcalıklı erişim sağlamak için çekirdek hizmetlerini kullanırlar, ancak bir X uygulaması ağda konuşur, böylece ağ kartının ötesinde daha fazla katman olur.
Michael Dillon

X birçok ağ üzerinde bazı kurulumlar için önemliyken ağ üzerinde inşa edilmesi uygulama detayıdır (özellikle masaüstleri için) ve MIT-SHM gibi boyutları vardır. Çekirdek, hem DRM sürücülerine, hem de KMS'ye dokunmanın yanı sıra dokuların taşınmasında da mevcut istifte önemli rol oynuyor.
Maciej Piechotka

DRM ve KMS, grafik kartındaki grafik oluşturma işlemcisiyle özel bir iç ağ bağlantısı üzerinden iletişim kurması gereken aygıt sürücüleri hakkında daha fazla. Bu grafik yığınının bir parçası olabilir ve olmayabilir (yani Amazon EC2 Linux).
Michael Dillon

2

Bu kuruluş, bu resimden birkaç sayfadaki metinlerden daha fazlasını öğreneceksiniz:

görüntü tanımını buraya girin


1
Bu nereden? Birkaç daire içine alınmış numara var, ne anlama geliyor? Ve bu Wayland'a özgü gözüküyor, oysa ben sadece X'in veya Mir'in farklı organizasyonlara sahip olacağını düşünüyorum.
muru

1
@muru ben bu .... ile geldi bir ters arama yaparak en.wikipedia.org/wiki/EGL_%28API%29 ile şu anda imgur barındırılan rağmen bir yükleme gibi görünen bu yana, ...? Ancak kaynak görüntüyü ve onun görüntülendiği yerin bunu yapmanın doğru yolu olarak bağlamayı kabul ediyorum?
jmunsch

1
Bu görüntü gerçekten de xserver ötesinde bir şey açıklamıyor? Sana bakmak X11-clientsadece bir damla, ama o damlada bir sürü şey var. Diğer gerçekten harika cevaplar tarafından açıklandığı gibi.
jmunsch

1

Masaüstünde Linux ve bazı sunucular hala tüm X ve kare tampon grafikler. X penceresinin altında - GTK + ve Qt geliyor, YES BOTH X sistemini kullanıyor, yine çok sayıda masaüstü ortamı var - Gnome, KDE, X ekranını ve kabukları vb.

BTW, linux conf'tan yeni bir video geldi (http://blip.tv/file/4693305/). Intel'den Keith Packard X ve GL hakkında konuştu * İlginçti.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.