Làm thế nào để các ứng dụng KDE chạy dưới Gnome?


19

Nếu Gnome sử dụng GTK + và KDE sử dụng Qt, tại sao các ứng dụng KDE có thể chạy dưới Gnome?

Câu trả lời:


30

Cả GTK và Qt đều là bộ công cụ để xây dựng giao diện đồ họa. Mỗi bộ công cụ UI cung cấp các chức năng riêng cho các chương trình để tạo các widget (nút, hộp văn bản ...) và có dạng thư viện mà chương trình đồ họa liên kết với. Một chương trình được viết cho Gnome sẽ sử dụng GTK ( libgdklibgtk), trong khi các chương trình KDE sử dụng Qt ( libQtCorelibQtGui), các chương trình Khai sáng sử dụng EFL, v.v.

Tuy nhiên, tất cả các bộ công cụ này sử dụng cùng một hệ thống cửa sổ X và cùng một giao thức X11 . Để làm cho mọi thứ xuất hiện trên màn hình, bộ công cụ kết nối với máy chủ X đang chạy (thường là Xorg, trước đây gọi là XFree86), gửi các lệnh X11 (tạo cửa sổ, vẽ một cái gì đó trong cửa sổ) và nhận các sự kiện đầu vào X11 (chuột, bàn phím, thay đổi kích thước cửa sổ , & c) trở lại.

(Hầu hết các bộ công cụ hiện đại, như GTK, Qt hoặc EFL, tự thực hiện bản vẽ ưa thích và chỉ sử dụng X11 để gửi hình ảnh hoàn chỉnh của toàn bộ cửa sổ và máy chủ X chỉ đưa nó lên màn hình. Thay vào đó, các công cụ cũ hơn như lXaw hoặc Motif sử dụng X11 để vẽ các nguyên thủy như đường hoặc hình chữ nhật hoặc văn bản và máy chủ X thực hiện tất cả kết xuất.)

Sau đó, máy chủ X thực hiện công việc kết hợp mọi thứ lại với nhau, nói chuyện với card đồ họa của bạn, v.v. Bằng cách này, bạn có thể chạy các chương trình sử dụng nhiều phiên bản khác nhau của các bộ công cụ khác nhau, vì cuối cùng, chúng chỉ sử dụng cùng một phương tiện HĐH.

Cơ chế chứ không phải chính sách

Tình huống nhiều bộ công cụ không phảiduy nhất đối với X - ví dụ: bạn sẽ tìm thấy các chương trình Windows sử dụng tiêu chuẩn comctl32mà cả WPF, .NET WinForms, Aura của Chrome, XUL của Firefox và thậm chí là cùng GTK hoặc Qt. Hầu hết các trò chơi sử dụng điều khiển theo kiểu riêng của họ. Thực sự, điều này là có thể trên bất kỳ hệ thống đồ họa nào cho phép bạn vẽ một hình ảnh trên toàn bộ cửa sổ.

Tuy nhiên, một trong những nguyên tắc của X là "cơ chế, không phải chính sách". Điều này có nghĩa là máy chủ X chỉ cung cấp cơ chế cho các máy khách của nó (các chương trình đồ họa) để thực hiện nhiều việc khác nhau, nhưng áp đặt càng ít quy tắc khi cần thiết . Nói cách khác, X đưa điều này đến mức độ lớn hơn bất kỳ hệ thống đồ họa nào khác.

Ví dụ, một trong những phần không thể thiếu của hệ thống đồ họa là quản lý cửa sổ - bản vẽ các khung (còn gọi là trang trí) xung quanh mỗi cửa sổ, khả năng di chuyển và thay đổi kích thước cửa sổ, v.v. Windows và OS X có trình quản lý cửa sổ được tích hợp trong hệ thống, nhưng trong X, nó chạy như một chương trình riêng biệt - bộ X.Org đi kèm với một twmmôi trường máy tính để bàn tối thiểu , nhưng hầu hết tất cả các máy tính để bàn đều có trình quản lý cửa sổ riêng (Gnome có Sawfish, Metacity, gnome-shell; KDE có KWin) cung cấp tích hợp với môi trường máy tính để bàn tương ứng.

