Pindah dari windows ke linux: Memahami - Sistem X Window, X Server, Xorg, Xfree86

10

Saya seorang pengembang windows (Win32api) pindah dari Windows ke Linux. Saat menginstal linux ada banyak hal yang perlu diketahui tentang X11, X Window System, X Server, Xorg, Xfree86 dan apa yang tidak.

Kenapa kita tidak menyadari hal-hal seperti itu di windows? Artikel wiki tentang ini membuatku takut. Adakah yang bisa menjelaskan hal ini? Bagaimana mereka bekerja Mengapa begitu rumit di linux & tidak di windows?

Referensi yang baik juga dihargai.

PS: Saya suka mengenal bagian dalam, jangan ragu untuk menggali lebih dalam.

cakar
sumber
1
Setelah membaca jawaban, baca artikel ini "Pikiran dan bertele-tele tentang protokol X" julien.danjou.info/blog/…
claws
1
Tautan yang diubah julien.danjou.info/blog/2010/...
fstamour

Jawaban:

13

Windows memberi Anda implementasi tunggal dari satu desktop di atas implementasi tunggal API / kerangka tunggal, semua dilakukan oleh Microsoft.

Pada sistem Unix, Anda mendapatkan API / kerangka kerja (X11 / X Window System) yang memiliki beberapa implementasi (Xorg, Xfree86), di atasnya Anda mendapatkan berbagai kerangka / kerangka kerja "level lebih tinggi" (GTK +, Qt, ... ) karena raw X11 sangat primitif, di atasnya Anda mendapatkan berbagai desktop (Gnome, KDE, ...), semua dikerjakan oleh orang yang berbeda.

Selain itu, sistem X11 telah dirancang dari bawah ke atas dengan mempertimbangkan GUI jarak jauh - yaitu, mesin lokal yang menampilkan GUI dari aplikasi yang dijalankan dari jarak jauh - yang memperkenalkan konsep "Server X" dan "Klien X".

Lalu ada nomenklatur yang "merasakan" jalan yang salah bagi pendatang baru: Mesin lokal Anda menjalankan "X Server" yang menyediakan layanan "display a GUI", sedangkan mesin jarak jauh adalah "Klien X" yang menggunakan layanan tersebut. pada mesin Anda untuk menampilkan GUI.

Nah, itulah gambaran singkatnya; setelah Anda menyelesaikannya, memahami artikel / posting forum apa pun tentang topik tersebut akan menjadi jauh lebih mudah.

Sunting: Untuk menjawab dua komentar pertama OP.

Ya, "X11" hanyalah sebuah protokol, dan Xorg / XFree86 adalah dua implementasi. Pada level dasarnya, X11 hanya tentang menggambar garis dan titik, yang tidak terlalu berguna jika Anda ingin melakukan GUI.

Di atas protokol X11, orang menerapkan banyak hal, dan cukup sulit untuk melakukan perbandingan 1: 1 dengan Windows karena Microsoft tidak pernah repot untuk benar-benar memisahkan hal-hal. Saya juga bukan pengembang tipe GUI, yaitu pengalaman saya yang sebenarnya dengan kedua sistem minimal.

Di bagian bawah, "manajer jendela" menyediakan jendela (menangani batas, menutup / memperkecil / memaksimalkan tombol, mengubah ukuran dll), dan menawarkan "real estat" di dalam jendela ke set alat widget. Ada banyak window manager, beberapa meniru sistem lain (Windows, MacOS, AmigaOS, apa pun), dan mereka sebagian besar transparan dipertukarkan ke sistem yang tersisa.

"Toolset widget" menawarkan tombol, bilah geser, bidang teks, dll. Untuk membangun GUI Anda. Inilah yang Anda (sebagai pengembang aplikasi) benar-benar dapatkan untuk "melihat", bijaksana API, dan apa yang menentukan sebagian besar "tampilan & rasa" dari aplikasi Anda.

"Desktop" membangun sejumlah aplikasi di atas kombinasi widget toolset / window manager tertentu, untuk memberikan tampilan & nuansa yang konsisten. Anda tidak perlu repot dengan ini kecuali Anda benar-benar ingin mengembangkan desktop itu sendiri.

Desktop "Gnome" menggunakan widget toolset "GTK +" di atas window manager "Metacity".

Desktop "KDE" menggunakan widget toolset "Qt" di atas window manager "KWin".

