Bagaimana susunan grafis linux diatur?

31

Adakah yang bisa menjelaskan (mudah-mudahan dengan gambar), bagaimana tumpukan grafis linux diatur? Saya mendengar sepanjang waktu tentang X / GTK / GNOME / KDE dll, tetapi saya benar-benar tidak tahu apa yang sebenarnya mereka lakukan dan bagaimana mereka berinteraksi satu sama lain dan bagian lain dari tumpukan. Bagaimana cara Unity dan Wayland cocok?

apoorv020
sumber
1
Video pengembang Xorg Keith Packard tentang masa depan grafik Linux di linux.conf.au pada Januari 2011: linuxconfau.blip.tv/file/4693305 Ini mencakup model saat ini dan rencana untuk masa depan yang dekat dan menengah.
mattdm
arstechnica.com/open-source/guides/2011/03/... juga merupakan artikel baru-baru ini membahas stack, dan memuji komitmen Ubuntu untuk Wyland.
apoorv020
- ya, meskipun artikel itu penuh dengan potongan-potongan yang hilang dan bahkan ketidakakuratan dan, menurut penilaian saya, sangat tidak koheren.
mattdm
@mattdm - Sekalipun tidak jelas, dll., ia masuk ke gambaran yang lebih besar dari topik, yang tidak disentuh secara langsung dalam jawaban di bawah ini.
apoorv020

Jawaban:

29

Sistem X Window menggunakan arsitektur client-server. Server X berjalan pada mesin yang memiliki tampilan (monitor + perangkat input), sedangkan klien X dapat berjalan di mesin lain, dan terhubung ke server X menggunakan protokol X (tidak secara langsung, melainkan dengan menggunakan perpustakaan, seperti Xlib, atau XCB yang digerakkan oleh non-blocking yang lebih modern). Protokol X dirancang agar dapat diperluas, dan memiliki banyak ekstensi (lihat xdpyinfo(1)).

Server X hanya melakukan operasi tingkat rendah, seperti membuat dan menghancurkan jendela, melakukan operasi menggambar (saat ini sebagian besar gambar dilakukan pada klien dan dikirim sebagai gambar ke server), mengirimkan peristiwa ke windows, ... Anda dapat melihat betapa sedikitnya server X melakukan dengan menjalankan X :1 &(menggunakan nomor apa pun yang belum digunakan oleh server X lain) atau Xephyr :1 &(Xephyr menjalankan server X yang tertanam di server X Anda saat ini) dan kemudian menjalankan xterm -display :1 &dan beralih ke server X baru (Anda mungkin perlu mengatur otorisasi X menggunakan xauth(1)).

Seperti yang Anda lihat, server X tidak banyak melakukan hal itu, ia tidak menggambar judul bar, tidak melakukan minimalisasi / ikonisasi jendela, tidak mengelola penempatan jendela ... Tentu saja, Anda dapat mengontrol penempatan jendela secara manual menjalankan perintah suka xterm -geometry -0-0, tetapi Anda biasanya akan memiliki klien X khusus melakukan hal-hal di atas. Klien ini disebut manajer jendela . Hanya ada satu window manager yang aktif pada suatu waktu. Jika Anda masih memiliki terbuka telanjang X server dari perintah sebelumnya, Anda dapat mencoba untuk menjalankan sebuah window manager di atasnya, seperti twm, metacity, kwin, compiz, larswm, pawm, ...

Seperti yang kami katakan, X hanya melakukan operasi tingkat rendah, dan tidak menyediakan konsep tingkat tinggi seperti tombol, menu, bilah alat, ... Ini disediakan oleh perpustakaan yang disebut toolkit , misalnya: Xaw, GTK, Qt, FLTK, ...

Lingkungan desktop adalah kumpulan program yang dirancang untuk memberikan pengalaman pengguna yang terpadu. Jadi lingkungan desktop biasanya menyediakan panel, peluncur aplikasi, baki sistem, panel kontrol, infrastruktur konfigurasi (tempat menyimpan pengaturan). Beberapa lingkungan desktop yang terkenal adalah KDE (dibangun menggunakan Qt toolkit), Gnome (menggunakan GTK), Pencerahan (menggunakan perpustakaan toolkit sendiri), ...

Beberapa efek desktop modern sebaiknya dilakukan menggunakan perangkat keras 3d. Jadi komponen baru muncul, manajer komposit . Ekstensi X, ekstensi XComposite, mengirimkan konten jendela ke manajer komposit. Manajer komposit mengubah konten tersebut menjadi tekstur dan menggunakan perangkat keras 3d melalui OpenGL untuk menyusunnya dalam banyak cara (alpha blending, proyeksi 3d, ...).

