Ubuntu Frame: Giải pháp “All-in-one” cho Kiosk và màn hình nhúng trên Wayland

Ubuntu tutorial - IT technology blog
Ubuntu tutorial - IT technology blog

Nỗi ám ảnh mang tên “X11” khi làm Kiosk

Bạn đã bao giờ thức trắng đêm chỉ để tìm cách ẩn con trỏ chuột hay vô hiệu hóa phím tắt Alt+Tab trên một máy tra cứu công cộng chưa? Ngày trước, mình từng mất hơn 6 tiếng chỉ để “chế” một script Python nhằm ngăn người dùng tắt trình duyệt trên màn hình quảng cáo. Kết quả là chỉ cần ai đó cắm bàn phím vào, mọi lớp bảo mật đều vỡ vụn.

Vấn đề cốt lõi nằm ở chỗ X11 vốn không được thiết kế cho các thiết bị nhúng hiện đại. Nó quá nặng nề, lỏng lẻo về phân quyền và cực kỳ khó cấu hình để đạt được độ ổn định 24/7. Chỉ cần một lỗi nhỏ trong script khởi động, màn hình Kiosk của bạn sẽ hiện ra giao diện desktop thô kệch, trông rất thiếu chuyên nghiệp.

Đây là lúc Ubuntu Frame xuất hiện như một “cứu cánh”. Được Canonical thiết kế dựa trên Mir (một Wayland compositor), nó lược bỏ hoàn toàn các thành phần desktop dư thừa. Ubuntu Frame chỉ tập trung vào một nhiệm vụ duy nhất: hiển thị ứng dụng của bạn ở chế độ toàn màn hình một cách an toàn nhất.

Tại sao Ubuntu Frame lại vượt trội hơn giải pháp cũ?

Về mặt kỹ thuật, Ubuntu Frame đóng vai trò là lớp trung gian tinh gọn giữa phần cứng và ứng dụng. Thay vì phải vật lộn với driver đồ họa hay quản lý cửa sổ, bạn chỉ cần ném ứng dụng vào và Frame sẽ lo phần còn lại.

Sau khi triển khai thực tế trên khoảng 50 đầu máy Raspberry Pi 4, mình rút ra 3 ưu điểm lớn nhất:

  • Bảo mật mặc định: Nhờ chạy dưới dạng Snap, ứng dụng bị cô lập hoàn toàn (sandboxed). Người dùng không có cách nào thoát ra hệ thống chính để táy máy file hệ thống.
  • Tiết kiệm tài nguyên: Trong khi một môi trường GNOME tối giản ngốn khoảng 500MB – 800MB RAM, Ubuntu Frame chỉ tiêu tốn chưa đến 100MB.
  • Hỗ trợ cảm ứng chuẩn xác: Giao thức Wayland xử lý đa điểm (multi-touch) và cử chỉ vuốt mượt mà hơn hẳn X11 vốn đã lỗi thời.

Hướng dẫn cài đặt Ubuntu Frame từng bước

Mình khuyến khích anh em sử dụng Ubuntu Server 22.04 LTS để có sự ổn định lâu dài. Quy trình thực hiện trên một máy server mới tinh như sau.

1. Cài đặt Ubuntu Frame qua Snap

Vì được phân phối chính thức qua Snap, việc cài đặt chỉ mất chưa đầy 1 phút:

sudo snap install ubuntu-frame

Sau khi cài xong, hãy kiểm tra xem service đã sẵn sàng chưa:

snap info ubuntu-frame

2. Kích hoạt giao diện đồ họa

Nếu bạn đang thao tác qua SSH, hãy dùng lệnh sau để yêu cầu Ubuntu Frame chiếm quyền kiểm soát màn hình:

sudo snap set ubuntu-frame daemon=true

Lúc này, màn hình kết nối trực tiếp với máy tính sẽ chuyển sang màu tối. Đừng hoảng hốt, đó là dấu hiệu Frame đã sẵn sàng nhận lệnh render từ ứng dụng của bạn.

3. Triển khai Web Kiosk với WPE WebKit

Đa số các dự án hiện nay đều dùng web-app cho tiện cập nhật. Giải pháp nhẹ nhất là WPE WebKit – trình duyệt này không có thanh địa chỉ hay menu, cực kỳ tối ưu cho Kiosk.

sudo snap install wpe-webkit-mir-kiosk

Tiếp theo, hãy kết nối trình duyệt với “bộ não” Ubuntu Frame thông qua interface:

sudo snap connect wpe-webkit-mir-kiosk:wayland ubuntu-frame

Cuối cùng, hãy trỏ trình duyệt tới địa chỉ mong muốn (ví dụ blog itfromzero.com):

sudo snap set wpe-webkit-mir-kiosk url=https://itfromzero.com

Cấu hình thực tế: Những mẹo nhỏ nhưng quan trọng

Trong các dự án thực tế, hiếm khi nào chúng ta để màn hình mặc định. Bạn sẽ cần tùy chỉnh sâu hơn để phù hợp với phần cứng.

Xoay màn hình (Display Rotation)

Nếu bạn lắp màn hình dọc (Portrait) cho các standee quảng cáo, hãy sửa file cấu hình tại: /var/snap/ubuntu-frame/current/frame.config.

# Xoay màn hình 90 độ sang phải
output:HDMI-A-1:rotate=90

Lưu file và restart lại service để áp dụng thay đổi:

sudo snap restart ubuntu-frame

Chế độ chẩn đoán lỗi

Khi màn hình không hiển thị như ý, đừng đoán mò. Hãy bật chế độ Diagnostic để xem FPS và thông số driver:

sudo snap set ubuntu-frame diagnostic-display=true
sudo snap restart ubuntu-frame

Lưu ý cho anh em dùng Flutter, Qt hoặc Electron

Nếu bạn không dùng Web mà tự build app bằng Flutter hoặc Qt, quy trình cũng tương tự. Bạn cần đóng gói app dưới dạng Snap và kết nối với wayland slot. Một lưu ý nhỏ: hãy luôn khai báo biến môi trường WAYLAND_DISPLAY=wayland-0 để app biết đường mà render.

Lời kết

Chuyển từ X11 sang Ubuntu Frame giống như việc bạn nâng cấp từ một chiếc xe cũ hỏng vặt sang một chiếc xe điện tự động hoàn toàn. Nó giúp bạn bớt lo về bảo mật hay lỗi vặt hiển thị, từ đó tập trung 100% vào việc phát triển tính năng cho app.

Nếu trong quá trình cài đặt mà gặp lỗi liên quan đến card đồ họa Intel hay AMD, anh em cứ để lại bình luận bên dưới. Mình sẽ hỗ trợ giải đáp dựa trên những ca “khó đẻ” mà mình từng gặp qua.

Share: