X, Xorg và D-Bus: sự khác biệt là gì?


35

Trong quá trình học cách thực hiện một số điều nhất định trong lập trình GUI (ví dụ: dành chỗ trên màn hình cho một ứng dụng), tôi phải tìm hiểu thêm về Trình quản lý cửa sổ, thường là X11 trên Linux (Tôi không chắc liệu thậm chí có bản phân phối không , sử dụng bất cứ thứ gì khác ngoài X11, mặc dù tôi đã nghe về Wayland , chưa được triển khai trong bất kỳ.)

Tôi còn khá mới với lập trình, và thiếu kiên nhẫn; Vì vậy, tôi chỉ cần lặn vào nó. Bây giờ tôi đang đọc ICCCM, với hy vọng tìm hiểu thêm. Tuy nhiên, tài liệu này nhắm đến một công chúng biết (cách) nhiều hơn tôi. Vì vậy, tôi đã xem qua một số thông tin, và tôi rất muốn nhận được một số làm rõ.

Mục 2 của trích dẫn ICCCM:

Lưu ý rằng tất cả dữ liệu được chuyển giữa chủ sở hữu và người yêu cầu thường phải đi bằng phương tiện của máy chủ trong môi trường X Phiên bản 11. Một khách hàng không thể cho rằng một khách hàng khác có thể mở cùng một tệp hoặc thậm chí giao tiếp trực tiếp. Máy khách khác có thể đang nói chuyện với máy chủ bằng cơ chế kết nối mạng hoàn toàn khác (ví dụ: một máy khách có thể là DECnet và TCP / IP khác). Do đó, việc chuyển tham chiếu gián tiếp đến dữ liệu (như tên tệp, tên máy chủ và số cổng, v.v.) chỉ được phép nếu cả hai khách hàng đồng ý cụ thể.

Theo tôi hiểu, X Window Manager được xây dựng trên Top of X Server (cảm ơn Wikipedia). Trong trích dẫn ở trên: nó nói rằng máy khách có thể giao tiếp với máy chủ bằng cách sử dụng DECnet hoặc TCP / IP. Cho đến nay tôi đã nghĩ rằng "máy chủ" là một con số của bài phát biểu, bây giờ tôi nghi ngờ: máy chủ X có phải là máy chủ như trong "máy chủ web" không? Làm thế nào tôi nên hiểu chức năng / định nghĩa của nó?

Sau đó, thường có các tham chiếu đến X11, Xorg, X Server và / hoặc X Window Manager. Nó gây nhầm lẫn: X11 có phải là một gói bao gồm Xorg và X Window Manager không? Nếu vậy, có gì khác trong gói X11 này không?

X cũng cần chuột hoặc bàn phím hoặc bất kỳ loại đầu vào nào khác: đây cũng là một phần của các chức năng của X Server phải không? Có phải X Window Manager chỉ chăm sóc màn hình?

Cuối cùng, trích dẫn ở đây cũng đề cập đến việc khách hàng có giao tiếp hay không với nhau: điều này khiến tôi nhớ đến D-Bus, nơi tôi đã sử dụng một chút cho mục đích học tập. Với D-Bus, bạn cũng có thể kích hoạt các sự kiện cửa sổ. Điều đó khiến tôi hơi bối rối về cách các chương trình nên giao tiếp với nhau: * có gì khác biệt giữa các chương trình tương tác bằng X Server hoặc sử dụng D-Bus? *

Thật xấu hổ khi thông tin này vẫn còn mơ hồ, nó làm cho nó khó học hơn, nhưng hy vọng bạn có thể mang lại một chút ánh sáng về điều này :) Cảm ơn.

Câu trả lời:


61

