How Linux Works Chương 14 · A Brief Survey of the Linux Desktop and Printing

Chương 14 · Khảo sát nhanh desktop Linux và in ấn Chapter 14 · A Brief Survey of the Linux Desktop and Printing

Desktop không phải một tháp tầng — nó là một nhóm thành phần nói chuyện với nhau Màn hình của bạn là một nhóm thợ làm việc chung The desktop is not a tower of layers — it is a set of components talking to each other

Ward mở chương này bằng một lời cảnh báo về hình dung sai: khác với lưu trữ hay mạng, dựng một cấu trúc desktop không đòi hỏi một hệ thống phân tầng đồ sộ. Thay vào đó, mỗi thành phần làm một việc cụ thể và trao đổi với các thành phần khác khi cần.1 Một số thành phần có dùng chung các khối xây dựng — đặc biệt là thư viện của các graphical toolkit — và bạn có thể xem chúng như những lớp trừu tượng đơn giản, nhưng sâu đến đó là hết.1

Ở các chương trước, mọi thứ đều xếp tầng: tầng trên gọi tầng dưới. Phần màn hình thì khác. Nó giống một nhóm thợ trong xưởng hơn: mỗi người làm một việc, ai cần gì thì gọi người kia. Không có ông chủ ngồi trên đỉnh tháp. Nhớ nhé: desktop là một nhóm bạn làm chung, không phải một cái tháp.

Ward opens this chapter by warning against the wrong mental picture: unlike storage or networking, creating a desktop structure does not involve an extensive hierarchy of layers. Instead, each component performs a specific task, communicating with other components as necessary.1 Some components do share common building blocks — in particular the libraries behind graphical toolkits — and you can think of those as simple abstraction layers, but that is about as deep as it goes.1

Ông cũng nói thẳng rằng chương này sẽ giới hạn phần thực hành ở vài tiện ích chẩn đoán — những công cụ “không hữu ích lắm trong công việc hằng ngày”, vì phần lớn giao diện đồ hoạ đâu bắt bạn gõ lệnh để dùng chúng — nhưng chúng giúp bạn hiểu cơ chế bên dưới, và đôi khi còn vui nữa.1 Đọc chương 14 mà kỳ vọng một bộ công cụ quản trị desktop là đọc sai ý định của tác giả: đây là chuyến tham quan có hướng dẫn viên, không phải sổ tay vận hành.

Luận đề của chương: tại thời điểm sách được viết, lõi của desktop Linux đang ở trạng thái chuyển tiếp — từ đầu cho tới gần đây, desktop Linux dùng X (X Window System, còn gọi là Xorg theo tên tổ chức bảo trì), nhưng nhiều bản phân phối đã chuyển sang bộ phần mềm dựa trên giao thức Wayland để dựng hệ thống cửa sổ.1 Hiểu hai lõi đó, cộng với D-Bus và CUPS, là đủ để định vị gần như mọi trục trặc trên màn hình và ở máy in.

Ý chính: phần vẽ cửa sổ trên Linux đang đổi từ cách cũ (tên là X) sang cách mới (tên là Wayland). Ngoài ra còn hai cái tên nên nhớ: D-Bus để các chương trình nhắn tin cho nhau, và CUPS để in. Nhớ nhé: X cũ, Wayland mới, D-Bus để nhắn tin, CUPS để in.

The chapter's thesis: at the time of writing, the core of the Linux desktop is in a transitional state — from the beginning until recently Linux desktops used X (the X Window System, also known as Xorg after its maintaining organization), but many distributions have moved to a software set based on the Wayland protocol to build a windowing system.1 Understanding those two cores, plus D-Bus and CUPS, is enough to locate almost any trouble on the screen or at the printer.

Cụm khái niệm 01 Concept cluster 01

Các thành phần của desktop: từ framebuffer lên tới ứng dụng Trên màn hình, ai làm việc gì Desktop components: from the framebuffer up to applications

Cấu hình desktop trên Linux có độ linh hoạt rất lớn: phần lớn thứ người dùng cảm nhận — cái “look and feel” — đến từ các ứng dụng hoặc từ những khối xây dựng của ứng dụng. Không thích một ứng dụng thì thường có cái khác thay thế; không có thứ bạn cần thì bạn tự viết.1 Nhưng để phối hợp được với nhau, mọi ứng dụng phải có một điểm chung — và điểm chung đó chính là thứ đang thay đổi.1

Trên Linux, bạn được chọn gần như mọi thứ trên màn hình: kiểu cửa sổ, kiểu nút, kiểu thanh menu. Nhưng muốn các chương trình chơi chung với nhau thì phải có một luật chung. Luật chung đó đang được thay mới. Nhớ nhé: chọn gì cũng được, nhưng luật chung thì phải có một.

Linux desktop configurations offer a great deal of flexibility: most of what the user experiences — the "look and feel" — comes from applications or from the building blocks of applications. If you dislike a particular application you can usually find an alternative; if what you want doesn't exist, you can write it yourself.1 But to work together, all applications need something in common — and that common thing is exactly what is changing.1

Định nghĩa. Framebuffer là mảng bộ nhớ mà phần cứng đồ hoạ đọc rồi truyền ra màn hình để hiển thị; mỗi điểm ảnh được biểu diễn bằng vài byte trong đó. Muốn đổi hình ảnh, bạn phải ghi giá trị mới vào bộ nhớ framebuffer.1

Nói đơn giản. Framebuffer là tấm bảng nhớ chứa màu của từng chấm trên màn hình. Muốn đổi hình thì sửa màu các chấm. Nhớ nhé: màn hình chỉ là một bảng màu nằm trong bộ nhớ.

Definition. A framebuffer is a chunk of memory that the graphics hardware reads and transmits to the screen for display; a few bytes in it represent each pixel. To change how something looks, you write new values into framebuffer memory.1

câu hỏi lõi của mọi
hệ thống cửa sổ:
  ai được ghi vào
  framebuffer, và ở đâu?
X → server quyết định
Wayland → compositor ghép

câu hỏi chính:
  ai được vẽ lên bảng?
X → một người vẽ hộ
Wayland → mỗi người
  vẽ rồi dán lại

the core question of any
windowing system:
  who may write to the
  framebuffer, and where?
X → the server decides
Wayland → a compositor merges

  1. framebuffer

    Framebuffer — bài toán gốc của hệ thống cửa sổ Framebuffer — tấm bảng màu chung Framebuffer — the founding problem of a windowing system

    Ward đặt bài toán rất sắc: trên mọi hệ thống hiện đại, các cửa sổ thuộc về những tiến trình riêng biệt, mỗi tiến trình cập nhật đồ hoạ của mình một cách độc lập. Vậy nếu người dùng được phép di chuyển và chồng cửa sổ lên nhau, làm sao một ứng dụng biết phải vẽ ở đâu, và làm sao bảo đảm nó không ghi đè lên đồ hoạ của cửa sổ khác?1 Mọi kiến trúc trong chương này — X cũng như Wayland — chỉ là hai câu trả lời khác nhau cho đúng câu hỏi đó.

    Nhiều chương trình cùng muốn vẽ lên một tấm bảng. Ai vẽ chỗ nào? Vẽ chồng lên bạn thì sao? Đó là bài toán duy nhất mà mọi hệ thống cửa sổ phải giải. Nhớ nhé: chung một tấm bảng thì phải có luật chia chỗ.

    Ward states the problem crisply: on any contemporary system, windows belong to individual processes that update their graphics independently. So if the user may move windows around and overlap them, how does an application know where to draw, and how do you ensure it isn't allowed to overwrite the graphics of other windows?1 Every architecture in this chapter — X as well as Wayland — is just a different answer to that one question.

    Bạn gặp nó ở đâuWhere you meet it Mỗi lần bạn kéo một cửa sổ đè lên cửa sổ khác mà nội dung phía dưới vẫn nguyên vẹn khi bạn kéo ra. Khi bạn kéo cửa sổ che cửa sổ khác, rồi kéo ra thì cái dưới vẫn còn nguyên. Every time you drag one window over another and the content underneath is still intact when you drag away.

    Vì sao chương này không có tháp tầng

    Ward nói rõ rằng dựng cấu trúc desktop không kéo theo một hệ phân tầng rộng như lưu trữ hay mạng; thay vào đó, mỗi thành phần làm một việc và trao đổi khi cần.1 Điểm chung sâu nhất chỉ nằm ở các thư viện toolkit dùng chung.1

    Một byte, một điểm ảnh

    Vì “vài byte” trong framebuffer đại diện cho mỗi điểm ảnh, mọi hiệu ứng bạn thấy — bóng đổ, trong suốt, hoạt ảnh — cuối cùng đều quy về việc ai đó ghi số vào vùng nhớ đó đủ nhanh.1

  2. x window system

    X — một “nhân của desktop” đứng giữa mọi thứ X — một người làm hết mọi việc X — a "kernel of the desktop" standing in the middle

    Cách tiếp cận của X Window System là có một server (gọi là X server) đóng vai trò như một thứ “nhân” của desktop: nó quản lý từ việc dựng cửa sổ, cấu hình màn hình, cho tới xử lý đầu vào từ bàn phím và chuột.12 X server không áp đặt mọi thứ phải trông ra sao hay hành xử thế nào; phần giao diện là việc của các chương trình X client. Client kết nối tới server và xin vẽ cửa sổ; server quyết định đặt cửa sổ ở đâu, vẽ đồ hoạ client ở đâu, và chuyển đầu vào tới client khi thích hợp.1

    Trong cách cũ, có một anh trung gian tên là X. Ai muốn vẽ gì cũng phải nhờ anh ấy. Anh ấy quyết định cửa sổ nào nằm đâu và ai nhận phím bạn vừa bấm. Nhớ nhé: X là anh trung gian — mọi việc đều đi qua anh ấy.

    The X Window System's approach is to have a server (the X server) that acts as a sort of "kernel" of the desktop, managing everything from rendering windows to configuring displays to handling input from devices such as keyboards and mice.12 The X server does not dictate how anything should act or appear; the user interface is handled by X client programs. Clients connect to the server and ask to draw windows; the server figures out where to place them, where to render client graphics, and channels input to a client when appropriate.1

    Bạn gặp nó ở đâuWhere you meet it Trong danh sách tiến trình, dưới cái tên X hoặc Xorg.1 Trong danh sách chương trình đang chạy, tên nó là Xorg. In a process listing, under the name X or Xorg.1

    Cái giá của vị trí trung gian

    Ward không giấu nhược điểm: vì làm trung gian cho mọi thứ, X server có thể trở thành một nút thắt cổ chai đáng kể. Thêm vào đó nó chứa rất nhiều chức năng không còn được dùng, và nó khá già — có từ thập niên 1980.1

    Nhưng nó đã sống rất lâu

    Ông công nhận bằng một câu gần như nể phục: bằng cách nào đó, X đã đủ linh hoạt để hấp thụ nhiều tính năng mới, và điều đó kéo dài tuổi thọ của nó.1 Kho phần mở rộng như RandR là bằng chứng.1

  3. wayland

    Wayland — phi tập trung ngay từ thiết kế Wayland — mỗi người tự vẽ phần của mình Wayland — decentralized by design

    Khác với X, Wayland phi tập trung một cách đáng kể ngay trong thiết kế: không có một display server lớn quản lý framebuffer cho nhiều client đồ hoạ, và không có cơ quan trung ương nào lo việc dựng đồ hoạ. Thay vào đó, mỗi client nhận một vùng đệm bộ nhớ riêng cho cửa sổ của nó, và một phần mềm gọi là compositor ghép các buffer của tất cả client thành dạng cần thiết để chép vào framebuffer của màn hình.13 Vì việc ghép này thường có hỗ trợ phần cứng, compositor có thể chạy rất hiệu quả.1

    Cách mới bỏ anh trung gian. Mỗi chương trình tự vẽ tranh của mình lên một tờ giấy riêng, rồi có một người dán tất cả các tờ lên bảng lớn. Người dán đó tên là compositor. Nhớ nhé: Wayland = mỗi người một tờ giấy, rồi dán chung lên bảng.

    Unlike X, Wayland is significantly decentralized by design: there is no large display server managing the framebuffer for a number of graphical clients, and no centralized authority for rendering graphics. Instead each client gets its own memory buffer for its own window, and a piece of software called a compositor combines all of the clients' buffers into the form needed for copying to the screen's framebuffer.13 Because there is normally hardware support for this task, the compositor can be quite efficient.1

    Bạn gặp nó ở đâuWhere you meet it Trong biến môi trường $WAYLAND_DISPLAY: nếu giá trị giống wayland-0, bạn đang chạy Wayland.1 Gõ một câu lệnh xem biến $WAYLAND_DISPLAY; có chữ wayland-0 là đang dùng Wayland. In the $WAYLAND_DISPLAY environment variable: if its value looks like wayland-0, you are running Wayland.1

    Không mới như ta tưởng

    Ward chỉ ra rằng mô hình đồ hoạ của Wayland không khác lắm với thực tế mà phần lớn X client đã làm nhiều năm: thay vì nhờ X server hỗ trợ, đa số client tự dựng toàn bộ dữ liệu của mình thành một bitmap rồi gửi bitmap ấy cho X server.1

    X cũng đã có compositing

    Để ghi nhận thực tế đó, bản thân X đã có một phần mở rộng compositing được dùng suốt vài năm nay.1 Nói cách khác, ranh giới kỹ thuật giữa hai bên hẹp hơn ranh giới chính trị.

  4. window manager

    Window manager — khác biệt lớn nhất giữa X và Wayland Người sắp chỗ cho cửa sổ The window manager — the biggest difference between X and Wayland

    Theo Ward, khác biệt lớn giữa hệ thống X và hệ thống Wayland nằm ở window manager — phần mềm quyết định sắp xếp cửa sổ trên màn hình thế nào, và là trung tâm của trải nghiệm người dùng. Trong X, window manager là một client đóng vai trợ thủ cho server: nó vẽ phần trang trí cửa sổ (thanh tiêu đề, nút đóng), xử lý sự kiện đầu vào cho các trang trí đó, và bảo server dời cửa sổ đi đâu.1 Trong Wayland, window manager gần như chính là server: nó ghép mọi buffer cửa sổ vào framebuffer hiển thị và lo việc chuyển sự kiện thiết bị đầu vào.1

    Người sắp chỗ cho cửa sổ gọi là window manager. Ở cách cũ, anh ấy chỉ là trợ lý cho anh trung gian. Ở cách mới, anh ấy là người chính, gánh luôn việc dán tranh và chia phím. Nhớ nhé: cách cũ anh ấy là trợ lý, cách mới anh ấy là sếp.

    For Ward, the major difference between X and Wayland systems lies in the window manager — the software that determines how windows are arranged on screen and is central to the user experience. In X the window manager is a client acting as a helper to the server: it draws the windows' decorations (title bars, close buttons), handles input events on those decorations, and tells the server where to move windows.1 In Wayland the window manager is the server, more or less: it composites all client window buffers into the display framebuffer and handles the channeling of input device events.1

    Bạn gặp nó ở đâuWhere you meet it Mutter (trong GNOME) và Kwin (của KDE) — hai window manager phổ biến đã được mở rộng để hỗ trợ compositing của Wayland.1 Mutter của GNOME và Kwin của KDE là hai cái tên bạn hay gặp. Mutter (in GNOME) and Kwin (from KDE) — two popular window managers that have been extended to include Wayland compositing support.1

    Nhiều việc hơn, nhưng mã dùng chung

    Ward nhận xét: window manager của Wayland phải làm nhiều việc hơn bản X, nhưng phần lớn mã đó có thể dùng chung giữa các bản hiện thực.1 Đó là lý do việc bổ sung compositing cho Mutter và Kwin khả thi.

    Sẽ không có chuẩn

    Ông kết luận thẳng: bất kể công nghệ nền là gì, khó có chuyện xuất hiện một window manager chuẩn cho Linux — vì khẩu vị và nhu cầu người dùng rất đa dạng và liên tục thay đổi, window manager mới xuất hiện suốt.1 X có nhiều bản hơn, đơn giản vì nó sống lâu hơn.1

  5. toolkit

    Toolkit và desktop environment — cái chung của giao diện Bộ nút bấm dùng chung Toolkits and desktop environments — the shared part of the interface

    Ứng dụng desktop nào cũng có những phần tử chung — nút bấm, trình đơn — gọi là widget. Để phát triển nhanh và có vẻ ngoài thống nhất, lập trình viên dùng graphical toolkit. Trên Windows hay macOS, nhà cung cấp đưa sẵn một toolkit chung; trên Linux, GTK+ là một trong những toolkit phổ biến nhất, nhưng bạn cũng sẽ thường gặp widget dựng trên framework Qt và những thứ khác.145 Toolkit thường gồm các thư viện chia sẻ cùng những tệp hỗ trợ như hình ảnh và thông tin chủ đề.1

    Nút bấm, thanh trượt, menu — chúng được làm sẵn thành bộ để lập trình viên lấy dùng. Bộ đó gọi là toolkit. Trên Linux có hai bộ hay gặp: GTK+ và Qt. Nhớ nhé: toolkit là hộp nút bấm làm sẵn.

    Desktop applications share certain common elements — buttons and menus — called widgets. To speed development and provide a common look, programmers use graphical toolkits. On Windows or macOS the vendor supplies a common toolkit; on Linux, GTK+ is one of the most common, but you will also frequently see widgets built on the Qt framework and others.145 Toolkits usually consist of shared libraries plus support files such as images and theme information.1

    Bạn gặp nó ở đâuWhere you meet it GNOME, KDE và Xfce — những desktop environment gói toolkit cùng thư viện khác thành một gói lớn hơn.1 GNOME, KDE, Xfce — ba bộ desktop hay gặp nhất. GNOME, KDE and Xfce — desktop environments that bundle toolkits and other libraries into larger packages.1

    Vì sao cần thêm một tầng gói

    Toolkit cho người dùng vẻ ngoài đồng nhất, nhưng một số chi tiết của desktop đòi hỏi các ứng dụng phải hợp tác với nhau: ứng dụng này muốn chia sẻ dữ liệu với ứng dụng kia, hoặc cùng cập nhật một thanh thông báo chung.1 Nhu cầu đó sinh ra desktop environment.

    Không chỉ là mã nguồn

    Để tạo một desktop thống nhất, môi trường còn phải chứa nhiều tệp hỗ trợ — biểu tượng, cấu hình — hợp thành theme, và tất cả được ràng buộc bằng những tài liệu mô tả quy ước thiết kế: trình đơn và tiêu đề nên hiện ra sao, ứng dụng nên phản ứng thế nào với một số sự kiện hệ thống.1

  6. applications

    Ứng dụng — đứng riêng, nhưng vẫn cần nghe ngóng Chương trình ở tầng trên cùng Applications — standalone, yet still listening

    Trên cùng của desktop là các ứng dụng: trình duyệt web, cửa sổ terminal. Ward xếp chúng trên một trục từ thô sơ (như chương trình xclock cổ xưa) tới phức tạp (như trình duyệt Chrome hay bộ LibreOffice).1 Chúng thường đứng riêng, nhưng vẫn hay dùng cơ chế liên lạc liên tiến trình để biết về những sự kiện liên quan — chẳng hạn khi bạn gắn một thiết bị lưu trữ mới, hay khi có thư mới. Liên lạc đó thường đi qua D-Bus.1

    Trên cùng là các chương trình bạn mở: trình duyệt, cửa sổ gõ lệnh. Chúng chạy riêng, nhưng vẫn muốn biết tin tức — ví dụ “vừa có người cắm USB”. Tin tức đó chạy trên một đường riêng gọi là D-Bus. Nhớ nhé: chương trình chạy riêng nhưng vẫn nghe tin chung.

    At the top of the desktop sit the applications: web browsers, the terminal window. Ward places them on a range from crude (the ancient xclock program) to complex (the Chrome web browser, the LibreOffice suite).1 They normally stand alone, yet often use interprocess communication to become aware of pertinent events — when you attach a new storage device, say, or when new email arrives. That communication usually occurs over D-Bus.1

    Bạn gặp nó ở đâuWhere you meet it Khi cắm USB và trình quản lý tệp tự bật lên — đó là một chuỗi thông điệp, không phải phép màu. Cắm USB vào, cửa sổ thư mục tự hiện ra. When you plug in a USB stick and the file manager pops up by itself — that is a chain of messages, not magic.

    Tại sao “đứng riêng” lại quan trọng

    Vì ứng dụng đứng riêng, bạn có thể thay thế gần như bất cứ mảnh nào mà không sập cả desktop. Ward gọi đó là đặc điểm thú vị của môi trường desktop Linux: bạn thường có thể chọn dùng mảnh nào và ngừng dùng mảnh nào mình không thích.1

    Đường đi tiếp theo

    Vì phần lớn sự phối hợp giữa các ứng dụng chạy qua D-Bus, chính D-Bus — chứ không phải X hay Wayland — mới là nơi bạn nên nhìn khi “máy biết chuyện gì đó vừa xảy ra”.16

Cụm khái niệm 02 Concept cluster 02

Nhìn gần Wayland: một giao thức, một compositor, và một cây cầu tên Xwayland Wayland: luật chơi mới và cây cầu nối về quá khứ A closer look at Wayland: a protocol, a compositor, and a bridge called Xwayland

Ward bắt đầu bằng việc gỡ một hiểu lầm về danh từ: cái tên Wayland chỉ một giao thức truyền thông giữa một compositing window manager và chương trình client đồ hoạ. Nếu bạn đi tìm một gói lõi Wayland to đùng, bạn sẽ không thấy — cái bạn sẽ thấy là thư viện Wayland mà phần lớn client dùng để nói giao thức đó, ít nhất là ở thời điểm hiện tại.13

Wayland không phải một chương trình. Nó là bộ luật để hai bên nói chuyện với nhau. Giống luật giao thông: bạn không cài luật vào máy, bạn chỉ làm theo. Nhớ nhé: Wayland là luật, không phải phần mềm.

Ward starts by clearing up a noun: the name Wayland refers to a communications protocol between a compositing window manager and a graphical client program. If you go looking for a big Wayland core package you won't find one — what you will find is the Wayland library that most clients use to speak the protocol, at least for now.13

Ông thành thật về giới hạn của phần thực hành: một phần do thiết kế, một phần do còn non trẻ, Wayland không có nhiều công cụ để chọc ngoáy như X. “Chúng ta sẽ làm được gì thì làm.”1 Đây là lý do các lệnh trong mục này chủ yếu là quan sát gián tiếp — lần theo socket, đọc sự kiện đầu vào — thay vì hỏi thẳng compositor.

Định nghĩa. Weston là một compositing window manager tham chiếu. “Tham chiếu” ở đây nghĩa là Weston chứa đủ chức năng cần thiết của một compositor, nhưng không nhằm cho công chúng dùng vì giao diện của nó rất trơ trụi; ý tưởng là người phát triển compositing window manager có thể đọc mã nguồn Weston để biết cách hiện thực các chức năng then chốt cho đúng.17

Nói đơn giản. Weston là “bản mẫu” — như căn nhà mẫu ở công trường: đủ tường đủ cửa để xem cách xây, nhưng không ai ở. Nhớ nhé: Weston là nhà mẫu, không phải nhà ở.

Definition. Weston is a reference compositing window manager. "Reference" means Weston contains the necessary functionality of a compositor but isn't meant for general public use, because its interface is bare-bones; the idea is that developers of compositing window managers can read Weston's source to see how to implement critical functions correctly.17

tìm compositor đang chạy:
# ss -xlp | grep wayland-
socket → /run/user/<uid>/wayland-0
liệt kê thiết bị nhập:
# libinput list-devices
xem sự kiện:
# libinput debug-events

xem ai đang dán tranh:
# ss -xlp | grep wayland-
xem bàn phím chuột:
# libinput list-devices

find the running compositor:
# ss -xlp | grep wayland-
socket → /run/user/<uid>/wayland-0
list input devices:
# libinput list-devices
watch events:
# libinput debug-events

  1. compositing window manager

    Lần theo socket để biết ai đang là compositor Tìm xem ai đang dán tranh lên bảng Tracking the socket to find out who the compositor is

    Nghe kỳ lạ, nhưng Ward thừa nhận: bạn có thể không biết mình đang chạy compositing window manager nào của Wayland; đôi khi tìm được tên trong một mục thông tin của giao diện, nhưng không có chỗ cố định để nhìn.1 Cách gần như luôn được là lần theo Unix domain socket mà nó dùng để nói chuyện với client. Socket chính là tên display trong biến WAYLAND_DISPLAY, thường là wayland-0, và thường nằm ở /run/user/<uid> với <uid> là ID người dùng của bạn — nếu không, xem biến $XDG_RUNTIME_DIR.1

    Muốn biết ai đang dán tranh lên bảng? Tìm cái “ống nói” mà các chương trình dùng để gọi người đó. Ống nói nằm trong thư mục riêng của bạn, tên là wayland-0. Nhớ nhé: không hỏi thẳng được thì lần theo ống nói.

    Odd as it sounds, Ward admits you might not know which Wayland compositing window manager you are running; you may find the name in an information option in the interface, but there is no set place to look.1 What nearly always works is tracking down the Unix domain socket it uses to talk to clients. The socket is the display name in WAYLAND_DISPLAY, usually wayland-0, and typically found in /run/user/<uid> where <uid> is your user ID — if not, check $XDG_RUNTIME_DIR.1

    Bạn gặp nó ở đâuWhere you meet it Chạy với quyền root, ss -xlp | grep wayland- tìm tiến trình đang lắng nghe trên socket đó — Ward báo trước rằng kết quả “trông hơi điên rồ”.18 Một lệnh tên ss sẽ in ra tên chương trình đang giữ ống nói đó. Running as root, ss -xlp | grep wayland- finds the process listening on that socket — Ward warns the output "will look a little crazy."18

    Một lớp gián tiếp nữa

    Trong ví dụ của Ward, tiến trình compositor hiện ra là gnome-shell, PID 1522. Nhưng còn một lớp gián tiếp nữa: GNOME shell là một plug-in của Mutter, tức compositing window manager được dùng trong GNOME — và gọi nó là plug-in chỉ là cách nói hoa mỹ cho việc nó gọi Mutter như một thư viện.19

    Nhiều compositor cùng lúc

    Hiếm, nhưng được: một cách là chạy các compositor trên những virtual terminal riêng. Khi đó compositor đầu thường có tên display là wayland-0, cái thứ hai là wayland-1, và cứ thế.1

    Display là gì trong ngữ cảnh này

    Với một compositor Wayland, bạn có thể hình dung display là vùng nhìn thấy được, biểu diễn bởi framebuffer — và một display có thể trải trên nhiều màn hình nếu máy có nhiều màn hình cắm vào.1

    Đừng kỳ vọng nhiều ở weston-info

    Lệnh weston-info cho bạn chút hiểu biết về compositor bằng cách hiện vài đặc tính của các interface mà nó cung cấp — nhưng Ward nói thẳng: đừng mong nhiều hơn thông tin về display và vài thiết bị nhập.17

  2. xdg-decoration

    Ai vẽ thanh tiêu đề? Một câu hỏi phải đem ra thương lượng Ai vẽ cái viền quanh cửa sổ? Who draws the title bar? A question that has to be negotiated

    Ward gọi đây là một trong những khía cạnh khác thường nhất của hệ thống Wayland: cơ chế vẽ phần trang trí cửa sổ, chẳng hạn thanh tiêu đề. Trong X, window manager làm hết. Nhưng trong các bản hiện thực Wayland ban đầu, việc này bị đẩy cho ứng dụng client — đôi khi dẫn tới cảnh trên cùng một màn hình có nhiều kiểu trang trí cửa sổ khác nhau.1 Nay đã có một phần của giao thức tên là XDG-Decoration, cho phép client thương lượng với window manager xem window manager có sẵn lòng vẽ trang trí hay không.110

    Cái viền và thanh tiêu đề quanh cửa sổ — ai vẽ? Ở cách cũ, người sắp chỗ vẽ hết, nên nhìn đều nhau. Ở cách mới lúc đầu, mỗi chương trình tự vẽ viền của mình, nên nhìn mỗi cái một kiểu. Bây giờ hai bên hỏi nhau trước. Nhớ nhé: viền cửa sổ giờ là chuyện hai bên bàn bạc.

    Ward calls this one of the more unusual aspects of Wayland systems: the mechanism for drawing window decorations such as title bars. In X, the window manager did it all. In the initial implementations of Wayland this was left up to the client applications, which sometimes led to windows having many different kinds of decorations on the same screen.1 Now there is a part of the protocol called XDG-Decoration that lets the client negotiate with the window manager to see whether the window manager is willing to draw decorations.110

    Bạn gặp nó ở đâuWhere you meet it Khi một ứng dụng GTK và một ứng dụng Qt mở cạnh nhau mà thanh tiêu đề trông khác hẳn nhau. Khi hai cửa sổ cạnh nhau mà viền trông không giống nhau. When a GTK application and a Qt application sit side by side with visibly different title bars.

    Thuật ngữ bạn sẽ gặp

    Tài liệu giao thức gọi hai phía là trang trí phía client và trang trí phía server; XDG-Decoration là phần mở rộng cho phép hai bên thoả thuận chọn kiểu nào.10 Đây là ví dụ rõ nhất cho thấy Wayland đẩy quyết định ra các phần mở rộng thay vì gom vào lõi.

    Vì sao lại quan trọng với người dùng

    Trang trí không chỉ là thẩm mỹ: nó là nơi bạn bấm để đóng, phóng to, kéo cửa sổ. Khi trách nhiệm vẽ không rõ ràng, trải nghiệm rạn nứt ngay ở chỗ tay bạn chạm vào nhiều nhất.

  3. libinput

    libinput — gom sự kiện từ nhân rồi chuẩn hoá libinput — người phiên dịch bàn phím và chuột libinput — collecting kernel events and standardizing them

    Để đưa đầu vào từ thiết bị — bàn phím chẳng hạn — từ nhân tới client, một compositor Wayland phải thu thập đầu vào đó và hướng nó tới client thích hợp dưới một dạng chuẩn hoá. Thư viện libinput chứa phần hỗ trợ cần thiết để gom đầu vào từ các thiết bị /dev/input của nhân và nhào nặn chúng.111 Trong Wayland, compositor thường không chuyển thẳng sự kiện đầu vào nguyên trạng: nó dịch sự kiện sang giao thức Wayland trước khi gửi cho client.1

    Bàn phím và chuột nói một thứ tiếng của riêng chúng. libinput là người phiên dịch: nghe tiếng của thiết bị, dịch ra tiếng chung, rồi đưa cho chương trình đang cần. Nhớ nhé: libinput là người phiên dịch cho bàn phím và chuột.

    To get input from devices such as a keyboard from the kernel to clients, a Wayland compositor must collect that input and direct it to the appropriate client in a standardized form. The libinput library includes the support needed to collect input from the various /dev/input kernel devices and massage it.111 In Wayland the compositor doesn't usually pass an input event as is; it translates the event into the Wayland protocol before sending it to a client.1

    Bạn gặp nó ở đâuWhere you meet it libinput list-devices liệt kê thiết bị kèm loại và đường dẫn evdev của nhân, ví dụ /dev/input/event3 cho một bàn phím USB.111 Một lệnh in ra danh sách bàn phím, chuột đang cắm vào máy. libinput list-devices lists devices with their type and the kernel evdev path, e.g. /dev/input/event3 for a USB keyboard.111

    Xem sự kiện trực tiếp

    libinput debug-events --show-keycodes in ra dòng DEVICE_ADDED cho từng thiết bị rồi các dòng KEYBOARD_KEY khi bạn gõ — kèm tên phím và mã, chẳng hạn KEY_H (35) pressed.111

    Không chỉ dành cho Wayland

    Ward nhắc một điều hay bị quên: libinput chỉ là hệ thống bắt sự kiện của nhân, nên nó được dùng không chỉ dưới Wayland mà cả dưới X Window System.1 Thư viện này cũng không bắt buộc theo giao thức Wayland, nhưng trên hệ thống desktop thì gần như phổ quát.1

  4. xwayland

    Xwayland — một X server chạy như một Wayland client Cây cầu cho chương trình cũ Xwayland — an X server running as a Wayland client

    Có vô số ứng dụng viết cho X, nên mọi nỗ lực rời X sẽ bị cản trở nặng nếu thiếu hỗ trợ X. Ward mô tả hai hướng tiếp cận diễn ra song song. Hướng thứ nhất là thêm hỗ trợ Wayland vào chính ứng dụng, biến nó thành ứng dụng Wayland thuần; vì phần việc thêm hỗ trợ Wayland cho các toolkit của GNOME và KDE đã xong, việc này không quá xa vời.1 Hướng thứ hai là chạy ứng dụng X qua một lớp tương thích: một X server đầy đủ chạy như một Wayland client, tên là Xwayland, được phần lớn chuỗi khởi động compositor chạy mặc định.112

    Rất nhiều chương trình cũ chỉ biết nói tiếng X. Nên người ta dựng một cây cầu: một anh X thu nhỏ chạy bên trong thế giới mới, chuyên dịch giúp mấy chương trình cũ. Cây cầu đó tên là Xwayland. Nhớ nhé: chương trình cũ vẫn chạy được, nhờ một cây cầu.

    There are countless applications for X, so any effort to move away from it would be greatly hindered without X support. Ward describes two simultaneous approaches. The first is to add Wayland support to the application itself, making it a native Wayland application; since the work of adding Wayland support to the GNOME and KDE toolkits is already done, this isn't much of a stretch.1 The alternative is to run the X application through a compatibility layer: an entire X server running as a Wayland client, called Xwayland, run by default by most compositor startup sequences.112

    Bạn gặp nó ở đâuWhere you meet it Khi một ứng dụng cũ vẫn chạy mượt trên phiên Wayland mà bạn không phải làm gì cả. Khi chương trình cũ vẫn mở được bình thường trên máy mới. When an older application still runs smoothly in a Wayland session and you had to do nothing at all.

    Cái giá của lớp trung gian

    Xwayland phải dịch sự kiện đầu vào và duy trì các buffer cửa sổ của riêng nó. Ward nói thêm một người trung gian như vậy thì bao giờ cũng chậm đi một chút — nhưng “phần lớn là không đáng kể”.1

    Chiều ngược lại không chạy

    Bạn không thể chạy Wayland client trên X theo cách tương tự; về lý thuyết viết được một hệ như vậy, nhưng chẳng để làm gì.1 Bạn có thể chạy một compositor bên trong một cửa sổ X — ví dụ đang ở X thì gõ weston là có compositor.1

    Cái bẫy của compositor lồng trong X

    Nếu bạn để compositor đó chạy rồi quay lại phiên X thường, một số tiện ích có thể hoạt động không như mong đợi, thậm chí hiện ra trong cửa sổ compositor. Lý do: nhiều ứng dụng trên GNOME và KDE nay được dựng với cả hỗ trợ X lẫn Wayland; chúng tìm compositor Wayland trước, và mặc định mã trong libwayland tìm display sẽ lấy wayland-0 nếu biến WAYLAND_DISPLAY chưa được đặt.1 Lời khuyên của Ward rất gọn: đừng chạy compositor bên trong X hoặc cùng lúc với một X server.1

Cụm khái niệm 03 Concept cluster 03

Nhìn gần X Window System: display, display manager, sự kiện và thiết lập Cách cũ: X làm việc thế nào A closer look at the X Window System: displays, display managers, events and settings

Đối lập với hệ thống dựa trên Wayland, X Window System trong lịch sử rất đồ sộ: bản phân phối gốc gồm cả X server, thư viện hỗ trợ client, và các client. Nhưng do sự nổi lên của các desktop environment như GNOME và KDE, vai trò của X đã đổi theo thời gian — trọng tâm nay nghiêng về phần server lõi lo dựng hình và thiết bị nhập, cùng một thư viện client đơn giản hoá.12

X ngày xưa rất to: nó gói cả người trung gian lẫn đủ thứ phụ tùng. Giờ nó gọn lại, chỉ còn phần lõi lo vẽ hình và nhận phím. Nhớ nhé: X từng rất to, giờ đã gọn lại.

In contrast with Wayland-based systems, the X Window System has historically been very large: the base distribution includes the X server, client support libraries and clients. But with the emergence of desktop environments such as GNOME and KDE, X's role has changed over time — the focus is now more on the core server that manages rendering and input devices, plus a simplified client library.12

X server dễ nhận ra trên máy bạn: nó tên là X hoặc Xorg, và trong danh sách tiến trình thường chạy kèm một loạt tuỳ chọn, ví dụ Xorg -core :0 -seat seat0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch.12 Mỗi mảnh trong dòng đó là một câu chuyện: :0 là display, lightdm là display manager, -nolisten tcp là quyết định bảo mật, vt7 là virtual terminal.

Định nghĩa. X display — ký hiệu :0 trong dòng lệnh trên — là một định danh biểu diễn một hoặc nhiều màn hình mà bạn truy cập bằng chung một bàn phím và/hoặc chuột. Thường display chỉ tương ứng với một màn hình gắn vào máy, nhưng bạn có thể đặt nhiều màn hình dưới cùng một display. Với các tiến trình chạy trong một phiên X, biến môi trường DISPLAY được đặt bằng định danh đó.1

Nói đơn giản. Display là “bộ bàn làm việc”: một hay nhiều màn hình dùng chung một bàn phím và một con chuột. Nó có số hiệu, thường là :0. Nhớ nhé: một bàn phím + màn hình = một display.

Definition. An X display — the :0 in the command line above — is an identifier representing one or more monitors that you access with a common keyboard and/or mouse. Usually a display corresponds to the single monitor attached to your computer, but you can put multiple monitors under one display. For processes running in an X session, the DISPLAY environment variable is set to that identifier.1

công cụ soi X client:
$ xwininfo  → bấm vào cửa sổ
$ xlsclients -l → mọi window ID
$ xev      → dòng sự kiện
$ xinput --list → thiết bị nhập
$ xset q   → trạng thái vài tính năng

soi cửa sổ: xwininfo
xem sự kiện: xev
xem chuột phím: xinput --list

tools for probing X clients:
$ xwininfo  → click a window
$ xlsclients -l → all window IDs
$ xev      → a stream of events
$ xinput --list → input devices
$ xset q   → status of a few features

  1. display manager

    Display manager — thứ thật sự khởi động phiên của bạn Ô đăng nhập lúc bật máy The display manager — what actually starts your session

    Thường bạn sẽ không khởi động X server từ dòng lệnh, vì khởi động server không định nghĩa bất kỳ client nào được cho là sẽ chạy trên đó; tự chạy server một mình thì bạn chỉ được một màn hình trống. Cách phổ biến nhất là dùng display manager — chương trình khởi động server và đặt một ô đăng nhập lên màn hình. Khi bạn đăng nhập, display manager khởi động một bộ client như window manager và trình quản lý tệp để bạn bắt đầu dùng máy.1

    Bật máy lên, bạn thấy ô nhập mật khẩu. Người dựng ô đó gọi là display manager. Nhập xong, nó mở sẵn cho bạn các chương trình cần thiết. Nhớ nhé: display manager là người mở cửa và bật đèn.

    You normally wouldn't start the X server from the command line, because starting the server doesn't define any clients that are supposed to run on it; start it by itself and you just get a blank screen. The usual way is a display manager — a program that starts the server and puts a login box on the screen. When you log in, the display manager starts a set of clients such as a window manager and file manager so you can begin using the machine.1

    Bạn gặp nó ở đâuWhere you meet it gdm (cho GNOME), kdm (cho KDE), và lightdm — bản đa nền tảng có thể khởi động phiên GNOME hoặc KDE.1 Ba cái tên hay gặp: gdm, kdm, lightdm. gdm (for GNOME), kdm (for KDE), and lightdm — a cross-platform one meant to start GNOME or KDE sessions.1

    Nếu bạn cố tình làm theo cách thủ công

    Ward nói: nếu bạn nhất quyết khởi động phiên X từ một console ảo thay vì dùng display manager, bạn có thể chạy lệnh startx hoặc xinit. Nhưng phiên bạn nhận được nhiều khả năng rất đơn sơ và trông hoàn toàn khác phiên của display manager, vì cơ chế và các tệp khởi động khác nhau.1

    Virtual terminal

    Trên Linux, X server chạy trên một virtual terminal. Trong ví dụ của Ward, tham số vt7 cho thấy nó được bảo chạy trên /dev/tty7 — bình thường server khởi động trên virtual terminal đầu tiên còn trống.1 Bạn có thể chạy nhiều X server cùng lúc trên các virtual terminal riêng, mỗi server một định danh display, và chuyển qua lại bằng CTRL-ALT-Fn hoặc lệnh chvt.115

  2. network transparency

    Trong suốt mạng — một tính năng đã bị tắt vì lý do bảo mật Chạy cửa sổ từ máy khác Network transparency — a feature now switched off for security

    Một đặc tính của X là network transparency: vì client nói chuyện với server qua một giao thức, ta có thể chạy client qua mạng tới một server chạy trên máy khác, với X server lắng nghe kết nối TCP ở cổng 6000; client nối tới cổng đó có thể xác thực rồi gửi cửa sổ sang server.1 Rắc rối là phương pháp này thường không có mã hoá nên mất an toàn, vì vậy phần lớn bản phân phối nay tắt phần lắng nghe mạng của X server bằng tuỳ chọn -nolisten tcp.12

    X có thể hiện cửa sổ của một máy này lên màn hình của máy khác qua mạng. Nghe hay, nhưng đường truyền không được khoá kín, nên ngày nay người ta tắt đi. Muốn dùng thì đi đường an toàn hơn là SSH. Nhớ nhé: tính năng hay nhưng không an toàn thì bị tắt.

    One feature of X is network transparency: because clients talk to the server using a protocol, you can run clients across a network to a server on a different machine, with the X server listening for TCP connections on port 6000; clients connecting to that port could authenticate and then send windows to the server.1 The trouble is that this method normally offers no encryption and is insecure as a result, so most distributions now disable the X server's network listener with the -nolisten tcp option.12

    Bạn gặp nó ở đâuWhere you meet it Bạn vẫn có thể chạy X client từ máy ở xa bằng SSH tunneling, như Chương 10 mô tả, bằng cách nối Unix domain socket của X server tới một socket trên máy kia.1 Muốn mở cửa sổ từ máy khác thì dùng SSH — đường có khoá. You can still run X clients from a remote machine via SSH tunneling, as described in Chapter 10, by connecting the X server's Unix domain socket to a socket on the remote machine.1

    Wayland thì sao?

    Ward ghi chú rõ: không có cách đơn giản để chạy từ xa với Wayland, vì client có bộ nhớ màn hình riêng mà compositor phải truy cập trực tiếp mới hiển thị được. Tuy vậy nhiều hệ thống đang nổi lên, chẳng hạn RDP (Remote Desktop Protocol), có thể phối hợp với compositor để cung cấp chức năng từ xa.1

    Display còn chia nhỏ được

    Display có thể được chia tiếp thành screen, như :0.0 và :0.1, nhưng chuyện này khá hiếm vì các phần mở rộng của X như RandR có thể gộp nhiều màn hình thành một screen ảo lớn hơn.1

  3. x events

    Sự kiện X — cách client biết chuyện gì đang xảy ra Tin nhắn “bạn vừa bấm gì” X events — how clients learn what is happening

    X client nhận đầu vào và các thông tin khác về trạng thái server qua một hệ thống sự kiện. Ward xếp chúng cùng họ với những sự kiện liên tiến trình bất đồng bộ khác như sự kiện udev và sự kiện D-Bus: X server nhận thông tin từ một nguồn — chẳng hạn thiết bị nhập — rồi phân phát lại thông tin đó dưới dạng sự kiện cho bất kỳ X client nào quan tâm.1 Bạn thử nghiệm được bằng lệnh xev: nó mở một cửa sổ mới, và khi bạn rê chuột, bấm, gõ phím, nó in ra mô tả các sự kiện X nhận được từ server.116

    Mỗi lần bạn bấm phím hay rê chuột, máy gửi một tờ giấy nhỏ ghi “vừa có chuyện này” cho chương trình đang cần biết. Tờ giấy đó gọi là sự kiện. Có một lệnh cho bạn xem tận mắt các tờ giấy ấy. Nhớ nhé: mỗi cú bấm là một tờ tin nhắn.

    X clients get their input and other information about server state through a system of events. Ward groups them with other asynchronous interprocess communication events such as udev events and D-Bus events: the X server receives information from a source — an input device, say — and redistributes it as an event to any interested X client.1 You can experiment with xev: it opens a new window, and as you mouse into it, click and type, it prints descriptions of the X events it receives from the server.116

    Bạn gặp nó ở đâuWhere you meet it Một công dụng phổ biến của xev là lấy keycode và ký hiệu phím cho các bàn phím khác nhau khi cần ánh xạ lại; trong ví dụ của Ward, bấm phím L cho keycode 46.1 Dùng để biết một phím có số hiệu là bao nhiêu — ví dụ phím L là số 46. A common use of xev is to extract keycodes and key symbols for different keyboards when remapping; in Ward's example, pressing the L key gives keycode 46.1

    Đọc một dòng MotionNotify

    Trong đầu ra cho chuyển động chuột, hãy chú ý các toạ độ trong ngoặc: cặp đầu là toạ độ x và y của con trỏ bên trong cửa sổ, còn cặp sau (có tiền tố root:) là vị trí con trỏ trên toàn bộ display.1

    Sự kiện mức cao hơn

    Ngoài sự kiện mức thấp như nhấn phím và bấm nút, còn có những sự kiện cao hơn cho biết chuột đã vào hay rời cửa sổ, hoặc cửa sổ vừa nhận hay mất focus từ window manager — trong sách là các dòng LeaveNotify và FocusOut.1

    Bám vào một cửa sổ có sẵn

    Bạn cũng có thể gắn xev vào một window ID đang tồn tại bằng tuỳ chọn -id id, thay id bằng ID lấy từ xwininfo — một số thập lục phân bắt đầu bằng 0x.11617

  4. xwininfo / xlsclients

    Soi client từ dòng lệnh: window ID là sợi chỉ dẫn đường Bấm vào cửa sổ để hỏi “mày là ai” Probing clients from the shell: the window ID is the thread to follow

    Ta thường không nghĩ tới việc làm việc với giao diện đồ hoạ từ dòng lệnh, nhưng Ward chỉ ra vài tiện ích cho phép bạn khám phá các phần của X Window System — đặc biệt là soi các client khi chúng đang chạy.1 Đơn giản nhất là xwininfo: chạy không tham số, nó yêu cầu bạn bấm chuột vào một cửa sổ, rồi in ra danh sách thông tin như vị trí và kích thước.117

    Có lệnh cho phép bạn bấm vào một cửa sổ và nó kể cho bạn nghe cửa sổ đó tên gì, to bao nhiêu, nằm ở đâu. Nhớ nhé: bấm một cái là biết lý lịch cửa sổ.

    One doesn't normally think of working with a graphical interface from the command line, but Ward points to several utilities that let you explore parts of the X Window System — in particular inspecting clients as they run.1 The simplest is xwininfo: run without arguments it asks you to click on a window, then prints a list of information such as its location and size.117

    Bạn gặp nó ở đâuWhere you meet it Để lấy danh sách mọi window ID và client, dùng xlsclients -l.118 Muốn xem tất cả cửa sổ một lượt thì dùng xlsclients -l. To get a list of all window IDs and clients, use xlsclients -l.118

    Window ID để làm gì

    Ward lưu ý: X server và các window manager dùng chính định danh này để theo dõi cửa sổ.1 Nó là khoá chung nối xwininfo, xlsclients và xev lại thành một quy trình chẩn đoán.

    Vì sao Wayland không có bộ công cụ tương đương

    Trong Wayland, không có server trung tâm nắm danh sách cửa sổ của mọi client để trả lời câu hỏi kiểu này — đó chính là hệ quả trực tiếp của thiết kế phi tập trung mà Ward mô tả ở mục 14.1.3.1

  5. xinput / xkb

    Thiết lập đầu vào — nơi “có nhiều hơn một cách, và vài cách không chạy” Chỉnh bàn phím chuột: nhiều đường, dễ lạc Input settings — where "there's often more than one way, and some may not work"

    Ward gọi đây là một trong những đặc tính dễ gây hoang mang nhất của X: thường có nhiều hơn một cách để đặt thiết lập, và vài cách có thể không có tác dụng. Ví dụ kinh điển là đổi phím CAPS LOCK thành CTRL — có thể làm bằng lệnh xmodmap cũ kỹ, hoặc cung cấp hẳn một bản đồ bàn phím mới bằng tiện ích setxkbmap. Làm sao biết dùng cái nào? Đó là chuyện biết phần nào của hệ thống đang giữ trách nhiệm — và xác định điều đó có thể khó, nhất là khi desktop environment còn có thiết lập và ghi đè của riêng nó.11920

    Muốn đổi một phím trên bàn phím? Có tới mấy cách, mà không phải cách nào cũng ăn. Lý do: nhiều nơi cùng giành quyền quyết định. Nhớ nhé: khi có nhiều cách, hãy hỏi “ai mới là người quyết”.

    Ward calls this one of X's most potentially baffling characteristics: there's often more than one way to set preferences, and some methods may not work. The classic example is remapping CAPS LOCK to CTRL — doable with the old xmodmap command, or by supplying an entirely new keyboard map with setxkbmap. How do you know which to use? It's a matter of knowing which pieces of the system have responsibility, and determining that can be difficult — especially since a desktop environment may provide its own settings and overrides.11920

    Bạn gặp nó ở đâuWhere you meet it xinput --list hiện cấu hình thiết bị; xinput --list-props <id> xem thuộc tính; --set-prop đổi chúng.121 Một lệnh liệt kê chuột và bàn phím kèm số hiệu của từng cái. xinput --list shows the device configuration; xinput --list-props <id> views properties; --set-prop changes them.121

    Thiết bị lõi ảo

    X server dùng X Input Extension để quản lý đầu vào từ nhiều thiết bị. Có hai loại cơ bản — bàn phím và con trỏ (chuột) — và bạn gắn bao nhiêu thiết bị cũng được. Để xử lý nhiều thiết bị cùng loại một lúc, X Input Extension tạo ra một virtual core device làm phễu dẫn đầu vào tới X server.1 Trong đầu ra ví dụ của Ward, ID 2 và 3 là thiết bị lõi, còn ID 8 và 9 là thiết bị thật; đáng chú ý là các nút nguồn của máy cũng được coi là thiết bị nhập của X.1

    Chuột thuận tay trái

    Nhiều thiết lập đổi được trực tiếp qua thuộc tính, nhưng thường dễ hơn khi dùng các tuỳ chọn chuyên biệt --set-ptr-feedback và --set-button-map. Ví dụ để đảo thứ tự nút của một chuột ba nút — tiện cho người thuận tay trái — Ward đưa lệnh xinput --set-button-map dev 3 2 1.121

    XKB và hai tính năng đáng nhớ

    X luôn có khả năng ánh xạ bàn phím ngay trong giao thức lõi, thao tác được bằng xmodmap; nhưng hệ thống tương đối mới nào cũng dùng XKB (X keyboard extension) để kiểm soát tinh hơn. Ý tưởng của XKB: bạn định nghĩa một bản đồ bàn phím, biên dịch nó bằng xkbcomp, rồi nạp và kích hoạt bản đồ đó trong X server bằng setxkbmap.120 Hai tính năng đặc biệt thú vị: bạn định nghĩa được bản đồ bộ phận để bổ sung cho bản đồ sẵn có — rất tiện cho việc biến CAPS LOCK thành CTRL — và bạn định nghĩa được bản đồ riêng cho từng bàn phím đang gắn.1

    Hai tiện ích già: xsetroot và xset

    Root window của X server chính là nền của display. Lệnh cũ xsetroot cho phép đặt màu nền và vài đặc tính của root window, nhưng trên phần lớn máy nó không có tác dụng vì root window không bao giờ hiện ra — thay vào đó, đa số desktop environment đặt một cửa sổ lớn phía sau mọi cửa sổ khác để có những tính năng như “hình nền động” và duyệt tệp trên desktop.1 Còn xset có lẽ là lệnh thiết lập cổ nhất; nay ít dùng, nhưng xset q vẫn cho bạn trạng thái của vài tính năng — hữu ích nhất có lẽ là thiết lập screensaver và DPMS.122

Cụm khái niệm 04 Concept cluster 04

D-Bus — đường truyền thông điệp đã vượt khỏi desktop D-Bus: đường dây nhắn tin chung D-Bus — the message bus that outgrew the desktop

Ward gọi Desktop Bus (D-Bus) là một trong những phát triển quan trọng nhất ra đời từ desktop Linux. Nó quan trọng vì hai lẽ: nó là cơ chế liên lạc liên tiến trình cho phép các ứng dụng desktop nói chuyện với nhau, và vì phần lớn hệ thống Linux dùng nó để thông báo cho các tiến trình về những sự kiện hệ thống — chẳng hạn khi bạn cắm một ổ USB.16

D-Bus là đường dây nhắn tin chung của máy. Ai muốn báo tin gì thì gửi lên đường dây; ai muốn nghe tin gì thì đăng ký nhận. Nhớ nhé: D-Bus là cái loa chung của cả máy.

Ward calls the Desktop Bus (D-Bus) one of the most important developments to come out of the Linux desktop. It matters for two reasons: it is the interprocess communication mechanism that lets desktop applications talk to each other, and most Linux systems use it to notify processes of system events — such as inserting a USB drive.16

Bản thân D-Bus gồm một thư viện chuẩn hoá liên lạc liên tiến trình bằng một giao thức cùng các hàm hỗ trợ, để hai tiến trình bất kỳ nói chuyện được với nhau. Ward nói thẳng: riêng thư viện đó thì không hơn một phiên bản hoa mỹ của các tiện ích IPC thông thường như Unix domain socket là bao. Cái làm D-Bus hữu ích là một “trung tâm” gọi là dbus-daemon.123

Định nghĩa. dbus-daemon là hub trung tâm: các tiến trình cần phản ứng với sự kiện thì kết nối tới nó và đăng ký nhận một số loại sự kiện, còn chính những tiến trình đang kết nối cũng tạo ra sự kiện. Ví dụ của Ward: tiến trình udisks-daemon theo dõi udev để bắt sự kiện đĩa rồi gửi chúng tới dbus-daemon, và daemon này phát lại các sự kiện ấy cho những ứng dụng quan tâm tới đĩa.123

Nói đơn giản. Có một bác bưu tá ngồi giữa. Ai có tin thì đưa bác ấy, ai muốn nhận loại tin nào thì đăng ký trước. Bác ấy chuyển đúng người. Nhớ nhé: một bác bưu tá, ai đăng ký thì nhận tin.

Definition. dbus-daemon is the central hub: processes that need to react to events connect to it and register to receive certain kinds of events, and connecting processes also create the events. Ward's example: the udisks-daemon process monitors udev for disk events and sends them to dbus-daemon, which then retransmits them to applications interested in disk events.123

hai thực thể dbus-daemon:
  system → init khởi động,
    --system, /etc/dbus-1/system.conf
  session → theo phiên desktop
theo dõi:
# dbus-monitor --system
$ dbus-monitor --session

hai đường dây:
  một của cả máy
  một của phiên bạn
nghe thử:
$ dbus-monitor --session

two dbus-daemon instances:
  system → started by init,
    --system, /etc/dbus-1/system.conf
  session → per desktop session
monitor:
# dbus-monitor --system
$ dbus-monitor --session

  1. system instance

    Thực thể hệ thống — và một nguyên tắc thiết kế bị va chạm Đường dây của cả máy The system instance — and a design rule under strain

    D-Bus đã thành một phần không thể tách rời của hệ thống Linux và nay vươn ra ngoài phạm vi desktop: Ward dẫn ví dụ cả systemd lẫn Upstart đều có kênh liên lạc D-Bus. Nhưng thêm phụ thuộc vào công cụ desktop ngay trong lõi hệ thống lại đi ngược một quy tắc thiết kế của Linux.1 Giải pháp là tách làm hai loại thực thể dbus-daemon: một system instance do init khởi động lúc boot với tuỳ chọn --system, và một session instance tuỳ chọn, chỉ chạy khi bạn bắt đầu một phiên desktop.123

    Có hai đường dây riêng: một của cả máy, bật từ lúc khởi động; một của riêng phiên làm việc của bạn, chỉ bật khi bạn đăng nhập vào màn hình. Nhớ nhé: một dây cho máy, một dây cho bạn.

    D-Bus has become an integral part of the Linux system and now reaches beyond the desktop: Ward notes that both systemd and Upstart have D-Bus channels of communication. But adding dependencies on desktop tools inside the core system goes against a Linux design rule.1 The answer is two kinds of dbus-daemon instance: a system instance started by init at boot with the --system option, and an optional session instance that runs only when you start a desktop session.123

    Bạn gặp nó ở đâuWhere you meet it Tiến trình có thể kết nối tới thực thể hệ thống qua Unix domain socket /var/run/dbus/system_bus_socket.1 Đường dây của cả máy có một “ổ cắm” cố định trong hệ thống tệp. Processes can connect to the system instance through the /var/run/dbus/system_bus_socket Unix domain socket.1

    Chạy dưới danh nghĩa ai

    Thực thể hệ thống thường chạy dưới người dùng D-Bus, và tệp cấu hình của nó là /etc/dbus-1/system.conf — nhưng Ward kèm một lời khuyên gọn: có lẽ bạn không nên sửa cấu hình đó.1

    Session instance thuộc về bạn

    Độc lập với thực thể hệ thống, session instance là tuỳ chọn và chỉ sống trong phiên desktop; các ứng dụng desktop bạn chạy sẽ kết nối tới thực thể này.1

  2. dbus-monitor

    Theo dõi thông điệp — cách tốt nhất để thấy khác biệt Ghé tai nghe đường dây Monitoring messages — the best way to see the difference

    Ward đề xuất một cách rất thực nghiệm để phân biệt hai thực thể: theo dõi các sự kiện chạy trên bus bằng tiện ích dbus-monitor. Chạy ở chế độ hệ thống, thông điệp khởi đầu cho biết monitor đã kết nối và giành được một tên. Bạn sẽ không thấy nhiều hoạt động, vì thực thể hệ thống thường không bận rộn lắm — muốn thấy có chuyện xảy ra, hãy thử cắm một thiết bị lưu trữ USB.124

    Muốn biết đường dây đang nói gì? Có một lệnh cho bạn nghe lén (một cách hợp pháp, trên chính máy mình). Nghe đường của máy thì im ắng; cắm USB vào là có tin. Nhớ nhé: muốn hiểu thì ghé tai nghe thử.

    Ward proposes a thoroughly empirical way to tell the two instances apart: monitor the events going over the bus with the dbus-monitor utility. In system mode, the startup message indicates that the monitor connected and acquired a name. You won't see much activity, because the system instance usually isn't very busy — to see something happen, try plugging in a USB storage device.124

    Bạn gặp nó ở đâuWhere you meet it Đổi sang dbus-monitor --session rồi dùng một ứng dụng desktop như trình quản lý tệp: nếu desktop của bạn có nhận thức D-Bus, bạn sẽ nhận được một loạt thông điệp báo các thay đổi.1 Nghe đường dây của phiên bạn rồi mở thư mục — tin nhắn chạy rào rào. Switch to dbus-monitor --session and use a desktop application such as a file manager: if your desktop is D-Bus-aware, you'll get a flurry of messages indicating various changes.1

    Đọc một dòng thông điệp

    Dòng khởi đầu trong ví dụ của sách có dạng signal sender=org.freedesktop.DBus -> dest=:1.952 … member=NameAcquired. Ba mảnh đáng nhớ: path (đối tượng), interface (nhóm phương thức/tín hiệu), và member (tên cụ thể) — chính là bộ ba mà đặc tả D-Bus dùng để định địa chỉ mọi thông điệp.16

    Đừng kết luận vội khi im lặng

    Ward nhắc: không phải ứng dụng nào cũng sinh ra thông điệp.1 Một bus im ắng không chứng minh được rằng hệ thống hỏng — nó chỉ nói rằng thứ bạn đang thử không nói chuyện trên bus đó.

Cụm khái niệm 05 Concept cluster 05

In ấn: tám bước, một hàng đợi, và vì sao mọi thứ xoay quanh PostScript Bấm “In” rồi máy làm gì Printing: eight steps, one queue, and why it all revolves around PostScript

Ward mô tả in một tài liệu trên Linux là một tiến trình nhiều giai đoạn: chương trình in thường chuyển tài liệu sang dạng PostScript (bước này là tuỳ chọn); gửi tài liệu tới print server; server nhận và đặt nó vào hàng đợi in; đến lượt thì server gửi tài liệu cho một print filter; nếu tài liệu chưa ở dạng PostScript, filter có thể thực hiện chuyển đổi; nếu máy in đích không hiểu PostScript, một printer driver chuyển tài liệu sang định dạng máy in hiểu được; driver thêm các chỉ dẫn tuỳ chọn như khay giấy và in hai mặt; cuối cùng print server dùng một backend để gửi tài liệu tới máy in.1

Bấm nút In, giấy không ra ngay đâu. Tài liệu của bạn đi qua một dây chuyền: đổi sang một ngôn ngữ chung, xếp hàng chờ, đổi tiếp cho hợp với máy in, rồi mới được gửi đi. Nhớ nhé: in là một dây chuyền, không phải một cú bấm.

Ward describes printing a document on Linux as a multistage process: the program doing the printing usually converts the document to PostScript (this step is optional); it sends the document to a print server; the server receives it and places it on a print queue; when its turn arrives, the server sends it to a print filter; if the document isn't in PostScript form, the filter may convert it; if the destination printer doesn't understand PostScript, a printer driver converts it to a printer-compatible format; the driver adds optional instructions such as paper tray and duplexing options; and finally the print server uses a backend to send the document to the printer.1

Định nghĩa. Ward giải thích phần khó hiểu nhất của quy trình — vì sao mọi thứ xoay quanh PostScript: PostScript thật ra là một ngôn ngữ lập trình, nên khi bạn in một tệp bằng nó, bạn đang gửi một chương trình tới máy in. PostScript đóng vai trò chuẩn in trên các hệ Unix-like, giống như định dạng .tar đóng vai trò chuẩn lưu trữ.1

Nói đơn giản. PostScript không phải một bức ảnh, nó là một công thức vẽ. Bạn gửi công thức, máy in tự vẽ theo. Nhớ nhé: gửi cho máy in một công thức, không phải một bức ảnh.

Definition. Ward explains the most confusing part of the process — why so much revolves around PostScript: PostScript is actually a programming language, so when you print a file using it, you're sending a program to the printer. PostScript serves as a printing standard in Unix-like systems much as the .tar format serves as an archiving standard.1

tài liệu → PostScript (tuỳ chọn)
  → print server (cupsd)
  → hàng đợi in
  → print filter
  → printer driver + PPD
  → backend → máy in

tài liệu → xếp hàng
  → đổi định dạng
  → gửi máy in

document → PostScript (optional)
  → print server (cupsd)
  → print queue
  → print filter
  → printer driver + PPD
  → backend → printer

  1. cups

    CUPS — hệ thống in chuẩn, và cũng là hệ thống của macOS CUPS — người quản lý hàng đợi in CUPS — the standard printing system, also used on macOS

    Hệ thống in chuẩn trên Linux là CUPS, cũng chính là hệ thống dùng trên macOS. Daemon server của CUPS tên là cupsd, và bạn có thể dùng lệnh lpr làm một client đơn giản để gửi tệp tới daemon đó.12526

    Trên Linux, người trông coi việc in tên là CUPS. Máy Mac cũng dùng đúng anh này. Nhớ nhé: CUPS là người xếp hàng đợi in.

    The standard printing system on Linux is CUPS, the same system used on macOS. The CUPS server daemon is called cupsd, and you can use the lpr command as a simple client to send files to the daemon.12526

    Bạn gặp nó ở đâuWhere you meet it Nếu CUPS đang chạy, bạn thường mở được http://localhost:631/ để xem cấu hình hiện tại và kiểm tra các tác vụ in.127 Mở trình duyệt vào địa chỉ localhost:631 là thấy danh sách máy in. If CUPS is running you can usually open http://localhost:631/ to see your current configuration and check on printer jobs.127

    IPP và cổng 631

    Một tính năng quan trọng của CUPS là nó hiện thực Internet Print Protocol (IPP), hệ thống cho phép các giao dịch giống HTTP giữa client và server trên cổng TCP 631.127 Phần lớn máy in mạng và print server đều hỗ trợ IPP, Windows cũng vậy, nên việc thiết lập máy in từ xa tương đối đơn giản.1

    Đừng quản trị qua giao diện web

    Ward khuyên: nhiều khả năng bạn sẽ không quản trị được hệ thống từ giao diện web vì thiết lập mặc định không an toàn lắm; thay vào đó bản phân phối của bạn nhiều khả năng có giao diện thiết lập đồ hoạ để thêm và sửa máy in. Các công cụ đó thao tác lên tệp cấu hình, thường nằm ở /etc/cups — và tốt nhất cứ để chúng làm, vì cấu hình có thể phức tạp.1

    Ngay cả khi phải sửa tay

    Nếu gặp trục trặc và buộc phải cấu hình thủ công, Ward vẫn khuyên tạo máy in bằng công cụ đồ hoạ trước để có một điểm xuất phát.1 Đây là một mẫu tư duy lặp lại trong sách: để công cụ sinh ra cấu hình đúng, rồi mới đọc và sửa.

  2. print filters

    RIP, Ghostscript và PPD — cách một trang thành các chấm mực Đổi công thức thành chấm mực RIP, Ghostscript and PPD — how a page becomes dots of ink

    Nhiều máy in, gồm gần như mọi mẫu giá rẻ, không hiểu PostScript hay PDF. Để hỗ trợ những máy đó, hệ thống in trên Linux phải chuyển tài liệu sang định dạng riêng của máy in: CUPS gửi tài liệu tới một Raster Image Processor (RIP) để tạo ra bitmap. RIP gần như luôn dùng chương trình Ghostscript (gs) làm phần lớn công việc thật sự.128 Nhưng việc này hơi phức tạp, vì bitmap phải khớp định dạng của máy in — nên các printer driver mà CUPS dùng sẽ tra cứu tệp PostScript Printer Definition (PPD) của máy in cụ thể để biết những thiết lập như độ phân giải và khổ giấy.129

    Máy in rẻ tiền không đọc được công thức. Nên có một người đọc công thức rồi vẽ ra thành từng chấm mực cho máy in. Người đó tên là Ghostscript. Còn tờ “thông số máy in” cho biết máy in này in được mịn đến đâu, giấy cỡ nào. Nhớ nhé: có người dịch công thức thành chấm mực.

    Many printers, including nearly all low-end models, don't understand PostScript or PDF. To support one of those, a Linux printing system must convert documents to a printer-specific format: CUPS sends the document to a Raster Image Processor (RIP) to produce a bitmap. The RIP almost always uses the Ghostscript (gs) program to do most of the real work.128 But it's somewhat complicated, because the bitmap must fit the printer's format — so the printer drivers CUPS uses consult the PostScript Printer Definition (PPD) file for the specific printer to figure out settings such as resolution and paper sizes.129

    Bạn gặp nó ở đâuWhere you meet it Mỗi khi bạn chọn “chất lượng nháp” hay khổ A4 trong hộp thoại in — những lựa chọn đó cuối cùng được đối chiếu với tệp PPD của máy in.129 Khi bạn chọn khổ giấy A4 hay in nháp trong hộp thoại in. Every time you pick "draft quality" or A4 in the print dialog — those choices are ultimately matched against the printer's PPD file.129

    PDF ở đâu trong bức tranh

    Ward ghi nhận rằng một số ứng dụng nay xuất PDF thay vì PostScript, nhưng việc chuyển đổi tương đối dễ.1 Nghĩa là quy trình tám bước vẫn đúng, chỉ đổi định dạng ở đầu vào.

    Bối cảnh đã đổi từ 2021

    Ngoài phạm vi bản văn: OpenPrinting ghi rằng sau thảo luận với Apple, hỗ trợ raw queue bị khai tử từ CUPS 2.2 (2018) và printer driver từ CUPS 2.3 (2019), với các Printer Application thay thế; máy in hỗ trợ chuẩn in “driverless” của IPP tiếp tục hoạt động không cần thay đổi.30 Đây là thông tin cập nhật, không phải lời của Ward — bản văn 2021 vẫn mô tả đường đi driver + PPD như trên.1

  3. other desktop topics

    Phần cuối chương: quyền được chọn, và Chrome OS Bạn được chọn, và một ví dụ đặc biệt The chapter's coda: the right to choose, and Chrome OS

    Ward khép chương bằng một đặc điểm ông thấy thú vị ở môi trường desktop Linux: nhìn chung bạn có thể chọn dùng những mảnh mình muốn và ngừng dùng những mảnh mình không thích; muốn khảo sát các dự án desktop thì xem danh sách thư và các liên kết dự án tại freedesktop.org.131 Ông cũng nêu một phát triển lớn khác: dự án mã nguồn mở Chromium OS cùng bản Google Chrome OS trên các máy Chromebook — một hệ Linux dùng phần lớn công nghệ desktop mô tả trong chương này nhưng lấy trình duyệt Chromium/Chrome làm trung tâm, và lược bỏ phần lớn những gì có trên một desktop truyền thống.132

    Điều hay nhất của desktop Linux: bạn được chọn. Không thích mảnh nào thì bỏ mảnh đó. Có một ví dụ thú vị là máy Chromebook: cũng là Linux, nhưng bỏ gần hết, chỉ giữ trình duyệt. Nhớ nhé: bạn được chọn — kể cả chọn bỏ bớt.

    Ward closes the chapter with a characteristic he finds interesting about the Linux desktop environment: you can generally choose which pieces you want to use and stop using the ones you dislike; for a survey of the many desktop projects, look at the mailing lists and project links at freedesktop.org.131 He also names another major development: the Chromium OS open source project and its Google Chrome OS counterpart on Chromebook PCs — a Linux system that uses much of the desktop technology described in this chapter but is centered on the Chromium/Chrome browsers, with much of a traditional desktop stripped away.132

    Bạn gặp nó ở đâuWhere you meet it Mỗi lần bạn đổi desktop environment mà các ứng dụng cũ vẫn chạy — vì chúng chỉ phụ thuộc vào toolkit và vào bus, không phụ thuộc vào môi trường. Khi bạn đổi kiểu màn hình mà chương trình cũ vẫn mở được. Every time you switch desktop environments and your old applications still run — because they depend on the toolkit and the bus, not on the environment.

    Vì sao chương dừng ở đây

    Ward viết rằng dù môi trường desktop rất vui để ngắm nghía và thử nghiệm, cuộc thảo luận phải dừng lại — và nếu chương này khiến bạn muốn làm việc trên chúng, bạn sẽ cần biết công cụ phát triển hoạt động ra sao, đó là nơi cuốn sách đi tiếp.1

    Một chương khảo sát, không phải sổ tay

    Toàn bộ chương được ông đóng khung là “thảo luận ở mức cao” về các thành phần desktop, với chỉ hai mảnh được nhìn kỹ hơn: hạ tầng lõi phía sau phần lớn desktop, và D-Bus.1 Đọc đúng kỳ vọng đó thì chương này rất gọn; đọc như tài liệu vận hành thì sẽ hụt hẫng.

