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.

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 cho cinnamon-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_MANAGERDBUS_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.

Sử dụng SSH tunnel để bảo mật giao thức RDP

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.

Kết nối Remote Desktop thông qua SSH tunnel

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 đó.

Giao diện đăng nhập của xRDP

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!

LMDE với Cinnamon hiển thị trên Remote Desktop

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).

Sử dụng độ phân giải hiển thị vừa phải

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.