Ngăn xếp đồ họa linux được tổ chức như thế nào?


31

Bất cứ ai cũng có thể giải thích (hy vọng với một hình ảnh), ngăn xếp đồ họa linux được tổ chức như thế nào? Tôi luôn nghe về X / GTK / Gnome / KDE, v.v., nhưng tôi thực sự không biết họ thực sự làm gì và cách họ tương tác với nhau và các phần khác của ngăn xếp. Làm thế nào để Unity và Wayland phù hợp?


1
Video của nhà phát triển Xorg Keith Packard về tương lai của đồ họa Linux tại linux.conf.au vào tháng 1 năm 2011: linuxconfau.blip.tv/file/4693305 Điều này bao gồm cả mô hình hiện tại và kế hoạch cho tương lai gần và trung bình.
mattdm

arstechnica.com/open-source/guides/2011/03/ cũng là một bài viết gần đây về vấn đề này và ca ngợi cam kết của Ubuntu đối với Wyland.
apoorv020

- vâng, mặc dù bài báo đó chứa đầy những phần còn thiếu và thậm chí không chính xác và theo đánh giá của tôi, không mạch lạc.
mattdm

@mattdm - Ngay cả khi nó không mạch lạc, v.v., nó đi vào bức tranh lớn hơn của chủ đề, không được chạm trực tiếp vào các câu trả lời dưới đây.
apoorv020

Câu trả lời:


29

Hệ thống X Window sử dụng kiến ​​trúc máy khách-máy chủ. Máy chủ X chạy trên máy có màn hình (màn hình + thiết bị đầu vào), trong khi máy khách X có thể chạy trên bất kỳ máy nào khác và kết nối với máy chủ X bằng giao thức X (không trực tiếp, mà bằng cách sử dụng thư viện, như Xlib, hoặc XCB không theo hướng sự kiện hiện đại hơn). Giao thức X được thiết kế để có thể mở rộng và có nhiều phần mở rộng (xem xdpyinfo(1)).

Máy chủ X chỉ thực hiện các hoạt động cấp thấp, như tạo và phá hủy các cửa sổ, thực hiện các thao tác vẽ (hiện nay hầu hết các bản vẽ được thực hiện trên máy khách và được gửi dưới dạng hình ảnh đến máy chủ), gửi các sự kiện tới các cửa sổ, ... Bạn có thể thấy rất ít một máy chủ X thực hiện bằng cách chạy X :1 &(sử dụng bất kỳ số nào chưa được sử dụng bởi máy chủ X khác) hoặc Xephyr :1 &(Xephyr chạy máy chủ X được nhúng trên máy chủ X hiện tại của bạn) rồi chạy xterm -display :1 &và chuyển sang máy chủ X mới (bạn có thể cần phải thiết lập ủy quyền X sử dụng xauth(1)).

Như bạn có thể thấy, máy chủ X làm rất ít, nó không vẽ các thanh tiêu đề, không thực hiện thu nhỏ / biểu tượng hóa cửa sổ, không quản lý vị trí cửa sổ ... Tất nhiên, bạn có thể điều khiển vị trí cửa sổ bằng cách chạy một lệnh thủ công thích xterm -geometry -0-0, nhưng bạn thường sẽ có một khách hàng X đặc biệt làm những việc trên. Khách hàng này được gọi là người quản lý cửa sổ . Chỉ có thể có một trình quản lý cửa sổ hoạt động tại một thời điểm. Nếu bạn vẫn còn mở máy chủ X trần của các lệnh trước đó, bạn có thể cố gắng chạy một trình quản lý cửa sổ trên nó, như twm, metacity, kwin, compiz, larswm, pawm, ...

Như chúng ta đã nói, X chỉ thực hiện các hoạt động cấp thấp và không cung cấp các khái niệm cấp cao hơn như nút bấm, menu, thanh công cụ, ... Chúng được cung cấp bởi các thư viện gọi là toolkits , ví dụ: Xaw, GTK, Qt, FLTK, ...