Đính chính Corrections

Ba ngộ nhận mà người đọc lần đầu hay mắc Ba chỗ hay hiểu nhầm Three misconceptions first readers hit

Phần này thuộc mức đọc Đầy đủ: nó đối chiếu điều người đọc thường nghĩ với điều bản văn thật sự nói.

Phần này hơi khó, bạn có thể bỏ qua và quay lại sau. Nhớ nhé: hiểu chậm mà chắc vẫn hơn.

This block belongs to the Đầy đủ (full) reading level: it sets what readers usually assume against what the text actually says.

“Wayland là một chương trình thay thế cho X” "Wayland is a program that replaces X"

Ngộ nhận: có một gói tên Wayland, cài vào là thay được X server.

Bản văn nói: cái tên Wayland chỉ một giao thức truyền thông giữa compositing window manager và client đồ hoạ; đi tìm một gói lõi Wayland to đùng thì sẽ không thấy — cái bạn thấy là thư viện Wayland mà phần lớn client dùng để nói giao thức đó.1 Thứ thật sự thay chỗ X server là compositor, mà trong Wayland gần như chính là window manager.1

Misconception: there is a package called Wayland that you install to replace the X server.

The text says: the name Wayland refers to a communications protocol between a compositing window manager and a graphical client; go looking for a big Wayland core package and you won't find one — what you'll find is the Wayland library most clients use to speak the protocol.1 What actually takes the X server's place is the compositor, which under Wayland is more or less the window manager itself.1

“Chạy Wayland nghĩa là X đã biến mất khỏi máy” "Running Wayland means X is gone from my machine"

Ngộ nhận: hai hệ thống loại trừ nhau, dùng cái này thì không còn cái kia.

Bản văn nói: hai hệ thống này không loại trừ nhau — nếu máy bạn dùng Wayland, nó nhiều khả năng cũng đang chạy một X compatibility server, tức Xwayland, một X server đầy đủ chạy như một Wayland client và được phần lớn chuỗi khởi động compositor chạy mặc định.1 Thậm chí bạn còn khởi động được một compositor Wayland bên trong X.1

Misconception: the two systems are mutually exclusive — use one and the other is absent.

The text says: these two systems are not mutually exclusive — if your system uses Wayland, it is probably also running an X compatibility server, namely Xwayland, an entire X server running as a Wayland client and started by default by most compositor startup sequences.1 You can even start a Wayland compositor inside X.1

“Máy in nhận thẳng tệp của tôi” "The printer receives my file directly"

Ngộ nhận: bấm In là tệp được gửi nguyên vẹn tới máy in.

Bản văn nói: in là một tiến trình nhiều giai đoạn, và với nhiều máy in — gần như mọi mẫu giá rẻ — tài liệu phải qua một RIP để thành bitmap, với Ghostscript làm phần lớn công việc và printer driver tra tệp PPD để biết độ phân giải, khổ giấy.1 Thứ máy in nhận được không phải tệp của bạn, mà là kết quả cuối của dây chuyền đó.1

Misconception: pressing Print sends your file to the printer untouched.

The text says: printing is a multistage process, and for many printers — nearly all low-end models — the document must pass through a RIP to become a bitmap, with Ghostscript doing most of the real work and the printer driver consulting the PPD file for resolution and paper sizes.1 What the printer receives is not your file but the end product of that pipeline.1

Tự kiểm tra Self-check

Bạn đã nắm được bản đồ desktop chưa? Thử trả lời xem nào Do you have the desktop map yet?

Trả lời bằng lời của bạn, không tra sách. Nếu một câu khiến bạn ngập ngừng, đó chính là mục bạn nên đọc lại.

Thử trả lời miệng thôi, không cần giở lại. Câu nào bí thì quay lại đọc phần đó nhé. Nhớ nhé: chỗ bí chính là chỗ cần học.

Answer in your own words, without looking back. Whichever question makes you hesitate points at the section you should reread.

  1. Vì sao Ward nói cấu trúc desktop không giống một hệ phân tầng như lưu trữ hay mạng?

    Gợi ý sâu hơn: chỗ duy nhất có thể gọi là lớp trừu tượng nằm ở đâu?

  2. Framebuffer là gì, và bài toán nào của nó sinh ra mọi hệ thống cửa sổ?

    Gợi ý sâu hơn: hãy nêu cả hai vế của bài toán — biết vẽ ở đâu, và không ghi đè lên ai.

  3. Window manager đóng vai trò khác nhau thế nào giữa X và Wayland?

    Gợi ý sâu hơn: trong X nó là client hay server? Còn trong Wayland?

  4. Bạn làm cách nào để biết máy mình đang chạy Wayland hay X, và cách đó có chắc chắn tuyệt đối không?

    Gợi ý sâu hơn: Ward thêm chữ “có lẽ” vì lý do gì?

  5. Xwayland là gì, và vì sao chiều ngược lại — chạy Wayland client trên X — không hoạt động theo cách tương tự?

    Gợi ý sâu hơn: điều gì xảy ra nếu bạn để một compositor chạy song song với phiên X?

  6. Vì sao network transparency của X bị tắt trên phần lớn bản phân phối, và cổng nào liên quan?

    Gợi ý sâu hơn: nếu vẫn cần chạy client từ xa thì đi đường nào?

  7. Hai loại thực thể dbus-daemon khác nhau ở điểm nào, và vì sao phải tách ra?

    Gợi ý sâu hơn: quy tắc thiết kế nào của Linux bị va chạm khi lõi hệ thống phụ thuộc vào công cụ desktop?

  8. Kể lại đường đi của một tài liệu từ lúc bạn bấm In tới lúc giấy ra — ít nhất bốn chặng.

    Gợi ý sâu hơn: chặng nào là tuỳ chọn, và chặng nào cần tệp PPD?

  1. Framebuffer là gì? Nói ngắn thôi.

  2. X và Wayland khác nhau ở chỗ nào? Một câu là đủ.

  3. Ai là người sắp chỗ cho các cửa sổ trên màn hình?

  4. Làm sao biết máy bạn đang dùng cách cũ hay cách mới?

  5. D-Bus dùng để làm gì?

  6. Khi bạn bấm In, tài liệu đi qua những ai trước khi ra giấy?

  1. Why does Ward say a desktop structure is not a layered hierarchy like storage or networking?

  2. What is a framebuffer, and which problem about it gives rise to every windowing system?

  3. How does the window manager's role differ between X and Wayland?

  4. How do you tell whether your machine is running Wayland or X, and is that test absolutely certain?

  5. What is Xwayland, and why doesn't the reverse — running Wayland clients on X — work the same way?

  6. Why is X's network transparency disabled on most distributions, and which port is involved?

  7. How do the two kinds of dbus-daemon instance differ, and why were they separated?

  8. Retrace a document's path from clicking Print to paper coming out — at least four stages.

Khép lại chương Closing the chapter

Khác với lưu trữ hay mạng, desktop không có một tháp tầng đồ sộ — mỗi thành phần làm một việc và trao đổi khi cần.1 Và vì bạn thường được chọn dùng mảnh nào, bỏ mảnh nào, hiểu ranh giới giữa các mảnh quan trọng hơn thuộc lòng tên của chúng.1

Màn hình của bạn không phải một cái tháp — nó là một nhóm thợ làm chung. Và bạn được quyền chọn thợ. Nhớ nhé: biết ai làm việc gì, quan trọng hơn thuộc tên.

Unlike storage or networking, the desktop has no extensive hierarchy of layers — each component performs a specific task and communicates as necessary.1 And because you can generally choose which pieces to use and which to drop, understanding the boundaries between the pieces matters more than memorizing their names.1