Winpodx - Công cụ chạy ứng dụng Windows dưới dạng cửa sổ native trên Linux
(github.com/kernalix7)Tôi đã dùng Linux làm hệ điều hành chính hơn 5 năm, nhưng các chương trình phụ thuộc vào Windows như Office (Outlook dùng Exchange, MS Project) hay các trang web của cơ quan nhà nước/tài chính thỉnh thoảng vẫn luôn kéo tôi trở lại Windows, và điều đó lúc nào cũng khiến tôi khó chịu.
Wine xử lý được nhiều thứ, nhưng ở những phần tích hợp sâu với Microsoft thì nó lại gục ngã.
Vì thế tôi đã tạo ra công cụ này. Chỉ cần bấm vào biểu tượng ứng dụng Windows trong menu ứng dụng của Linux là nó sẽ mở ra như một cửa sổ Linux native. Đây không phải RDP toàn màn hình; từng ứng dụng sẽ hiện thành các cửa sổ Linux độc lập.
Cách hoạt động
Nó chạy một container Windows (dockur/windows) trên Podman ở chế độ nền, rồi dùng FreeRDP RemoteApp để hiển thị từng ứng dụng Windows như cửa sổ Linux native. Bên trong guest, nó chạy một HTTP agent dùng bearer authentication để xử lý kênh lệnh host→guest (không hiện cửa sổ PowerShell).
- Bấm vào biểu tượng ứng dụng là chạy ngay (lần chạy đầu zero-config)
- Nhóm trên thanh tác vụ, liên kết tệp, alt-tab đều hoạt động bình thường
- Tự động phát hiện ứng dụng được cài trong guest (Registry App Paths, Start Menu, UWP/MSIX, Chocolatey, Scoop)
- Tự động tạm dừng container khi idle, tự động xoay vòng mật khẩu RDP mỗi 7 ngày
- Tự động scale HiDPI cho nhiều DE (GNOME, KDE, Sway, Hyprland, Cinnamon)
- Python + Qt6 (không dùng Electron, chủ yếu dựa trên stdlib)
Khác gì so với các công cụ cùng nhóm
winapps, winboat và LinOffice cũng dùng cùng tổ hợp dockur + FreeRDP. Điểm khác biệt của winpodx:
- Lần chạy đầu zero-config (các công cụ khác cần thiết lập thủ công hoặc trình cài đặt GUI)
- Hỗ trợ rõ ràng đường dẫn cài đặt air-gapped (
--source,--image-tar,--skip-deps) - Auto-config sâu hơn (tự động suspend, xoay vòng mật khẩu, HiDPI đa DE)
Tái triển khai RDPWrap bằng Rust (rdprrap)
Trong quá trình làm, có một side quest ngốn nhiều cuối tuần của tôi hơn hẳn dự kiến.
Windows Desktop giới hạn mỗi người dùng chỉ có một phiên RDP, nên nếu mở ứng dụng thứ hai thì nó sẽ cướp phiên đầu tiên. Giải pháp tiêu chuẩn là RDPWrap, nhưng công cụ này đã không còn được bảo trì suốt nhiều năm và chỉ được phát hành dưới dạng nhị phân C++ mờ đục.
Vì vậy tôi đã triển khai lại từ đầu bằng Rust (rdprrap, MIT). Nó được đóng gói sẵn trong winpodx và tự động cài đặt, hỗ trợ tối đa 10 phiên RDP độc lập.
Hạn chế
- Cần vài GB RAM cho container
- Chưa có GPU passthrough (với tác vụ nhạy cảm hiệu năng hoặc game thì nên dùng Wine + DXVK)
- Vẫn còn những chỗ chưa tinh chỉnh hết cho hành vi đặc thù theo từng ứng dụng trong RAIL
- Beta (
v0.3.0)
Cài đặt
Các bản phân phối được hỗ trợ: openSUSE, Fedora, Debian/Ubuntu, RHEL/Alma/Rocky 9 và 10. AUR đang chờ.
curl -fsSL https://raw.githubusercontent.com/kernalix7/winpodx/main/install.sh | bash
Hoặc có thể tải các gói RPM/deb dựng sẵn từ GitHub Release. Với openSUSE/Fedora, có thể cài qua OBS:
sudo zypper addrepo https://download.opensuse.org/repositories/home:/…
sudo zypper install winpodx
GitHub: https://github.com/kernalix7/winpodx
Vì vẫn đang ở giai đoạn beta nên rất hoan nghênh các issue.
Chưa có bình luận nào.