Môi trường máy tính để bàn là tập hợp các chương trình được thiết kế để cung cấp trải nghiệm người dùng thống nhất. Vì vậy, môi trường máy tính để bàn thường cung cấp bảng điều khiển, trình khởi chạy ứng dụng, khay hệ thống, bảng điều khiển, cơ sở hạ tầng cấu hình (nơi lưu cài đặt). Một số môi trường máy tính để bàn nổi tiếng là KDE (được xây dựng bằng bộ công cụ Qt), Gnome (sử dụng GTK), Enlightenment (sử dụng các thư viện bộ công cụ của riêng mình), ...

Một số hiệu ứng máy tính để bàn hiện đại được thực hiện tốt nhất bằng phần cứng 3d. Vì vậy, một thành phần mới xuất hiện, người quản lý tổng hợp . Một phần mở rộng X, phần mở rộng XCompozit, gửi nội dung cửa sổ đến trình quản lý hỗn hợp. Trình quản lý tổng hợp chuyển đổi các nội dung đó thành kết cấu và sử dụng phần cứng 3d thông qua OpenGL để soạn chúng theo nhiều cách (trộn alpha, chiếu 3d, ...).

Cách đây không lâu, máy chủ X đã nói chuyện trực tiếp với các thiết bị phần cứng. Một phần đáng kể của việc xử lý thiết bị này đã được chuyển sang nhân hệ điều hành: DRI (cho phép truy cập vào phần cứng 3d của máy khách X kết xuất trực tiếp), evdev (giao diện hợp nhất để xử lý thiết bị đầu vào), KMS (chuyển cài đặt chế độ đồ họa sang kernel) , GEM / TTM (quản lý bộ nhớ kết cấu).

Vì vậy, với sự phức tạp của việc xử lý thiết bị hiện chủ yếu nằm ngoài X, việc thử nghiệm các hệ thống cửa sổ đơn giản hóa trở nên dễ dàng hơn. Wayland là một hệ thống cửa sổ dựa trên khái niệm trình quản lý tổng hợp, tức là hệ thống cửa sổ là trình quản lý tổng hợp. Wayland sử dụng việc xử lý thiết bị đã chuyển ra khỏi X và kết xuất lại bằng OpenGL.

Đối với Unity, đó là môi trường máy tính để bàn được thiết kế để có giao diện người dùng phù hợp với netbook.


Không đồng ý về câu cuối cùng, nhưng một câu trả lời rất giàu thông tin. +1.
missingfaktor

"(ngày nay hầu hết các bản vẽ được thực hiện trên máy khách và được gửi dưới dạng hình ảnh đến máy chủ)" Điều đó không thực sự đúng, khá nhiều trong số chúng sẽ thực hiện kết xuất opengl thông qua tiện ích mở rộng xgl, ngay cả khi không có nhà soạn nhạc.
Adam D. Ruppe

13

Ngăn xếp truyền thống được xây dựng trên 3 thành phần chính:

  • Máy chủ X xử lý hiển thị
  • Trình quản lý cửa sổ đặt các cửa sổ vào các khung, xử lý thu nhỏ các cửa sổ, vv Đó là một phần của việc tách cơ chế khỏi chính sách trong Unix
  • Các khách hàng thực hiện nhiệm vụ hữu ích như hiển thị trang web stackexchange. Họ có thể sử dụng giao thức X trực tiếp (tự sát), sử dụng xlib hoặc xcb (dễ hơn một chút) hoặc sử dụng bộ công cụ như GTK + hoặc QT.

Kiến trúc X được tạo thành mạng do đó cho phép các máy khách ở trên máy chủ riêng biệt sau đó là máy chủ.

Càng xa càng tốt. Tuy nhiên đó là hình ảnh từ cách trở lại. Ngày nay, nó không phải là CPU xử lý đồ họa mà là GPU. Đã có nhiều nỗ lực khác nhau để kết hợp nó trong mô hình - và đặt ra khi kernel xuất hiện để mở rộng hơn.

