Chuyển từ X11 sang Wayland trên Linux: Sửa ứng dụng không tương thích và tối ưu màn hình trên Ubuntu và Arch Linux

Linux tutorial - IT technology blog
Linux tutorial - IT technology blog

Bắt đầu nhanh — Chuyển sang Wayland trong 5 phút

Trước khi chạm vào bất kỳ file cấu hình nào, hãy kiểm tra xem bạn đang dùng display server nào:

echo $XDG_SESSION_TYPE

Nếu in ra x11, bạn vẫn đang dùng X11. Nếu in ra wayland, bạn đã ở đó rồi — nhưng hãy đọc tiếp vì phần tương thích bên dưới sẽ giúp bạn tránh được nhiều đau đầu.

Trên Ubuntu 22.04 trở lên, Wayland có sẵn ở màn hình đăng nhập. Đăng xuất, nhấn vào tên người dùng, và tìm biểu tượng bánh răng ở góc dưới bên phải. Chọn Ubuntu on Wayland thay vì phiên X11 mặc định, rồi đăng nhập.

Ubuntu 24.04 đã mặc định dùng Wayland, nên có thể bạn đã đang chạy nó mà không biết.

Với Arch Linux cài GNOME:

# GDM xử lý tự động — chỉ cần đảm bảo nó đã được bật
sudo systemctl enable gdm
# Khi đăng nhập, chọn GNOME (Wayland) từ menu phiên làm việc

Với Arch dùng KDE Plasma 6 (từ đầu năm 2024 trở đi), Wayland đã là phiên mặc định — chọn Plasma (Wayland) tại màn hình đăng nhập SDDM, không cần cài thêm gói nào. Với các setup Plasma 5 cũ hơn:

sudo pacman -S plasma-wayland-session
# Sau đó chọn Plasma (Wayland) tại màn hình đăng nhập SDDM

Đó là phiên bản 5 phút. Bây giờ hãy để tôi kể cho bạn nghe những gì thực sự bị hỏng và cách xử lý.

Bên dưới mui xe — X11 và Wayland hoạt động khác nhau như thế nào

X11 đã tồn tại từ năm 1984. Nó được thiết kế trong một thời đại mà giả định là bất kỳ ứng dụng nào trên cùng màn hình đều có thể đọc pixel từ bất kỳ cửa sổ nào khác. Linh hoạt, đúng vậy — nhưng đó cũng là lý do tại sao keylogger và công cụ chụp màn hình hoạt động quá dễ dàng trên X11. Wayland khắc phục điều này bằng cách cô lập từng cửa sổ. Các client chỉ có thể nhìn thấy nội dung của chính mình.

Sự đánh đổi: các công cụ cũ dựa vào mô hình tự do của X11 sẽ ngừng hoạt động hoàn toàn. Đây là những gì bạn có thể gặp phải:

Quay màn hình và chụp ảnh màn hình

Các công cụ như scrot, import (ImageMagick) và các phiên bản OBS cũ hơn không thể chụp cửa sổ khác trên Wayland. Hãy chuyển sang các thay thế native:

# Cài grim (chụp màn hình) và slurp (chọn vùng) trên Wayland
# Ubuntu
sudo apt install grim slurp

# Arch
sudo pacman -S grim slurp

# Chụp ảnh màn hình một vùng đã chọn
grim -g "$(slurp)" ~/screenshot.png

# Toàn màn hình
grim ~/fullscreen.png

OBS đã thêm hỗ trợ Wayland từ phiên bản 27 (giữa năm 2021) thông qua PipeWire. Các distro hiện tại đi kèm phiên bản 30+, nên gần như chắc chắn bạn đã được hỗ trợ — nhưng hãy xác minh PipeWire đang thực sự chạy:

systemctl --user status pipewire pipewire-pulse

# Khởi động nếu chưa chạy
systemctl --user start pipewire pipewire-pulse wireplumber

Ứng dụng vẫn cần X11 — XWayland ra đây

XWayland là lớp tương thích chạy một X server bên trong phiên Wayland của bạn. Hầu hết các Wayland compositor tự động khởi động nó khi một ứng dụng X11 chạy. Các app Electron cũ, GUI Java cũ hơn và game Wine thường hoạt động bình thường qua nó. Vấn đề nằm ở HiDPI scaling và xử lý input — những cái đó có thể khá lộn xộn.

