Tính năng Fractional Scaling trên X11 thực sự hoạt động: Developer chứng minh tính năng "bất khả thi" bằng đoạn code đơn giản

Nhóm Cộng đồng BigGo
Tính năng Fractional Scaling trên X11 thực sự hoạt động: Developer chứng minh tính năng "bất khả thi" bằng đoạn code đơn giản

Một developer đã thành công chứng minh rằng X11 có thể xử lý fractional scaling và thiết lập đa màn hình với các DPI khác nhau, thách thức niềm tin phổ biến rằng những tính năng này là bất khả thi trên giao thức display server lâu đời này. Bằng chứng khái niệm này bao gồm việc vẽ một hình tròn 2 inch nhất quán trên nhiều màn hình với độ phân giải và mật độ pixel khác nhau.

Cuộc thử nghiệm sử dụng ba màn hình khác nhau: màn hình laptop với độ phân giải 2880x1800, màn hình desktop 2560x1440, và TV 4K 3840x2160. Bằng cách truy vấn extension RandR của X11 để lấy kích thước vật lý và số lượng pixel, ứng dụng đã thành công duy trì cùng một kích thước vật lý trên cả ba màn hình.

Thông số kỹ thuật màn hình thiết lập thử nghiệm:

  • Laptop: độ phân giải 2880x1800, kích thước vật lý 302mm x 189mm
  • Màn hình máy tính để bàn: độ phân giải 2560x1440, kích thước vật lý 590mm x 334mm
  • Màn hình TV: độ phân giải 3840x2160, kích thước vật lý 1600mm x 900mm

Triển khai kỹ thuật cho thấy khả năng ẩn của X11

Developer đã sử dụng OpenGL với extension XRandR của X11 để thu thập thông tin màn hình và tính toán các hệ số scaling phù hợp. Code lắng nghe các sự kiện cấu hình cửa sổ và tự động điều chỉnh việc render dựa trên màn hình mà cửa sổ xuất hiện. Khi được kéo giữa các màn hình, hình tròn duy trì kích thước vật lý 2 inch bằng cách tính toán lại bán kính pixel dựa trên DPI của từng màn hình.

Phương pháp này hoạt động bằng cách kết hợp dữ liệu từ XRROutputInfo (cung cấp kích thước vật lý) và XRRCrtcInfo (cung cấp kích thước pixel và vị trí). Ứng dụng sau đó tính toán pixel trên mỗi milimét và điều chỉnh việc render tương ứng.

XRandR (X Resize and Rotate): Một extension X11 cung cấp thông tin về các màn hình được kết nối và thuộc tính của chúng

Các API X11 chính được sử dụng cho việc chia tỷ lệ:

  • XRRGetScreenResourcesCurrent() - Lấy cấu hình hiển thị
  • XRRGetOutputInfo() - Truy xuất kích thước vật lý của màn hình
  • XRRGetCrtcInfo() - Lấy kích thước pixel và vị trí
  • Sự kiện ConfigureNotify - Phát hiện việc di chuyển cửa sổ giữa các màn hình
Một minh chứng thử nghiệm về việc duy trì kích thước nhất quán trong kết xuất đồ họa trên các màn hình khác nhau, tương tự như việc đạt được chia tỷ lệ phân số trong X11
Một minh chứng thử nghiệm về việc duy trì kích thước nhất quán trong kết xuất đồ họa trên các màn hình khác nhau, tương tự như việc đạt được chia tỷ lệ phân số trong X11

Cộng đồng tranh luận về thách thức scaling thực tế

Trong khi cuộc thử nghiệm chứng minh scaling cơ bản là khả thi, cộng đồng developer chỉ ra những thách thức phức tạp hơn khiến scaling X11 trở nên có vấn đề trong thực tế. Các vấn đề chính phát sinh với các ứng dụng hiện có không được thiết kế để nhận biết scaling, đặc biệt khi xử lý đồ họa raster, icon và các phần tử UI chính xác.

Phần khó của scaling là vẽ các phần tử UI như icon raster hoặc đường kẻ 1px để trông không bị mờ.

Cửa sổ trải dài trên nhiều màn hình với DPI khác nhau vẫn còn vấn đề, vì các phần khác nhau của cùng một cửa sổ có thể xuất hiện ở các tỷ lệ khác nhau. Các display server hiện đại như Wayland xử lý điều này bằng cách sử dụng DPI virtualization, nơi compositor quản lý các phép biến đổi scaling thay vì để lại cho từng ứng dụng riêng lẻ.

Bối cảnh rộng hơn của sự phát triển Display Server

Cuộc thảo luận tiết lộ lý do tại sao cộng đồng Linux desktop chuyển sang Wayland bất chấp khả năng lý thuyết của X11. Trong khi X11 về mặt kỹ thuật có thể hỗ trợ các tính năng nâng cao thông qua extensions, việc triển khai thực tế đòi hỏi nỗ lực đáng kể từ cả các developer toolkit và tác giả ứng dụng. Nhiều ứng dụng hiện có đơn giản là không triển khai hỗ trợ scaling phù hợp.

Các compositor Wayland hiện hỗ trợ fractional scaling thông qua các giao thức chuyên dụng, với cả Qt6 và GTK4 đều triển khai hỗ trợ phù hợp. Tuy nhiên, việc áp dụng vẫn chưa hoàn chỉnh, với một số ứng dụng vẫn quay lại các phương pháp scaling cũ có thể gây ra hiện tượng mờ.

Cuộc thử nghiệm này nhắc nhở rằng các hạn chế kỹ thuật thường liên quan nhiều hơn đến việc phối hợp hệ sinh thái hơn là các ràng buộc giao thức cơ bản. Trong khi X11 có thể có khả năng nhiều hơn so với những gì thường được tin tưởng, quyết định của cộng đồng phát triển tập trung nỗ lực vào Wayland phản ánh các cân nhắc thực tế về việc xây dựng trải nghiệm desktop gắn kết và hiện đại.

DPI Virtualization: Một kỹ thuật mà display server xử lý tất cả các tính toán scaling, trình bày cho ứng dụng một hệ tọa độ nhất quán bất kể độ phân giải màn hình thực tế

Tham khảo: forbidden secrets of ancient X11 scaling technology revealed