(Giống như bộ công cụ, các trình quản lý cửa sổ "tổng hợp" hiện đại thực sự đảm nhận công việc của Xorg là soạn tất cả các cửa sổ lên hình ảnh màn hình cuối cùng, cho phép thêm những thứ như bóng hoặc hiệu ứng.)

Với môi trường máy tính để bàn hiện đại, điều này thực sự cũng đã tạo ra vấn đề. Để sử dụng ví dụ phổ biến nhất: chức năng "bàn phím lấy" tương tự được sử dụng bởi các phím nóng; menu bật lên; và trình bảo vệ màn hình và chỉ một chương trình có thể sử dụng nó cùng một lúc. Điều này có nghĩa là bạn không thể khóa màn hình trong khi menu bật lên mở hoặc bỏ qua các bài hát trong khi màn hình bị khóa. Đây là một trong nhiều lý do Wayland đang được tạo ra để thay thế cho X11.

Lưu ý bên

Về mặt kỹ thuật, điều này thậm chí có nghĩa là bạn có thể chạy các chương trình X trên một máy tính khác, nói chuyện với máy chủ X trên máy của bạn qua mạng. Thật vậy, đây là trường hợp sử dụng chính trong những ngày đầu và đó là nơi tên " máy chủ X " xuất hiện ở nơi đầu tiên. Có thể chạy máy chủ X trên máy Mac và hiển thị các cửa sổ được tạo bởi các chương trình chạy trên Linux, FreeBSD, thậm chí OpenVMS.

Tuy nhiên, như đã đề cập ở trên, các bộ công cụ hiện đại thực hiện tất cả các bản vẽ phía máy khách (đồ họa ưa thích và phông chữ đẹp khá khó thực hiện với các nguyên hàm X11) và chỉ đẩy các hình ảnh cuối cùng lên máy chủ X, rất nhanh cục bộ, nhưng yêu cầu bit công bằng của băng thông mạng.

(Các giao thức khác, như RFB (còn gọi là VNC) hoặc "Máy tính từ xa" của Microsoft, được thiết kế cho việc này và chúng có những cách nén hình ảnh cửa sổ rất hiệu quả.)


1
Vòng lặp sự kiện của Qt kết thúc GTK, vì vậy bạn thậm chí có thể kết hợp mã Qt và GTK trong cùng một ứng dụng (thông thường, điều này chỉ đi kèm với, như, các plugin).
Alex P

@Alex: Ý của bạn là "có thể bao bọc" trong vòng lặp sự kiện của Qt có thể phân phối các sự kiện tới GTK hay bạn nói rằng Qt thực sự dựa vào GLib cho vòng lặp sự kiện?
grawity

1
Qt cũng có thể sử dụng triển khai vòng lặp sự kiện thuần túy của riêng mình, nhưng nó bao bọc Glib theo mặc định (ít nhất, trong Qt4 - Tôi chưa nhìn vào cách Qt5 thực hiện nó). Có một cờ ẩn ($ QT_NO_GLIB) kiểm soát nó khi chạy.
Alex P

7

Một phần của câu trả lời là các môi trường máy tính để bàn hàng đầu (Gnome, KDE, XFCE, có lẽ các môi trường khác) hoạt động cùng nhau dưới http://freedesktop.org để có thể tương tác như vậy. Một trong những thông số kỹ thuật được FD.o công bố là EWMH , đảm bảo mức độ tương thích nhất định giữa các trình quản lý cửa sổ (đối với các tính năng hiện đại, không chỉ quản lý cửa sổ cơ bản).


4

Khi chạy trong Gnome, các ứng dụng KDE vẫn gọi các thư viện Qt được chia sẻ mà chúng phụ thuộc. Điều tương tự áp dụng cho mọi ứng dụng đang chạy trong bất kỳ Môi trường máy tính để bàn nào khác. Họ không hạn chế những gì có thể được gọi và những gì không thể.

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.