Perhatikan bahwa terutama keduanya, GTK + dan Qt, telah berkembang jauh melampaui "alat widget" sederhana menjadi "kerangka pengembangan aplikasi". Jika Anda ingin mengembangkan aplikasi GUI untuk Linux, secara efektif Anda harus memilih yang mana dari dua yang ingin Anda gunakan. Ada lebih banyak pilihan, jika Anda menginginkan aplikasi yang lebih "ringan" (tidak memerlukan dependensi perpustakaan besar), tetapi saat ini sebagian besar sistem memiliki GTK + dan Qt libs yang sudah terpasang.

Sangat mungkin untuk menggunakan aplikasi Qt pada desktop Gnome atau aplikasi GTK + pada desktop KDE (tidak selalu seperti itu), jadi Anda harus sedikit khawatir tentang kompatibilitas. Diberi pilihan antara dua aplikasi dengan fungsionalitas yang sebanding, orang biasanya akan lebih suka aplikasi menggunakan widget "asli" dari desktop pilihan mereka, tapi saya tidak khawatir tentang itu.

Poin-poin penting lainnya, yang lebih penting dalam pilihan "widget toolset": Istilah lisensi, dukungan untuk bahasa pilihan Anda, kompatibilitas lintas platform.


Post Scriptum : Kembali beberapa tahun kemudian, saya telah mengambil beberapa pengalaman pemrograman GUI saya sendiri, dan menyadari satu hal yang hilang dalam penjelasan di atas jika Anda mencari saran "jalan yang harus dituju": wxWidgets . Ini adalah kerangka kerja yang dibangun di atas apa pun yang Anda gunakan secara asli, dan memungkinkan pengembangan GUI portabel secara transparan , tanpa mengorbankan kinerja atau memasang ikatan lisensi. API C ++. Ini jalan yang saya pilih untuk kebutuhan GUI saya, dan saya merasa harus disebutkan untuk kelengkapannya.

DevSolar
sumber
+1 dan perhatikan bahwa jika Anda berhasil memilih kerangka kerja (misalnya Qt), Anda tidak perlu terlalu peduli tentang semua hal X (beberapa meskipun).
Peter Jaric
+1 & Jadi bagian GUI dari Windows API setara dengan Qt & GTK +. Lalu apa yang setara dengan Sistem X Window di windows? mengapa & bagaimana ada KDE & Gnome?
cakar
@DevSolar: Anda berada di jalur yang benar. tolong sedikit lebih deskriptif. X11 hanyalah spesifikasi seperti POSIX? dan xorg & xfree86 adalah dua implementasinya? Jika ada GTK + & Qt, apa kebutuhan Gnome & KDE? Silakan bandingkan setiap langkah / level dengan windows. Itu mudah dimengerti bagi saya.
cakar
At the bottom, a "window manager"Manajer jendela dibangun di atas Sistem X Window? jika demikian, sistem windows akan berada di kanan bawah? Anda membuat saya bingung dengan manajer jendela & sistem jendela.
cakar
"X11" / "X Window (System)", diimplementasikan oleh "Xorg" / "XFree86", berada di bagian paling bawah dan menawarkan titik dan garis. "Pengelola jendela" ("Metacity" / "Kwin") menawarkan jendela (bingkai, seret, ubah ukuran, tutup dll.).
DevSolar
3

Saya tidak mengerti mengapa Anda merasa sangat sulit untuk memahami penjelasan yang diberikan oleh http://en.wikipedia.org/wiki/X_Window_System tetapi bagaimanapun juga:

Sistem X Window biasanya terdiri dari 2 bagian:

  • Server (disebut XServer)
  • Klien (disebut .. XClients :))

Server terhubung ke perangkat keras (kartu grafis, perangkat input) dan memungkinkan klien untuk menggunakan sumber daya ini. Klien terhubung ke xserver dan menggunakan sumber daya yang disediakan.

Ada server untuk Unix (Xorg, orang-orang mac memiliki dll sendiri) dan untuk Windows (Hummingbird, Cygwin port Xorg dll).

Anda dapat menghubungkan klien di satu OS ke server yang berjalan di OS lain.

Komunikasi antara server dan klien dilakukan melalui Xlib-API atau (lebih modern) xcb-API .

Untuk membuat aplikasi sederhana, Anda biasanya hanya melakukan ini:

  • terhubung ke xserver
  • meminta xserver untuk membuat jendela (yang akan memberi Anda "pegangan")
  • beri tahu xserver untuk membuka jendela
  • proses acara (mouse, keyboard, pencahayaan, gerakan dll)
  • menggambar barang ke jendela (teks, grafika dll)
  • keluar dari aplikasi dengan memberi tahu xserver untuk melepaskan semua sumber daya

dan .. selesai.

akira
sumber