Hướng dẫn cài đặt và cấu hình Remote Desktop Protocol dùng xRDP trên máy tính cài HĐH Linux Debian.
Để điều khiển máy Linux từ xa với GUI thì chúng ta có nhiều lựa chọn như VNC, X11 Forwarding và thậm chí là cả TeamViewer. Tuy nhiên với người dùng Windows thì Remote Desktop vẫn là lựa chọn tuyệt vời nhất vì nó có sẵn và ổn định.
Mục lục
Cài đặt RDP (Remote Desktop Protocol) trên máy Linux
Để điều khiển từ xa được bằng Remote Desktop, phía Linux server cần hỗ trợ RDP (Remote Desktop Protocol). Ở đây chúng ta sẽ sử dụng xRDP – một open source, đã phát triển từ năm 2004 cho đến nay.
Cài đặt xRDP trên Debian Linux như sau:
$ sudo apt update $ sudo apt install xrdp -y
Kiểm tra xem xRDP có đang hoạt động hay không bằng lệnh:
$ sudo systemctl status xrdp
Nếu thấy trạng thái active (running)
là OK rồi.
● xrdp.service - xrdp daemon Loaded: loaded (/lib/systemd/system/xrdp.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2020-07-08 10:15:39 +07; 11min ago Docs: man:xrdp(8) man:xrdp.ini(5) Process: 32360 ExecStartPre=/bin/sh /usr/share/xrdp/socksetup (code=exited, status=0/SUCCESS) Process: 32368 ExecStart=/usr/sbin/xrdp $XRDP_OPTIONS (code=exited, status=0/SUCCESS) Main PID: 32369 (xrdp) Tasks: 2 (limit: 4496) Memory: 15.1M CGroup: /system.slice/xrdp.service ├─32369 /usr/sbin/xrdp └─32372 /usr/sbin/xrdp ...
Lựa chọn môi trường Desktop hiển thị khi kết nối
Để sử dụng được xRDP thì nhất định bạn phải có ít nhất một Desktop Environment nào đó như GNOME, Mate, Cinnamon, KDE v.v… hoặc nhẹ nhàng hơn như Xcfe, LXDE.
Chúng ta cần quyết định sẽ khởi động Desktop Environment nào khi kết nối RDP thông qua script .xsession
đặt tại thư mục $HOME
của user. Nếu script này chưa tồn tại thì chúng ta sẽ tạo ra nó.
Mỗi Desktop Environment có lệnh khởi động khác nhau, ví dụ GNOME là gnome-session
, Xfce là xfce4-session
, Cinnamon là cinnamon-session
còn KDE là startkde
v.v…
Ví dụ, tôi muốn sử dụng giao diện Cinnamon thì tôi sẽ tạo file .xsession
như sau:
echo env -u SESSION_MANAGER -u DBUS_SESSION_BUS_ADDRESS cinnamon-session > ~/.xsession
Lệnh
env
lấy toàn bộ các biến môi trường hiện có của user truyền chocinnamon-session
. Tham số-u
để loại bỏ một số biến không cần thiết cho remote session nếu có, cụ thể ở đây làSESSION_MANAGER
vàDBUS_SESSION_BUS_ADDRESS
.
Dù là một script nhưng file .xsession
không cần có quyền executable.
Cho phép máy tính bên ngoài kết nối với RDP
Để cho phép các máy trong mạng LAN kết nối, chúng ta phải mở firewall cho cổng mặc định 3389
. Nếu sử dụng ufw
thì cấu hình như sau:
$ sudo ufw allow 3389
Tuy nhiên theo cá nhân tôi, tốt nhất là ta chỉ nên cho phép kết nối thông qua SSH tunnel. Nếu dùng PuTTY trên Windows, ta có thể cấu hình SSH tunnel qua menu Connections › SSH › Tunnels như hình dưới đây.
Local port tôi để là
23389
để tránh xung đột với Remote Desktop Service hiện có trên máy Windows.
Thử kết nối bằng Remote Desktop
Kết nối bằng Remote Desktop đến máy Debian Linux thông qua SSH Tunnel như sau. Lưu ý địa chỉ bao gồm localhost
với local port là 23389
.
Giao diện đăng nhập của xRDP sẽ hiện ra khi kết nối thành công. Có thể bạn sẽ hơi shock một chút vì độ “xấu” nhưng giao diện này không liên quan đến Desktop Environment sẽ hiển thị sau đó.
Hãy đăng nhập bằng tài khoản trên máy Linux của bạn. Lưu ý là tài khoản đó cần có file .xsession
như đã đề cập ở mục trên, nếu không Remote Desktop sẽ tắt ngay sau khi bạn ấn nút OK.
Và đây là sau khi kết nối thành công!
Tối ưu kết nối Remote Desktop
Do cách thức của RDP là render giao diện lên virtual screen nên hiệu suất hiển thị sẽ bị ảnh hưởng bởi độ phức tạp khi render giao diện. Sử dụng giao diện Desktop “nhẹ” như Xcfe hay LXDE rõ ràng đem lại tốc độ cao hơn các giao diện cầu kỳ như GNOME hay KDE. Tất nhiên, bạn nên chủ động tắt các hiệu ứng Desktop nếu có.
Bạn nên sử dụng độ phân giải hiển thị có kích thước vừa phải, ví dụ 1024x768
. Remote Desktop sẽ hiện như là một cửa sổ chứ không phải toàn màn hình (fullscreen).
Bạn có thể cài đặt độ sâu màu (color depth) là High Color (16 bit)
tuy nhiên cài đặt này có thể không hiệu lực với hệ thống Linux. theo tôi kiểm chứng với LMDE Cinnamon thì dù setup như vậy nhưng kết quả vẫn là 24 bit
.
Hãy thử tối ưu cho đường truyền tốc độ thấp, ví dụ chọn Low-speed broadband
.
Tính năng này không gây ảnh hưởng lớn do xRDP không tác động được đến lõi hiển thị giao diện như cách Remote Desktop Service/Terminal Service thực hiện trên Windows (ví dụ tắt bỏ các hiệu ứng render). Việc tắt hiệu ứng phải làm bằng tay trên từng giao diện.
Tuy nhiên cấu hình này có khả năng ảnh hưởng đến chất lượng hình ảnh và frame rate.
Trouble Shooting
Trường hợp tôi gặp phải là khi kết nối với Raspberry Pi bằng tài khoản pi
thì nhận được giao diện trống. Nguyên nhân là tài khoản pi
nằm trong group render
và video
.
Để giải quyết vấn đề này ta có thể loại bỏ user pi
khỏi 2 group trên bằng lệnh dưới đây.
for group in render video do; sudo gpasswd -d ${USER} ${group}; done
Cách làm này có thể ảnh hưởng một số phần mềm khác, ví dụ ta sẽ không thể chạy Kodi vì phần mềm này yêu cầu tài khoản phải nằm trong group video
.
Một cách khác là ta tạo một user mới chỉ dành cho Remote Desktop và tất nhiên không nằm trong hai group trên.