Kiểm tra xem một ứng dụng có đang chạy qua XWayland không:

xlsclients

Bất kỳ ứng dụng nào được liệt kê ở đó đang chạy qua XWayland, không phải Wayland native.

Remote Desktop và SSH X Forwarding

X11 forwarding (ssh -X) không hoạt động native trong phiên Wayland. Hai lựa chọn nếu bạn cần ứng dụng GUI qua SSH:

# Lựa chọn 1: Giữ phiên X11 trên máy từ xa và forward từ đó
ssh -X user@remote xterm

# Lựa chọn 2: Dùng Waypipe để forward theo kiểu Wayland native
# Trên Arch
sudo pacman -S waypipe
# Kết nối với Waypipe
waypipe ssh user@remote wayland-app

Nâng cao — Biến môi trường và cách sửa từng ứng dụng

Một số ứng dụng cần được thúc đẩy để dùng Wayland native thay vì rơi về XWayland. Một vài biến môi trường xử lý được hầu hết các trường hợp này.

Buộc dùng Wayland cho ứng dụng Qt và GTK

# Thêm vào ~/.bash_profile hoặc ~/.zshenv
export QT_QPA_PLATFORM=wayland
export GDK_BACKEND=wayland
export CLUTTER_BACKEND=wayland
export SDL_VIDEODRIVER=wayland

Hãy cẩn thận với SDL_VIDEODRIVER=wayland — một số game sẽ crash với cài đặt này. Tôi để nó thành comment và chỉ bật cho các ứng dụng mà tôi biết có hỗ trợ.

Firefox và Chromium dùng Wayland native

Cả hai trình duyệt đều hỗ trợ Wayland native nhưng không phải lúc nào cũng tự phát hiện được:

# Firefox — thêm vào /etc/environment hoặc shell profile của bạn
MOZ_ENABLE_WAYLAND=1

# Hoặc khởi chạy với flag trực tiếp
MOZ_ENABLE_WAYLAND=1 firefox
# Lưu ý: Firefox 121+ (tháng 12/2023) tự động phát hiện Wayland — biến này chủ yếu giúp các phiên bản cũ hơn

# Chromium (Arch Linux) — file flags nằm ở thư mục gốc ~/.config, không phải bên trong thư mục profile
echo "--ozone-platform=wayland" >> ~/.config/chromium-flags.conf

# Google Chrome
echo "--ozone-platform=wayland" >> ~/.config/google-chrome-flags.conf

Sau đó, bạn sẽ có HiDPI rendering đúng cách và không còn font bị mờ trên màn hình 4K.

Ứng dụng Electron (VS Code, Slack, Discord)

# VS Code — thử nghiệm với flags inline trước
code --enable-features=UseOzonePlatform --ozone-platform=wayland

# Làm vĩnh viễn — ghi trực tiếp vào file flags (~/.config đã tồn tại)
echo "--enable-features=UseOzonePlatform --ozone-platform=wayland" >> ~/.config/code-flags.conf

# Với các ứng dụng Electron khác, override file .desktop
# Sao chép vào thư mục local của người dùng trước
cp /usr/share/applications/slack.desktop ~/.local/share/applications/
# Sau đó chỉnh sửa dòng Exec để thêm các Wayland flags

Chia sẻ màn hình trong cuộc gọi video (Zoom, Teams, Google Meet)

Đây là phần đau đầu nhất trong quá trình chuyển đổi của tôi. Chia sẻ màn hình trên Wayland yêu cầu PipeWire và gói xdg-desktop-portal:

# Ubuntu
sudo apt install xdg-desktop-portal xdg-desktop-portal-gnome pipewire-audio

# Arch
sudo pacman -S xdg-desktop-portal xdg-desktop-portal-gnome pipewire pipewire-pulse

# Xác minh các portal đang chạy
systemctl --user status xdg-desktop-portal xdg-desktop-portal-gnome

Zoom đã thêm hỗ trợ Wayland native từ phiên bản 5.12 (đầu năm 2022). Các bản hiện tại xử lý tốt. Nếu chia sẻ màn hình hiển thị màn hình đen, hãy kiểm tra PipeWire đang hoạt động — không phải PulseAudio đang chạy độc lập.

Mẹo thực tế từ kinh nghiệm dùng Wayland hàng ngày