Đầu tiên, đã có một số giả định liên quan đến việc sử dụng card đồ họa. Ví dụ, chỉ có kết xuất trên màn hình được giả định. Tôi không thể tìm thấy thông tin này trên wikipedia ngay bây giờ nhưng DRI 1 cũng cho rằng chỉ có một ứng dụng sẽ sử dụng OpenGL cùng một lúc 2).

Một vài giải pháp tạm thời đã được đề xuất để kết xuất gián tiếp (cần thiết cho WM tổng hợp):

  • XGL - đề xuất sớm hỗ trợ các ứng dụng nói chuyện trực tiếp với thẻ
  • AIGLX - đề xuất được chấp nhận sử dụng các thuộc tính mạng của giao thức OpenGL
  • Giải pháp độc quyền của NVidia

Các công trình trên kiến ​​trúc mới hơn (DRI 2) đã được bắt đầu. Bao gồm:

  • Hỗ trợ trong nhân để xử lý bộ nhớ (GEM / TTM)
  • Cài đặt chế độ hạt nhân (KMS) cho phép thay đổi độ phân giải trong nhân do đó tránh được sự chậm trễ khi chuyển đổi giữa X và bàn điều khiển và một số tính năng khác (như hiển thị thông báo trên hoảng loạn ngay cả khi X đang chạy - mà IIRC được lên kế hoạch triển khai).

Bằng cách nào đó trực giao để chuyển sang kernel, công việc trên trình điều khiển Gallium đã được bắt đầu. Thư viện Mesa bắt đầu khi triển khai OpenGL trên CPU và sau đó nó bắt đầu sử dụng tăng tốc GPU. Nó luôn được siết chặt với OpenGL. Trong OpenGL 3.0, mô hình đã thay đổi đáng kể và việc viết lại thư viện là không thể tránh khỏi. Tuy nhiên, họ đang tận dụng cơ hội để chia mã thành nhiều lớp trích xuất mã chung và cung cấp API cấp thấp cho phép triển khai API 3D khác nhau trên đầu trang - ví dụ như Wine cung cấp DirectX nói chuyện trực tiếp với Gallium thay vì thông qua OpenGL Lớp API (có thể không có cuộc gọi 1-1 trực tiếp).


Wayland là một dự án xem xét ở trên một chút phức tạp và quá "lịch sử". Thiết kế từ năm 1984 (mặc dù được sửa đổi và điều chỉnh cao) không tương ứng với đầu 21 c. theo những người đề xướng.

Giả sử cung cấp tính linh hoạt cao hơn và hiệu suất tốt hơn mặc dù vẫn còn thiếu một số tính năng quan trọng như hỗ trợ OpenGL đầy đủ (và quan trọng đối với một số - hỗ trợ mạng).


Một chút nữa về môi trường máy tính để bàn và quản lý cửa sổ. Trình quản lý cửa sổ là một ứng dụng chịu trách nhiệm về cách cửa sổ sẽ hoạt động - ví dụ: nó chịu trách nhiệm quản lý các không gian làm việc, vẽ thanh tiêu đề (thứ trên màn hình với tiêu đề Windo và các nút thu nhỏ / tối đa hóa / đóng), v.v.

Đầu tiên chỉ sử dụng WM tối thiểu nhưng sau đó người dùng bắt đầu muốn môi trường máy tính để bàn - tức là phiên bản nổi bật hơn, bao gồm bắt đầu menu, nền màn hình, v.v. Tuy nhiên, hầu hết các phần của môi trường máy tính để bàn không phải là trình quản lý cửa sổ mặc dù chúng thường được tích hợp.

Sau một thời gian, WM tổng hợp đã được giới thiệu sử dụng OpenGL và kết xuất gián tiếp để thực hiện công việc của họ. Chúng không chỉ cung cấp các hiệu ứng đồ họa mà còn cho phép thực hiện dễ dàng hơn một số tính năng trợ năng (như kính lúp).


