- Một chương trình CLI cho Linux, cho phép chạy trực tiếp các ứng dụng GUI trong terminal
- Sử dụng trình tổng hợp Wayland do chính dự án tự xây dựng để chuyển đầu ra GUI vào terminal thay vì màn hình
- Có thể chạy cả trong môi trường ssh, và chạy được trình duyệt web, trình quản lý tệp, thậm chí cả game Doom ngay trong terminal
- Chất lượng đầu ra phụ thuộc vào độ phân giải terminal (số hàng·cột), và trên các terminal hỗ trợ hình ảnh như iTerm2·kitty còn hỗ trợ render ở độ phân giải đầy đủ
- Được phát triển dựa trên Typescript và bun, có kèm một phần mã C++, hiện mới chỉ hỗ trợ một số ứng dụng nhưng đang mở rộng với mục tiêu “Term everything❗”
Tầm quan trọng của dự án và ưu thế so sánh
- Khác với các trình xem tệp trong terminal hoặc công cụ xuất ảnh đơn giản trước đây, Term.everything có thể chạy “mọi” ứng dụng GUI ngay bên trong terminal
- Có thể sử dụng giao diện GUI ngay cả trong môi trường mạng bao gồm SSH, nên đặc biệt mạnh cho quản trị máy chủ và phát triển từ xa
- Tận dụng tối đa khả năng hiển thị hình ảnh của các terminal hiện đại như kitty, iTerm2, đồng thời cung cấp các tùy chọn cải thiện độ phân giải và tốc độ khung hình
Tổng quan
- Term.everything là một chương trình Linux CLI, nổi bật ở khả năng chạy trực tiếp các cửa sổ GUI trong terminal
- Trọng tâm là một trình tổng hợp dựa trên Wayland do dự án tự phát triển, render GUI vào terminal thay vì màn hình thông thường
- Hỗ trợ cả nền tảng x11 và Wayland, đồng thời có thể dùng từ xa qua ssh
- Số hàng/cột giới hạn của terminal ảnh hưởng đến chất lượng cửa sổ; tăng độ phân giải terminal có thể cải thiện chất lượng (nhưng có thể làm giảm hiệu năng)
Ví dụ sử dụng chính
- Chạy game: có thể chạy các game như Fontemon hoặc Doom (bản shareware episode) trong terminal
- Phát video: phát phim Wing It!, có thể điều chỉnh độ phân giải để cân bằng giữa tốc độ khung hình và chất lượng hình ảnh
- Chạy trình duyệt: trong môi trường iTerm2 + ssh, có thể kết nối vào Ubuntu và chạy Firefox
- Thay thế trình xem tệp: không cần phải tạo riêng trình xem tệp chỉ dành cho terminal, mà có thể dùng trực tiếp trình quản lý tệp GUI hiện có trong terminal
- Chạy đệ quy: chạy thêm một terminal khác bên trong terminal, kiểu "terminal in a terminal"
Nguyên lý hoạt động và thông tin phát triển
-
Khái niệm cơ bản
- Trước đây, để chương trình vẽ thứ gì đó lên màn hình, nó có thể ghi trực tiếp vào một vùng nhất định của RAM
- Trong các hệ thống hiện đại, máy chủ hiển thị (Display Server) quản lý đầu vào/đầu ra, điều phối các thao tác nhập như chuột/bàn phím và xuất đồ họa/hình ảnh
- Trong môi trường Linux, chủ yếu sử dụng giao thức Wayland hoặc X11, và Term.everything hoạt động dựa trên Wayland
-
Giao thức Wayland
- Wayland không phải bản thân máy chủ hiển thị, mà là một giao thức định nghĩa giao tiếp giữa máy chủ và chương trình
- Chương trình gửi kết quả render trực tiếp của mình cho máy chủ hiển thị, và máy chủ sẽ xuất nó ra màn hình
- Điểm quan trọng là mô hình render không bị áp đặt → chương trình có thể vẽ theo cách mà nó muốn
- Nhờ đó, có thể gửi kết quả đầu ra đến nơi khác thay vì màn hình (ví dụ: terminal)
-
Xử lý đầu ra của Term.everything
- Nhận hình ảnh do Wayland client (ứng dụng GUI đang chạy) vẽ, rồi chuyển đổi thành đầu ra ký tự của terminal
- Quá trình chuyển đổi:
- 1. Nhận dữ liệu hình ảnh do client gửi tới
- 2. Chuyển nó thành ký tự UTF-8 + mã escape ANSI
- 3. Trong quá trình chuyển đổi, sử dụng thư viện chafa để ánh xạ pixel sang ký tự terminal
- Đầu vào được chuyển tiếp tới Wayland client dưới dạng sự kiện bàn phím và chuột nhận qua stdin
-
Triển khai thực tế
- Ý tưởng cốt lõi khá đơn giản, nhưng việc hiện thực thực tế cần khoảng hơn mười nghìn dòng mã
- Được viết bằng Typescript (dựa trên bun) và một phần C++, đồng thời đóng vai trò như một máy chủ hiển thị Wayland tùy biến
- Có thể xem mã nguồn trong thư mục src/
-
Khả năng mở rộng
- Term.everything không chỉ hướng tới việc chạy GUI trong terminal đơn thuần
- Với máy chủ hiển thị tùy biến dựa trên Wayland, còn có khả năng hiện thực nhiều ý tưởng thử nghiệm khác
- Ví dụ: kết nối thiết bị xuất ra không phải terminal mà là một phương tiện hoàn toàn khác (ví dụ: máy in, tác phẩm nghệ thuật vật lý, v.v.)
Chưa có bình luận nào.