Luôn giữ phiên X11 dự phòng

Đừng xóa X11 khỏi hệ thống. Ubuntu cho phép bạn chuyển về lúc nào cũng được tại màn hình đăng nhập. GDM và SDDM trên Arch đều cung cấp cả hai loại phiên. Tôi giữ X11 lại cho các ứng dụng thỉnh thoảng không chịu hợp tác — chủ yếu là các công cụ chia sẻ màn hình độc quyền cho họp công ty.

Hành vi clipboard khác đi

X11 giữ nội dung clipboard tồn tại ngay cả sau khi ứng dụng nguồn đóng lại. Wayland thì không — đóng ứng dụng đã sao chép thứ gì đó, và mục clipboard đó biến mất. Một clipboard manager sẽ giải quyết vĩnh viễn vấn đề này:

# Ubuntu / Debian
sudo apt install wl-clipboard cliphist

# Arch
sudo pacman -S wl-clipboard cliphist

# Thêm vào autostart của phiên Wayland (ví dụ cho GNOME qua .profile)
wl-paste --watch cliphist store &

Kiểm tra tăng tốc GPU và compositor

Trên máy trạm Ubuntu 22.04 của tôi với 4GB RAM, chuyển sang Wayland đã giảm khoảng 180–220MB bộ nhớ khi idle so với X11 dùng Compiz. Compositor — Mutter trên GNOME, KWin trên KDE — giao tiếp trực tiếp với GPU, bỏ qua lớp dịch mà X11 cần ở giữa.

Xác minh tăng tốc phần cứng đang hoạt động:

# Kiểm tra GNOME Mutter có đang dùng hardware rendering không
GSETTINGS_SCHEMA_DIR=/usr/share/glib-2.0/schemas gsettings get org.gnome.mutter experimental-features

# Xem chi tiết hơn về hoạt động GPU
GLXINFO=$(which glxinfo 2>/dev/null); [ -n "$GLXINFO" ] && glxinfo | grep "direct rendering"

# Dành riêng cho Wayland: kiểm tra thiết bị DRM
ls /dev/dri/

Gỡ lỗi vấn đề ứng dụng

Khi một ứng dụng hoạt động lạ trên Wayland, hãy chạy từ terminal để xem output lỗi:

# Chạy với verbose Wayland debug output
WAYLAND_DEBUG=1 your-app 2>&1 | head -50

# Hoặc kiểm tra xem buộc dùng XWayland có giúp ích không (hữu ích để chẩn đoán)
GDK_BACKEND=x11 your-gtk-app
QT_QPA_PLATFORM=xcb your-qt-app

Nếu ứng dụng hoạt động tốt với GDK_BACKEND=x11 nhưng không hoạt động trên Wayland native, bạn đã tìm ra vấn đề tương thích riêng của ứng dụng đó. Giải pháp tạm thời: giữ nó trên XWayland trong khi các nhà phát triển upstream theo kịp.

Bộ gõ (Ngôn ngữ CJK)

Nếu bạn gõ tiếng Nhật, tiếng Trung hoặc tiếng Hàn, hỗ trợ bộ gõ trên Wayland cần được chú ý đặc biệt. Fcitx5 xử lý Wayland tốt hơn nhiều so với Fcitx4 hoặc IBus trong hầu hết các cấu hình:

# Cài Fcitx5 với hỗ trợ Wayland
# Ubuntu
sudo apt install fcitx5 fcitx5-mozc fcitx5-gtk fcitx5-qt

# Arch
sudo pacman -S fcitx5 fcitx5-mozc fcitx5-gtk fcitx5-qt

# Thêm vào ~/.profile hoặc /etc/environment
GTK_IM_MODULE=fcitx
QT_IM_MODULE=fcitx
XMODIFIERS=@im=fcitx

Quá trình chuyển đổi không phải lúc nào cũng suôn sẻ, và một số công cụ vẫn sẽ kéo bạn quay lại XWayland một thời gian. Nhưng Wayland native mang lại bảo mật cô lập tốt hơn, animation mượt hơn (không bị xé màn hình theo thiết kế), và hỗ trợ HiDPI ngày càng tốt hơn. Hãy chạy cả hai phiên song song trong thời gian chuyển đổi — không cần phải cắt đứt X11 hoàn toàn ngay.

Share: