Ghi chép về giao diện đồ họa và card màn hình (phần 1)

Ghi chép về giao diện đồ họa và card màn hình (phần 1).

(Gần đây thấy nhức đầu về card màn hình trong các bản Linux. Mời cụ Gúc một bữa nhậu, được cụ chỉ bảo cho những điều dưới đây).

1. Giao diện:

Con người là một cái máy tính sống do Đấng Tối cao (Chúa, Thượng đế, Tự nhiên,… tùy theo tôn giáo) chế tạo ra. Năm giác quan (với một số người có cả giác quan thứ sáu)của con người nhận tín hiệu (âm thanh, hình ảnh, mùi vị, …), dịch thành các xung thần kinh mà não hiểu được, não sẽ đưa các input đó vào các chương trình được cài sẵn (bản năng) hoặc do ta tự cài sau này (kinh nghiệm cuộc sống, học tập) phản ứng lại với các tín hiệu đó và trả kết quả với môi trường và xã hội.

Thế giới bên ngoài của máy tính chủ yếu là người sử dụng nó. Máy tính có hai giác quan chính là bàn phím và chuột, đôi khi có thêm mắt (webcam) và tai (microphone), cũng cần một phần mềm để tiếp nhận các lệnh của người dùng (một phím được gõ, một cú kích chuột, v.v…), dịch thành các lệnh mà bộ não của nó (processor) hiểu được, thực hiện lệnh đó và trả kết quả về cho người dùng (hiển thị kết quả lên màn hình, phát ra loa, v.v….)

Phần mềm giao diện đóng vai trò người phiên dịch giữa máy và người: tiếp nhận và dịch lệnh của người cho máy rồi lại nhận kết quả từ máy và dịch ra dưới dạng người hiểu được. Có mấy loại giao diện chính:

  • Giao diện dòng lệnh ( Command line interfaces ): phần mềm vỏ (shell, hiện phổ biến nhất là bash – Bourne Again Shell) thực hiện giao diện này. Khi ta mở terminal gõ một lệnh nào đó, bash dịch lệnh đó rồi chuyển cho hệ điều hành thực hiện và báo kết quả lên màn hình terminal (nếu có).

  • Giao diện đồ họa ( Graphical user interfaces GUI ): cái màn hình màu sắc với icons, menu, windows mà ta nhìn thấy hàng ngày. Đó là đối tượng chính của bài viết này.

  • Giao diện web ( web user interfaces – WUI): Gmail, Yahoo Mail chẳng hạn dùng giao diện này và tương lai khi điện toán đám mây phát triển nó sẽ là giao diện thống trị trên các máy tính cá nhân.

2. Giao diện đồ họa trong Linux, Unix

Giao diện (nói chung) trong Linux gồm 2 lớp. Lớp trên cùng mà người dùng nhìn thấy ( user graphic interfaces) là KDE, GNOME, Xfce, …Lớp này còn một số thứ linh tinh nữa nên thường được gọi là desktop environment mà tôi dịch là môi trường đồ họa. Lớp giữa, trung gian giữa user graphic interfaces với nhân Linux là X Windows System.

X Windows System (còn gọi là X hoặc X11) gồm một bộ phần mềm và các giao thức mạng cung cấp giao diện đồ họa cơ bản nhất (và do đó cũng sơ khai nhất) cho các máy tính (kể cả qua mạng). Phiên bản mới nhất là X11R75 (X11 Release 7.5).

X hoạt động theo mô hình client – server. Một máy chủ X server chạy trong máy tính, nhận lệnh và trả kết quả ra màn hình. Các chương trình khách quản lý (driver) bàn phím, chuột, màn hình cảm ứng của máy đó hoặc các chương trình truy cập từ xa của các máy khác trên mạng truyền lệnh cho X server.

Tổ chức X.Org Foundation chịu trách nhiệm phát triển các phiên bản X Server. Vì vậy X Server thường được gọi là X.Org Server hoặc Xorg Server. Trong thành phần của Xorg Server có phần mềm X server và các driver của bàn phím, card màn hình, chuột. Tên các gói phần mềm liên quan thường có cụm xserver-xorg (Ubuntu). Ví dụ driver của chuột là xserver-xorg-input-mouse, driver card màn hình Intel i8xx và i9xx là xserver-xorg-video-intel.

Trước đây (trước 2004), X Server có tên là XFree86 Server, vì vậy một số gói phần mềm trong X Server hiện vẫn có cụm từ xf86.

Dưới đây ta gọi tắt là Xserver và quan tâm chính đến quan hệ của nó với bàn phím, chuột, màn hình, đặc biệt là màn hình và các card màn hình.

Trước đây, Xserver điều hành chuột, bàn phím, màn hình và cấu hình 3 thứ đó ghi trong file /etc/X11/xorg.conf (xem thêm tại đây ). Gần đây, chức năng đó chuyển cho nhân Linux (kernel) nên từ Ubuntu 9.10 không còn file xorg.conf nữa, Mandriva 2010.1 thì vẫn còn.

3. Nhân Linux và driver card màn hình

Trong thập niên vừa qua, card màn hình (rời hoặc onboard) ngày càng mạnh hơn, có thể chạy được các ứng dụng 3D như game và thiết kế. Nhưng các ứng dụng chủ yếu vẫn là 2D và dùng các card hiện đại đó vẫn như cách dùng các card đời cũ, nghĩa là không hiệu quả.

Đặc biệt với Linux thì hệ thống xử lý đồ họa còn nhiều khiếm khuyết, ngay cả với các card cũ.

Ví dụ: Mỗi driver Xorg quản lý bộ nhớ card màn hình theo cách riêng và khi cần đến 3D thì dùng DRI. DRI ( Direct Rendering Infrastructure) là phần mềm giao diện cho phép ứng dụng truy cập trực tiếp với card màn hình không qua X server để tạo gia tốc phần cứng cho các ứng dụng OpenGL. Driver cũng chịu trách nhiệm thiết lập độ phân giải và chiều sâu màu màn hình (gọi là modesetting ), việc đó là không tối ưu vì kernel đã thực hiện modesetting lúc khởi động rồi. Và còn nhiều bất cập khác.

Trong những năm gần đây, đã có nhiều cố gắng hiện đại hóa việc xử lý đồ họa của Linux để có thể sử dụng được toàn bộ sức mạnh của các card màn hình hiện tại và tương lai. Một loạt vấn đề được xây dựng mới: gia tốc 2D, 3D, quản lý bộ nhớ, hạ tầng tô màu, v.v… vì vậy có nhiều đổi mới nhưng cũng nhiều trục trặc do mọi thứ đều còn quá mới.

Khuynh hướng chung là chuyển việc quản lý đồ họa từ Xserver sang nhân Linux (Linux kernel).

3.1-Bộ quản lý bộ nhớ card màn hình trong nhân Linux

Điều kiện tiên quyết để Linux kernel có thể quản lý đồ họa là nó phải quản lý được bộ nhớ của card màn hình.

Cuối năm 2008, phiên bản nhân Linux 2.6.28 bắt đầu đưa vào dùng một bộ phận quan trọng: bộ quản lý bộ nhớ card màn hình gọi là GEM (Graphic Execution Manager) làm tăng tốc độ xử lý đồ họa lên tới 50%.

Trước GEM, đã có một bộ quản lý bộ nhớ màn hình gọi là TTM do Tungsten Graphics viết, nhưng quá phức tạp. GEM, do Intel xây dựng, được coi là một phiên bản nhỏ hơn, đơn giản hơn của TTM nhưng chỉ phù hợp nhất với các card màn hình Intel. Vì vậy các card NVIDIA và ATI hiện nay dùng bộ quản lý GEM-ified TTM : bên trong là TTM, giao diện là GEM. Bản thân GEM cũng đang được mở rộng để hỗ trợ các card khác.

Việc quản lý tốt bộ nhớ card màn hình bởi GEM cho phép đưa vào hàng loạt cải tiến khác về xử lý đồ họa: Kernel Modesettings, DRI2, UXA . Hệ thống xử lý đồ họa trong Linux bắt đầu được thống nhất và ăn khớp với nhau một cách tối ưu.

3.2-Độ phân giải màn hình và chiều sâu màu màn hình

Việc đặt độ phân giải (screen resolution) và chiều sâu màu (color depth) màn hình, được gọi là mode settings , là rất quan trọng để các màn hình đồ họa hiển thị đúng.

Nếu modesetting chỉ sai nhẹ, hình và chữ bị phóng to, không sắc nét, màu nhợt nhạt. Nếu sai nặng, màn hình đồ họa sẽ không xuất hiện và chỉ có “màn hình xanh tang tóc – blue screen of death” đối với Windows và “màn hình đen tang tóc – black screen of death” đối với Linux.

Với Linux, trước 2008, modesetting do Xserver thực hiện. Từ khi có GEM, việc này mới bắt đầu chuyển cho kernel đảm nhận ( kernel mode setting – KMS ) .

Điều rắc rối với Linux hiện tại là không phải tất cả các driver card màn hình đã kịp hỗ trợ tốt tính năng mới này.

Từ kernel 2.6.29 (3/2009), KMS hỗ trợ các card Intel đời mới GMA. Nhưng các card GM đời cũ thì cái có cái không. Vì vậy Ubuntu 10.04 tắt KMS đối với các card Intel dùng driver i915, nhưng có trường hợp lại phải bật nó lên (xem thêm ở đâyở đây).

Card ATI Radeon trước R600 được KMS hỗ trợ từ kernel 2.6.31, card R600, R700 từ kernel 2.6.32.

NVIDIA không chịu công bố các tính năng kỹ thuật của card để giữ bí mật thương mại và tự viết driver cho Linux, miễn phí nhưng nguồn đóng. Driver này lại trục trặc với Ubuntu 10.04. Các nhà lập trình nguồn mở dùng kỹ thuật “ dò ngược – reverse engineering” để viết driver nguồn mở Nouveau cho card NVIDIA và đưa vào kernel 2.6.33.

Như vậy hiện nay có hai hệ thống mode settings có thể kích hoạt tùy theo từng loại card màn hình cụ thể: hệ thống cũ dùng Xserver và hệ thống mới dùng kernel.

4 thoughts on “Ghi chép về giao diện đồ họa và card màn hình (phần 1)

  1. Đọc xong mới hiểu lai rai tại sao con HP dv5t cài Ubuntu-10.04 nều không Activate 2 cái NVIDIA 173 + Current thì màn hình lại có vẻ đẹp hơn.
    Theo bài này thì chắc là phải chờ 2.6.33 để nghịch compiz.

    Cám ơn tác giả.

  2. Bài hay, bổ sung kiến thức, tiến thẳng phần 2 cái nào 😛
    À mà không biết khi nào thì các ông lớn phần cứng thích “đóng kín” chịu “cởi mở” hơn một chút để các “hiệp sĩ nguồn mở” không phải “dò ngược – reverse engineering” nữa nhỉ ? Đây cũng là một trong những nguyên nhân chính khiến người dùng ngại tiếp cận với Linux.

Bình luận về bài viết này