Belum lama ini, server X berbicara langsung dengan perangkat keras. Sebagian besar penanganan perangkat ini telah pindah ke kernel OS: DRI (mengizinkan akses ke perangkat keras 3d oleh X dan klien rendering langsung), evdev (antarmuka terpadu untuk penanganan perangkat input), KMS (memindahkan pengaturan mode grafis ke kernel) , GEM / TTM (manajemen memori tekstur).

Jadi, dengan kerumitan penanganan perangkat sekarang sebagian besar di luar X, menjadi lebih mudah untuk bereksperimen dengan sistem jendela yang disederhanakan. Wayland adalah sistem jendela berdasarkan konsep manajer komposit, yaitu sistem jendela adalah manajer komposit. Wayland memanfaatkan penanganan perangkat yang telah keluar dari X dan menjadikannya menggunakan OpenGL.

Sedangkan untuk Unity, ini adalah lingkungan desktop yang dirancang untuk memiliki antarmuka pengguna yang cocok untuk netbook.

ninjalj
sumber
Tidak setuju dengan kalimat terakhir, tetapi jawaban yang sangat kaya informasi. +1.
missingfaktor
"(saat ini sebagian besar gambar dilakukan pada klien dan dikirim sebagai gambar ke server)" Itu tidak benar, beberapa dari mereka akan melakukan opengl rendering melalui ekstensi xgl, bahkan tanpa komposer.
Adam D. Ruppe
13

Tumpukan tradisional dibangun di atas 3 komponen utama:

  • X server yang menangani tampilan
  • Manajer jendela yang menempatkan windows ke dalam bingkai, menangani meminimalkan jendela dll. Itu adalah bagian dari pemisahan mekanisme dari kebijakan di Unix
  • Klien yang melakukan tugas yang bermanfaat sebagai menampilkan situs web stackexchange. Mereka dapat menggunakan protokol X secara langsung (bunuh diri), menggunakan xlib atau xcb (sedikit lebih mudah) atau menggunakan toolkit seperti GTK + atau QT.

Arsitektur X dibuat jaringan sehingga memungkinkan klien untuk berada di host yang terpisah kemudian server.

Sejauh ini baik. Namun itu adalah gambar dari jalan kembali. Saat ini bukan CPU yang menangani grafis tetapi GPU. Ada berbagai upaya untuk memasukkannya ke dalam model - dan menempatkannya ketika kernel mulai dikembangkan.

Pertama telah dibuat beberapa asumsi tentang penggunaan kartu grafis. Misalnya hanya rendering pada layar yang dianggap. Saya tidak dapat menemukan informasi ini di wikipedia sekarang tetapi DRI 1 juga berasumsi bahwa hanya satu aplikasi yang akan menggunakan OpenGL pada saat yang sama (saya tidak dapat langsung mengutipnya tetapi saya dapat menggali bug di tempat yang dekat dengan WONTFIX dengan catatan untuk menunggu DRI 2).

Beberapa solusi sementara telah diusulkan untuk render tidak langsung (diperlukan untuk WM komposit):

  • XGL - aplikasi pendukung proposisi awal yang berbicara langsung dengan kartu
  • AIGLX - proposisi yang diterima yang menggunakan properti jaringan dari protokol OpenGL
  • Solusi eksklusif NVidia

Karya pada arsitektur yang lebih baru (DRI 2) telah dimulai. Itu termasuk:

  • Dukungan dalam kernel untuk penanganan memori (GEM / TTM)
  • Pengaturan mode kernel (KMS) memungkinkan untuk mengubah resolusi di-kernel sehingga menghindari penundaan ketika beralih antara X dan konsol & beberapa fitur lainnya (seperti menampilkan pesan pada panik bahkan jika X sedang berjalan - yang IIRC direncanakan akan dilaksanakan).

Entah bagaimana orthogonal untuk pindah ke kernel pekerjaan pada driver Gallium telah dimulai. Perpustakaan Mesa dimulai sebagai implementasi OpenGL pada CPU dan kemudian mulai menggunakan akselerasi GPU. Itu selalu dikencangkan ke OpenGL. Di OpenGL 3.0 model telah berubah secara signifikan dan penulisan ulang perpustakaan tidak bisa dihindari. Namun mereka mengambil kesempatan untuk membagi kode menjadi beberapa lapisan mengekstraksi kode umum dan menyediakan API tingkat rendah yang memungkinkan untuk mengimplementasikan berbagai API 3D di atasnya - memungkinkan misalnya Wine untuk memberikan DirectX berbicara langsung ke Gallium alih-alih melalui OpenGL Lapisan API (yang mungkin tidak memiliki panggilan langsung 1-1).


Wayland adalah proyek yang menganggap hal di atas agak rumit dan terlalu "sejarah". Desain dari tahun 1984 (meskipun sangat dimodifikasi dan diadaptasi) tidak sesuai dengan awal 21 c. menurut pendukung.

Seharusnya menawarkan fleksibilitas yang lebih besar dan kinerja yang lebih baik walaupun masih kehilangan beberapa fitur penting seperti dukungan OpenGL penuh (dan penting untuk beberapa - dukungan jaringan).


Sedikit lebih banyak tentang lingkungan desktop dan manajer jendela. Manajer jendela adalah aplikasi yang bertanggung jawab atas bagaimana perilaku jendela - misalnya, ia bertanggung jawab untuk mengelola ruang kerja, menggambar titlebar (benda di atas layar dengan judul windo dan meminimalkan / memaksimalkan / menutup tombol) dll.

Pertama hanya WM minimal yang digunakan tetapi setelah itu pengguna mulai menginginkan lingkungan desktop - yaitu versi yang lebih banyak fitur, yang meliputi start menu, latar belakang desktop, dll. Namun sebagian besar lingkungan desktop bukanlah window manager walaupun sering terintegrasi.

Setelah beberapa waktu, WM komposit diperkenalkan yang menggunakan OpenGL dan rendering tidak langsung untuk melakukan pekerjaan mereka. Mereka tidak hanya memberikan efek grafis tetapi juga memungkinkan implementasi yang lebih mudah dari beberapa fitur aksesibilitas (seperti kaca pembesar).

Maciej Piechotka
sumber
Jadi kerangka kerja seperti QT memungkinkan satu aplikasi untuk menggambar sendiri, dan lingkungan desktop seperti Gnome dan KDE memutuskan cara menggambar beberapa jendela pada desktop yang sama?
apoorv020
Tidak terlalu. QT memungkinkan aplikasi untuk menggambar sendiri (yaitu memungkinkan aplikasi menentukan bagaimana perilakunya). WM menyukai metacity (untuk Gnome) atau kwin (untuk KDE) menentukan bagaimana perilaku jendela di lingkungan. Lingkungan desktop adalah paket yang berisi WM, panel dan aplikasi lain seperti PIM yang memberikan pengalaman overlall bagi pengguna.
Maciej Piechotka
9

Pertama-tama, sebenarnya tidak ada tumpukan grafis Linux. Linux tidak memiliki kemampuan tampilan grafis.

Namun, aplikasi Linux dapat menggunakan tampilan grafis dan ada sejumlah sistem yang berbeda untuk melakukan itu. Yang paling umum semua dibangun di atas X windows.

X adalah protokol jaringan karena di tengah tumpukan protokol X Anda dapat memiliki jaringan sebagai komponen standar. Mari kita lihat kasus penggunaan tertentu. Seorang fisikawan di Berlin ingin melakukan percobaan di CERN di Swiss pada salah satu penabrak partikel nuklir. Dia login jarak jauh dan menjalankan program analisis data pada salah satu array superkomputer CERN dan membuat grafik hasilnya di layarnya.

Di Berlin, fisikawan memiliki perangkat terminal-X yang menjalankan beberapa perangkat lunak server-X yang menyediakan kemampuan tampilan grafis untuk aplikasi jarak jauh. Perangkat lunak X-server memiliki framebuffer yang berbicara ke driver perangkat tertentu untuk perangkat keras tertentu. Dan perangkat lunak X-server berbicara protokol X. Jadi layer-layer tersebut bisa berupa perangkat grafis-> device driver-> frame buffer-> X server-> X protocol.

Kemudian, di Swiss, aplikasi terhubung ke layar menggunakan protokol X dan mengirimkan perintah tampilan grafik seperti "draw rectangle" atau "alpha blend". Aplikasi mungkin menggunakan pustaka grafis tingkat tinggi dan pustaka yang pada gilirannya akan didasarkan pada pustaka tingkat bawah. Misalnya aplikasi dapat ditulis dalam Python menggunakan toolkit WxWidget yang dibangun di atas GTK yang menggunakan perpustakaan yang disebut Kairo untuk perintah menggambar grafis inti. Mungkin juga ada OPENGL di atas Kairo. Lapisan mungkin seperti ini: WxWidgets-> GTK-> Kairo-> X Toolkit-> X protokol. Jelas itu adalah protokol di tengah yang menghubungkan berbagai hal, dan karena Linux juga mendukung soket UNIX, suatu transportasi internal yang sepenuhnya untuk data, kedua jenis hal ini dapat berjalan pada satu mesin jika Anda mau.

X mengacu pada protokol dan segala sesuatu yang mendasar pada arsitektur seperti X-server yang menjalankan tampilan grafis, alat penunjuk dan keyboard.

GTK dan QT adalah dua pustaka GUI tujuan umum yang mendukung windows, dialog, tombol, dll.

GNOME dan KDE adalah dua lingkungan desktop yang mengelola windows pada desktop grafis, menyediakan applet dan benda berguna seperti bilah tombol. Mereka juga memungkinkan beberapa aplikasi untuk berkomunikasi melalui server-X (perangkat terminal-X) bahkan jika aplikasi berjalan pada komputer jarak jauh yang berbeda. Misalnya salin dan rekatkan adalah bentuk komunikasi antar aplikasi. GNOME dibangun di atas GTK. KDE dibangun di atas QT. Dan dimungkinkan untuk menjalankan aplikasi GNOME pada desktop KDE atau aplikasi KDE pada desktop GNOME karena semuanya bekerja dengan protokol X yang mendasari yang sama.

Michael Dillon
sumber
7
Jawaban ini sudah lama kedaluwarsa. Kernel telah terlibat dalam grafik untuk waktu yang lama sekarang.
mattdm
5
Untuk memperluas komentar mattdm, bahkan ketika grafik didorong oleh driver dari luar pohon kernel, mereka masih menggunakan layanan kernel untuk mengontrol akses ke sumber daya grafis. Kernel selalu duduk di bagian bawah tumpukan.
dmckee
Saya tidak akan setuju bahwa kernel ada di bagian bawah stack. Tentu saja, driver perangkat memang menggunakan layanan kernel untuk mendapatkan akses istimewa ke perangkat keras, tetapi aplikasi X berbicara keluar jaringan sehingga ada lebih banyak lapisan di luar bahkan kartu jaringan.
Michael Dillon
X sedang dibangun di atas jaringan sementara yang penting untuk beberapa pengaturan pada banyak adalah detail implementasi (terutama untuk desktop) dan ada perluasan seperti MIT-SHM. Kernel memainkan peran penting dalam tumpukan saat ini baik menyediakan driver DRM, KMS serta menangani tekstur.
Maciej Piechotka
DRM dan KMS lebih banyak tentang driver perangkat yang sekarang harus berkomunikasi melalui koneksi jaringan internal khusus ke CPU rendering grafis pada kartu grafis. Ini mungkin bagian dari tumpukan grafis, dan mungkin tidak (yaitu Amazon EC2 Linux).
Michael Dillon
2

Ini organisasinya, Anda akan belajar lebih banyak dari gambar ini dari beberapa halaman teks:

masukkan deskripsi gambar di sini

Jelas
sumber
1
Dari mana asalnya? Ada beberapa angka yang dilingkari, apa artinya? Dan ini tampaknya khusus untuk Wayland, sedangkan saya akan berpikir X sendiri atau Mir akan memiliki organisasi yang berbeda.
muru
1
@muru melakukan pencarian terbalik, saya menemukan ini .... en.wikipedia.org/wiki/EGL_%28API%29 ... meskipun saat ini di-host di imgur, karena tampaknya ini adalah unggahan? Tapi saya setuju menghubungkan gambar sumber dan di mana yang ditampilkan adalah cara yang tepat untuk melakukannya?
jmunsch
1
Gambar ini tidak benar-benar menjelaskan apa pun di luar xserver? Melihat Anda X11-clientitu hanya gumpalan, tetapi ada banyak hal yang terjadi di gumpalan itu. Seperti dijelaskan oleh jawaban yang benar-benar mengagumkan lainnya.
jmunsch
1

Linux pada desktop dan beberapa server masih semuanya X dan frame buffer graphics. Di bawah jendela X -Itu datang GTK + dan Qt, YA KEDUA menggunakan sistem X, sekali lagi ada banyak lingkungan desktop - Gnome, KDE menggunakan tampilan X dan kulitnya, dll.

Btw, Ada video terbaru dari linux conf (http://blip.tv/file/4693305/). Keith Packard dari Intel berbicara tentang X dan GL * Sangat menarik.

user4858
sumber