Chuyển từ windows sang linux: Hiểu biết - X Window System, X Server, Xorg, Xfree86


10

Tôi là nhà phát triển windows (Win32api) chuyển từ Windows sang Linux. Trong khi cài đặt linux có rất nhiều điều cần biết về X11, X Window System, X Server, Xorg, Xfree86 và những gì không.

Tại sao chúng ta không nhận thức được những điều như vậy trong các cửa sổ? Wiki bài viết về những điều này làm tôi sợ. Có ai có thể giải thích những điều này? Họ làm việc như thế nào? Tại sao nó quá phức tạp trong linux & không phải trong windows?

Bất kỳ tài liệu tham khảo tốt cũng được đánh giá cao.

Tái bút: Tôi thích biết nội bộ, đừng ngần ngại đi sâu.


1
Sau khi đọc câu trả lời, hãy đọc bài viết này "Suy nghĩ và lan man trên giao thức X" julien.danjou.info/blog/ Kẻ
móng vuốt

1
Liên kết như đã thay đổi julien.danjou.info/blog/2010/ Từ
fstamour

Câu trả lời:


13

Windows cung cấp cho bạn một triển khai duy nhất của một máy tính để bàn duy nhất trên một triển khai API / khung duy nhất, tất cả được thực hiện bởi Microsoft.

Trên các hệ thống Unix, bạn nhận được API / framework (Hệ thống cửa sổ X11 / X) tồn tại nhiều triển khai (Xorg, Xfree86), trên đó bạn nhận được các API / khung "cấp cao hơn" khác nhau (GTK +, Qt, ... ) bởi vì X11 thô rất nguyên thủy, trên hết bạn có nhiều máy tính để bàn khác nhau (Gnome, KDE, ...), tất cả được thực hiện bởi những người khác nhau.

Ngoài ra, hệ thống X11 đã được thiết kế từ đầu với các GUI từ xa - tức là một máy điện tử hiển thị GUI của ứng dụng chạy từ xa - giới thiệu các khái niệm về "Máy chủ X" và "Máy khách X".

Sau đó, có một danh pháp "cảm nhận" sai cách cho người mới: Máy cục bộ của bạn đang chạy "Máy chủ X" cung cấp dịch vụ "hiển thị GUI", trong khi máy từ xa là "Máy khách X" sử dụng dịch vụ trên máy của bạn để hiển thị GUI.

Vâng, đó là tổng quan nhanh chóng; một khi bạn đã sắp xếp nó ra, việc hiểu bất kỳ bài viết / bài viết diễn đàn nào về chủ đề này sẽ trở nên dễ dàng hơn nhiều.

Chỉnh sửa: Để trả lời hai bình luận đầu tiên của OP.

Có, "X11" chỉ là một giao thức và Xorg / XFree86 là hai triển khai. Ở mức cơ bản, X11 chỉ là về vẽ các đường và dấu chấm, điều này không hữu ích lắm nếu bạn muốn làm GUI.

Trên giao thức X11, mọi người đã triển khai nhiều thứ và thật khó để so sánh 1: 1 với Windows vì Microsoft không bao giờ bận tâm đến việc thực sự tách biệt mọi thứ. Ngoài ra, tôi không phải là nhà phát triển loại GUI, tức là trải nghiệm thực tế của tôi với một trong hai hệ thống là tối thiểu.

Ở phía dưới, "trình quản lý cửa sổ" cung cấp một cửa sổ (xử lý viền, đóng / thu nhỏ / phóng to các nút, thay đổi kích thước, v.v.) và cung cấp "bất động sản" trong cửa sổ cho bộ công cụ widget. Có nhiều trình quản lý cửa sổ, một số bắt chước các hệ thống khác (Windows, MacOS, AmigaOS, bất cứ thứ gì) và chúng hầu như có thể hoán đổi cho nhau trong hệ thống còn lại.

"Bộ công cụ widget" cung cấp cho bạn các nút, thanh trượt, trường văn bản, vv để xây dựng GUI của bạn. Đây là những gì bạn (với tư cách là nhà phát triển ứng dụng) thực sự có thể "nhìn thấy", API khôn ngoan và điều quyết định phần lớn "giao diện" của ứng dụng của bạn.

"Máy tính để bàn" xây dựng một số ứng dụng dựa trên sự kết hợp của bộ công cụ / trình quản lý cửa sổ tiện ích nhất định, để cung cấp giao diện nhất quán. Bạn không cần phải bận tâm đến những thứ này trừ khi bạn thực sự muốn phát triển máy tính để bàn.

Máy tính để bàn "Gnome" sử dụng bộ công cụ tiện ích "GTK +" trên đầu trình quản lý cửa sổ "Metacity".

Máy tính để bàn "KDE" sử dụng bộ công cụ phụ tùng "Qt" trên đầu trình quản lý cửa sổ "KWin".

Lưu ý rằng đặc biệt là cả hai, GTK + và Qt, đã phát triển vượt xa các "bộ công cụ phụ tùng" đơn giản thành "khung phát triển ứng dụng". Nếu bạn muốn phát triển ứng dụng GUI cho Linux, bạn phải chọn một trong hai ứng dụng bạn muốn sử dụng. Có nhiều sự lựa chọn hơn, nếu bạn muốn có một ứng dụng "nhẹ" hơn (không cần phụ thuộc vào thư viện lớn), nhưng ngày nay hầu hết các hệ thống đều có cài đặt lib GTK + và Qt.

Hoàn toàn có thể sử dụng các ứng dụng Qt trên máy tính để bàn Gnome hoặc ứng dụng GTK + trên máy tính để bàn KDE (không phải lúc nào cũng như vậy), vì vậy bạn phải lo lắng về khả năng tương thích. Đưa ra lựa chọn giữa hai ứng dụng có chức năng tương đương, mọi người thường sẽ thích ứng dụng sử dụng các tiện ích "gốc" trên máy tính để bàn của họ, nhưng tôi không lo lắng về điều đó.

Khác, các gạch đầu dòng quan trọng hơn trong việc lựa chọn "bộ công cụ phụ tùng": Điều khoản cấp phép, hỗ trợ cho ngôn ngữ bạn chọn, khả năng tương thích đa nền tảng.


Post Scriptum : Quay trở lại vài năm sau, tôi đã tự mình nắm bắt một số kinh nghiệm lập trình GUI và nhận ra một điều còn thiếu trong phần giải thích ở trên nếu bạn đang tìm kiếm một lời khuyên "đi theo con đường nào": wxWidgets . Đây là một khung xây dựng dựa trên bất kỳ thứ gì bạn đang sử dụng nguyên bản và cho phép phát triển GUI di động trong suốt mà không làm giảm hiệu suất hoặc có bất kỳ chuỗi cấp phép nào được đính kèm. API C ++. Đó là con đường tôi đã chọn cho nhu cầu GUI của mình và tôi cảm thấy nó nên được đề cập cho đầy đủ.


+1 và lưu ý rằng nếu bạn quản lý để chọn một khung (ví dụ Qt), bạn sẽ không cần quan tâm nhiều đến tất cả các công cụ X (một số mặc dù).
Peter Jaric

+1 & Vì vậy, phần GUI của API Windows tương đương với Qt & GTK +. Sau đó, những gì tương đương với X Window System trong windows? Tại sao & làm thế nào tồn tại KDE & Gnome?
móng vuốt

@DevSolar: bạn đang đi đúng hướng. xin vui lòng mô tả thêm một chút. X11 chỉ là thông số kỹ thuật như POSIX? và xorg & xfree86 là hai triển khai của nó? Nếu có GTK + & Qt, nhu cầu của Gnome & KDE là gì? Vui lòng so sánh từng bước / cấp độ với các cửa sổ. Đó là dễ hiểu cho tôi.
móng vuốt

At the bottom, a "window manager"Trình quản lý cửa sổ xây dựng trên Hệ thống X Window? Nếu vậy, hệ thống cửa sổ sẽ ở dưới cùng phải không? Bạn đang làm cho tôi nhầm lẫn với quản lý cửa sổ và hệ thống cửa sổ.
móng vuốt

"X11" / "Cửa sổ X (Hệ thống)", được triển khai bởi "Xorg" / "XFree86", ở dưới cùng và cung cấp các dấu chấm và đường kẻ. Một "trình quản lý cửa sổ" ("Metacity" / "Kwin") cung cấp các cửa sổ (khung, kéo, thay đổi kích thước, đóng, v.v.).
DevSolar

3

Tôi không hiểu tại sao bạn cảm thấy khó hiểu như vậy để giải thích được cung cấp bởi http://en.wikipedia.org/wiki/X_Window_System nhưng dù sao đi nữa:

Hệ thống X Window thường bao gồm 2 phần:

  • Một máy chủ (được gọi là XServer)
  • Khách hàng (được gọi là .. XClents :))

Máy chủ kết nối với phần cứng (thẻ grafic, thiết bị đầu vào) và cho phép khách hàng sử dụng các tài nguyên này. Các máy khách kết nối với xserver và sử dụng các tài nguyên được cung cấp.

Có các máy chủ cho Unix (Xorg, mac folks có v.v.) và cho Windows (Hummingbird, cổng Xorg của Cygwin, v.v.).

Bạn có thể kết nối máy khách trên một HĐH với các máy chủ đang chạy trên HĐH khác.

Giao tiếp giữa máy chủ và máy khách được thực hiện thông qua Xlib-API hoặc (hiện đại hơn) xcb-API .

Để tạo một ứng dụng đơn giản, thông thường bạn chỉ cần làm điều này:

  • kết nối với máy chủ x
  • yêu cầu xserver tạo một cửa sổ (sẽ cung cấp cho bạn "xử lý")
  • nói với xserver để mở cửa sổ
  • xử lý các sự kiện (chuột, bàn phím, phơi sáng, chuyển động, v.v.)
  • vẽ các thứ vào cửa sổ (văn bản, grafics, v.v.)
  • thoát khỏi ứng dụng bằng cách yêu cầu xserver giải phóng tất cả tài nguyên

và thực hiện.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.