Vì vậy, một khung như QT cho phép một ứng dụng tự vẽ và các môi trường máy tính để bàn như Gnome và KDE quyết định cách vẽ nhiều cửa sổ trên cùng một máy tính để bàn?
apoorv020

Không hẳn. QT cho phép ứng dụng tự vẽ (tức là nó cho phép ứng dụng chỉ định cách ứng xử). WM như metacity (đối với Gnome) hoặc kwin (đối với KDE) chỉ định cách cửa sổ hoạt động trong môi trường. Môi trường máy tính để bàn là gói chứa WM, bảng điều khiển và các ứng dụng khác như PIM cung cấp trải nghiệm chồng chéo cho người dùng.
Maciej Piechotka

9

Trước hết, thực sự không có ngăn xếp đồ họa Linux. Linux không có khả năng hiển thị đồ họa.

Tuy nhiên, các ứng dụng Linux có thể sử dụng màn hình đồ họa và có một số hệ thống khác nhau để thực hiện điều đó. Những cái phổ biến nhất đều được xây dựng trên đầu cửa sổ X.

X là một giao thức mạng vì ở giữa ngăn xếp giao thức X, bạn có thể có một mạng như một thành phần tiêu chuẩn. Hãy xem xét một trường hợp sử dụng cụ thể. Một nhà vật lý ở Berlin muốn thực hiện một thí nghiệm tại Cern ở Thụy Sĩ trên một trong những máy va chạm hạt nhân. Anh ta đăng nhập từ xa và chạy một chương trình phân tích dữ liệu trên một trong các mảng siêu máy tính của CERN và vẽ đồ thị kết quả trên màn hình của anh ta.

Tại Berlin, nhà vật lý này có một thiết bị đầu cuối X chạy một số phần mềm máy chủ X đang cung cấp khả năng hiển thị đồ họa cho các ứng dụng từ xa. Phần mềm máy chủ X có bộ đệm khung nói chuyện với trình điều khiển thiết bị cụ thể cho phần cứng cụ thể. Và phần mềm X-server nói giao thức X. Vì vậy, các lớp có thể là thiết bị đồ họa-> trình điều khiển thiết bị-> bộ đệm khung-> máy chủ X-> giao thức X.

Sau đó, tại Thụy Sĩ, ứng dụng kết nối với màn hình bằng giao thức X và gửi các lệnh hiển thị đồ họa như "vẽ hình chữ nhật" hoặc "pha trộn alpha". Ứng dụng có thể sử dụng thư viện đồ họa cấp cao và thư viện đó có thể sẽ lần lượt dựa trên thư viện cấp thấp hơn. Ví dụ, ứng dụng có thể được viết bằng Python bằng bộ công cụ WxWidget được xây dựng trên đỉnh GTK sử dụng thư viện có tên Cairo cho các lệnh vẽ đồ họa lõi. Cũng có thể có OPENGL trên đỉnh Cairo. Các lớp có thể như thế này: WxWidgets-> GTK-> Cairo-> X Toolkit-> X giao thức. Rõ ràng đó là giao thức ở giữa kết nối mọi thứ và vì Linux cũng hỗ trợ các socket UNIX, một phương tiện vận chuyển nội bộ hoàn toàn cho dữ liệu, hai loại điều này có thể chạy trên một máy nếu bạn muốn.

X đề cập đến giao thức và mọi thứ cơ bản cho kiến ​​trúc như máy chủ X chạy màn hình đồ họa, thiết bị trỏ và bàn phím.

GTK và QT là hai thư viện GUI có mục đích chung hỗ trợ các cửa sổ, hộp thoại, nút, v.v.