Bạn đang hỏi năm câu hỏi ở đây và có thể tốt hơn là hỏi năm câu hỏi ☺ Nhưng tôi sẽ nhảy vào:

  1. X là một máy chủ và có thể được so sánh với một "máy chủ web" ở chỗ nó là một quá trình lắng nghe các kết nối đến nói một giao thức cụ thể (giao thức X) và nó đưa ra câu trả lời. Các kết nối đến từ các máy khách X, có thể trên máy chủ cục bộ hoặc trên máy chủ từ xa được truy cập qua mạng.

  2. X11 là "phiên bản chính" của giao thức X, đã phát triển kể từ khi thành lập. X11 là giao thức gần đây nhất và phổ biến nhất. . )

  3. "Trình quản lý cửa sổ" là máy khách X quản lý các cửa sổ. Nó thường có trách nhiệm trang trí các cửa sổ với góc xiên / viền, thả bóng, thanh menu chứa các nút, v.v. - và xử lý logic của vị trí cửa sổ; hỗ trợ các cửa sổ được kéo, thay đổi kích thước hoặc sắp xếp lại, v.v.

  4. X yêu cầu đầu vào và nó có trách nhiệm chung để quản lý điều đó với Kernel. Trong lịch sử, X đã tự mình quản lý phần cứng rất nhiều. Trong thời hiện đại, trên nền tảng Linux, X đang dần trở nên "nhỏ hơn" và giao trách nhiệm này cho nhân Linux. Ưu điểm của việc này là: cơ sở mã X nhỏ hơn; Ít "dây chéo" hơn với kernel và X đều cố gắng quản lý cùng một thứ. (một ví dụ về điều này là giao diện sự kiện Linux, trong đó các sự kiện từ chuột, v.v. được nhân và trình điều khiển dịch sang giao diện chuẩn tại /dev/input/event*, được máy chủ X sử dụng). Lưu ý rằng trên các nền tảng khác (BSD, Solaris) X vẫn còn khá nguyên khối.

  5. Có rất nhiều, rất nhiều cách để các quá trình giao tiếp với nhau. Tôi tin rằng các máy khách X có thể tương tác bằng giao thức X (ví dụ: người quản lý cửa sổ X truyền thống cần biết khi nào khách hàng khác vẽ cửa sổ, để trang trí chúng; máy nhắn tin cần biết khi nào kích thước hoặc vị trí của cửa sổ thay đổi, để phản ánh rằng trong máy nhắn tin). D-Bus là một công nghệ truyền thông giữa các quá trình (IPC) hiện đại được phát triển để giải quyết các thiếu sót của các phương pháp khác. Nó không phải là X cụ thể.


Rất vui được cảm ơn! Điều đó thực sự hữu ích. Về 5 câu hỏi: tôi không biết giao thức trong trường hợp đó là gì, nhưng nếu quản trị viên muốn tôi tách chúng ra, tôi sẽ nghe về nó. Cá nhân tôi muốn có nó trong một tài liệu và xem 5 câu hỏi dưới dạng câu hỏi phụ cho tiêu đề. Cảm ơn một lần nữa.
Benjamin

Điểm không thể chuyển giao thức là Hệ thống X Window được thiết kế để các ứng dụng ("máy khách") không cần chạy trên cùng một máy chủ, tức là bạn có thể đăng nhập vào máy khác, chạy chương trình ở đó và cửa sổ mở trên màn hình của bạn giống như một ứng dụng địa phương. Nếu một chương trình khác hỏi "ID tiến trình của bạn là gì, vì vậy tôi có thể nói chuyện trực tiếp với bạn", không có cách nào để trả lời chính xác câu hỏi này.
Simon Richter

Bạn có thể không muốn rằng tài nguyên được chia sẻ bởi máy chủ X là màn hình bao gồm một hoặc nhiều màn hình và hai hoặc nhiều thiết bị đầu vào (bàn phím, chuột)
hildred 30/12/13

Chắc chắn hữu ích cả 5 câu hỏi cùng nhau. Cảm ơn bạn.
Harvey

@hildred Trong trường hợp màn hình cảm ứng trong cấu hình kiosk, bạn có thể có ít nhất một thiết bị đầu vào.
Shadur
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.