Gnome và KDE là hai môi trường máy tính để bàn quản lý các cửa sổ trên màn hình đồ họa, cung cấp các applet và các thứ hữu ích như các thanh nút. Chúng cũng cho phép nhiều ứng dụng giao tiếp thông qua máy chủ X (thiết bị đầu cuối X) ngay cả khi các ứng dụng đang chạy trên các máy tính từ xa khác nhau. Ví dụ sao chép và dán là một hình thức giao tiếp tương tác. Gnome được xây dựng trên đỉnh GTK. KDE được xây dựng trên đầu trang của QT. Và có thể chạy các ứng dụng Gnome trên máy tính để bàn KDE hoặc ứng dụng KDE trên máy tính để bàn Gnome vì tất cả chúng đều hoạt động với cùng một giao thức X bên dưới.


7
Câu trả lời này đã hết hạn. Hạt nhân đã tham gia vào đồ họa trong một thời gian dài bây giờ.
mattdm

5
Để mở rộng nhận xét của mattdm, ngay cả khi đồ họa đang được điều khiển bởi các trình điều khiển từ bên ngoài cây kernel, họ vẫn sử dụng các dịch vụ kernel để kiểm soát quyền truy cập vào tài nguyên đồ họa. Hạt nhân luôn nằm ở dưới cùng của ngăn xếp.
dmckee

Tôi sẽ không đồng ý rằng kernel nằm ở cuối stack. Tất nhiên, trình điều khiển thiết bị sử dụng các dịch vụ hạt nhân để có quyền truy cập đặc quyền vào phần cứng, nhưng một ứng dụng X đang nói ra mạng nên có nhiều lớp hơn cả card mạng.
Michael Dillon

X được xây dựng trên mạng trong khi quan trọng đối với một số thiết lập trên nhiều thiết bị là chi tiết triển khai (đặc biệt đối với máy tính để bàn) và có các phạm vi như MIT-SHM. Hạt nhân đóng vai trò quan trọng trong ngăn xếp hiện tại cả việc cung cấp trình điều khiển DRM, KMS cũng như xử lý kết cấu.
Maciej Piechotka

DRM và KMS nói nhiều hơn về trình điều khiển thiết bị hiện phải giao tiếp qua kết nối mạng nội bộ chuyên dụng với CPU kết xuất đồ họa trên card đồ họa. Đây có thể là một phần của ngăn xếp đồ họa và có thể không (ví dụ Amazon EC2 Linux).
Michael Dillon

2

Đây là tổ chức của nó, bạn sẽ tìm hiểu thêm từ hình ảnh này từ một số trang văn bản:

nhập mô tả hình ảnh ở đây


1
Nó đến từ đâu Có một vài con số được khoanh tròn, ý nghĩa của chúng là gì? Và điều này có vẻ cụ thể đối với Wayland, trong khi tôi nghĩ X một mình hoặc Mir sẽ có các tổ chức khác nhau.
muru

1
@muru thực hiện tìm kiếm ngược tôi đã đưa ra cái này .... en.wikipedia.org/wiki/EGL_%28API%29 ... mặc dù hiện tại nó được lưu trữ trên imgur, vì nó dường như là một video tải lên? Nhưng tôi đồng ý liên kết hình ảnh nguồn và nơi nó được hiển thị là cách phù hợp để làm điều đó?
jmunsch

1
Hình ảnh này không thực sự giải thích bất cứ điều gì ngoài xserver mặc dù? Nhìn vào bạn X11-clientnó chỉ là một đốm màu, nhưng có rất nhiều điều đang diễn ra trong đốm màu đó. Như được giải thích bởi các câu trả lời thực sự tuyệt vời khác.
jmunsch

1

Linux trên máy tính để bàn và một số máy chủ vẫn là tất cả đồ họa bộ đệm X và khung. Trong cửa sổ X -Có GTK + và Qt, CÓ BÓNG sử dụng hệ thống X, một lần nữa có rất nhiều môi trường máy tính để bàn - Gnome, KDE sử dụng màn hình X và vỏ của chúng, v.v.

Btw, Có một video gần đây từ linux conf (http://blip.tv/file/4693305/). Keith Packard từ Intel đã nói về X và GL * Thật thú vị.

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.