SSD Nodes Learn 🎉 VPS từ $5.50/tháng
Hướng dẫn Matt ConnorBởi Matt Connor

Remote desktop trên Linux VPS với xrdp và XFCE

Chạy desktop đồ họa thật trên Linux VPS bằng xrdp và XFCE, tunnel qua SSH thay vì mở port 3389, đồng thời biết khi nào nên dùng RustDesk.

Ý nghĩa thực tế của remote desktop trên Linux VPS

Có 2 loại sản phẩm khác nhau thường xuất hiện khi tìm kiếm “remote desktop trên Linux VPS”. Chọn nhầm loại có thể khiến bạn mất cả buổi chiều. Loại thứ nhất là một remote-access broker. RustDesk self-hosted server là ví dụ phổ biến: nó relay một session giữa 2 máy bạn đã sở hữu, chẳng hạn laptop và PC ở nhà. Máy chủ thuê không chạy desktop nào cả. Nó giúp 2 đầu kết nối nhận diện nhau và forward packet khi 2 đầu không thể kết nối trực tiếp. Loại thứ hai là một graphical desktop thực sự chạy trên máy chủ thuê. Khi đó, pixel được render trong data centre rồi stream đến bạn. xrdp, VNC (virtual network computing) và container workspace thuộc loại này.

Có một câu hỏi giúp phân biệt 2 loại này. Sau khi thiết lập xong, con trỏ chuột đang nằm ở đâu? Nếu con trỏ nằm trên một máy bạn đã sở hữu, bạn cần broker. Nếu con trỏ nằm trên chính VPS, bạn cần desktop chạy trên VPS. Phần bên dưới chủ yếu nói về trường hợp thứ hai, vì đây là trường hợp mà hầu hết các hướng dẫn đều bỏ qua.

Tùy chọn nào phù hợp với công việc của bạn

  • RustDesk với relay riêng. Cách này ngăn phiên kết nối đi qua rendezvous server công khai do bên khác vận hành, vì bạn giữ key pair. Nó không bảo vệ máy đang được điều khiển. Máy đó vẫn là PC nơi bạn đã cài client, với mật khẩu hiện có trên PC đó.
  • xrdp qua SSH tunnel hoặc VPN. Cách này bảo vệ bạn khỏi việc Internet liên tục quét TCP 3389 và thử đoán mật khẩu tại màn hình đăng nhập RDP, vì cổng đó không bao giờ tiếp xúc trực tiếp với Internet. Nó không bảo vệ mật khẩu tài khoản yếu trước bất kỳ ai đã có tunnel.
  • VNC qua cùng tunnel. Cách này cung cấp desktop session vẫn tiếp tục sau khi bị ngắt kết nối, bằng một protocol cũ và đơn giản hơn RDP. Bản thân VNC không bảo vệ được gì: tunnel mới thực hiện toàn bộ phần bảo mật. Vì vậy, chạy riêng VNC trên một public port là lựa chọn tệ nhất ở đây.
  • Container workspace như Webtop hoặc Kasm. Cách này cung cấp browser hoặc toàn bộ desktop trong một container mà bạn có thể xóa và dựng lại, nhờ đó bảo vệ máy thật khỏi mọi thứ mà browser đó truy cập. Nó không bảo vệ host: các image này chạy với quyền rộng và có sudo không yêu cầu mật khẩu bên trong, nên không được xem container là một boundary đủ tin cậy cho workload độc hại.

Cài xrdp và XFCE trên Ubuntu 24.04

Image máy chủ VPS không có desktop đồ họa. Bạn cài desktop, sau đó cài xrdp, server mã nguồn mở sử dụng RDP (remote desktop protocol), cùng protocol mà client Windows sử dụng. Hãy chọn một desktop nhẹ; XFCE thường là lựa chọn phù hợp.

sudo apt update
sudo apt install -y xrdp xorgxrdp xfce4 xfce4-goodies dbus-x11
systemctl is-active xrdp

Tính đến tháng 8 năm 2026, Ubuntu 24.04 có xrdp 0.9.24 và xorgxrdp trong component universe. Hãy cài xorgxrdp theo tên, dù đây chỉ là package được khuyến nghị: đó là backend X server mà xrdp khởi chạy cho session mới. Nếu thiếu package này, hộp thoại đăng nhập sẽ nhận password rồi đưa bạn trở lại ngay hộp thoại đăng nhập.

Bây giờ cấu hình desktop mà session sẽ khởi chạy. xrdp chạy /etc/xrdp/startwm.sh. File này sẽ chạy ~/.xsession nếu file đó tồn tại.

echo "xfce4-session" > ~/.xsession
chmod 644 ~/.xsession

Cuối cùng, xrdp cần đọc TLS (transport layer security) key mà nó cung cấp cho client. File này có mode 640 và thuộc group ssl-cert.

ls -l /etc/ssl/private/ssl-cert-snakeoil.key
id xrdp

Kết quả listing hiển thị -rw-r----- 1 root ssl-cert. Nếu id xrdp không in ssl-cert trong danh sách group, hãy chạy sudo adduser xrdp ssl-cert rồi sudo systemctl restart xrdp. Nếu bỏ qua bước này, xrdp không thể mở key, và /var/log/xrdp.log sẽ ghi lại lỗi với tên file snakeoil trong dòng log.

Vì sao không nên mở cổng 3389 ra Internet

TCP 3389 liên tục bị mọi hệ thống trên Internet quét, và hộp đăng nhập RDP sẽ phản hồi mọi lần thử mật khẩu. Không được mở cổng này. Thay vào đó, hãy bind xrdp vào địa chỉ loopback và truy cập thông qua một tunnel mà bạn đã tin cậy.

Chỉnh sửa /etc/xrdp/xrdp.ini và thay đổi listener trong section [Globals].

[Globals]
port=tcp://.:3389

File được cài sẵn có ghi cú pháp này trong phần comment: tcp://.:3389 nghĩa là 127.0.0.1:3389, còn tcp://:3389 nghĩa là mọi interface. Hãy restart và xác nhận lại, vì một lỗi gõ sai ở đây có thể khiến service vẫn lắng nghe trên mọi địa chỉ mà không báo rõ.

sudo systemctl restart xrdp
ss -tlnp | grep 3389

Bạn cần thấy 127.0.0.1:3389. Nếu thấy 0.0.0.0:3389, nghĩa là xrdp đã bỏ qua thay đổi của bạn, thường do dòng cấu hình nằm dưới một section heading khác ở phía dưới file.

Bây giờ hãy mở tunnel từ máy của bạn.

ssh -N -L 3389:127.0.0.1:3389 you@vps.example.com

-N nghĩa là “mở kết nối nhưng không chạy command nào”, nên session chỉ tồn tại để chuyển tiếp port. Giữ terminal đó mở và trỏ RDP client đến 127.0.0.1:3389. Trên client Linux, phần mềm cần dùng là FreeRDP 3. Binary trên Ubuntu 24.04 có tên xfreerdp3:

sudo apt install -y freerdp3-x11
xfreerdp3 /v:127.0.0.1:3389 /u:you /dynamic-resolution +clipboard /sound

Trên Windows, dùng mstsc tích hợp sẵn và nhập 127.0.0.1 làm computer. FreeRDP yêu cầu bạn tin cậy certificate trong lần kết nối đầu tiên và hiển thị Do you trust the above certificate? (Y/T/N). Đây là hành vi bình thường với certificate snakeoil tự ký.

Nếu ssh trả về bind [127.0.0.1]:3389: Address already in use, nghĩa là trên máy của bạn đã có một process khác chiếm cổng 3389. Hãy chuyển đầu local bằng ssh -N -L 13389:127.0.0.1:3389 you@vps.example.com rồi kết nối đến 127.0.0.1:13389.

Mỗi người dùng một tunnel sẽ nhanh chóng trở nên bất tiện. Với một team, giải pháp tốt hơn là dùng private network. Đặt máy chủ phía sau WireGuard VPN tự host, cấp cho máy địa chỉ tunnel 10.8.0.1, rồi cấu hình port=tcp://10.8.0.1:3389 để xrdp chỉ phản hồi bên trong VPN. Dù dùng cách nào, firewall rule cho cổng 3389 cũng không nên tồn tại. Nếu chưa chắc các rule hiện tại đang cho phép gì, hãy bắt đầu với kiến thức cơ bản về ufw firewall trên VPS và kiểm tra trước khi kết nối, không phải sau đó.

Một remote desktop dùng bao nhiêu RAM trên VPS 2 GB

Desktop bạn chọn quyết định gói 2 GB có đủ dùng hay hoàn toàn không đáp ứng được. Các số liệu dưới đây là những mức RAM điển hình đã làm tròn, được ghi nhận ngay sau khi đăng nhập vào Ubuntu 24.04. Chúng lấy từ các so sánh đã công bố, không phải từ phép đo trên máy của bạn. Hãy đo trên máy của bạn bằng free -m ngay sau khi kết nối.

ChartTypical memory in use after login, Ubuntu 24.04 (published figures)
The data behind this chart
[
  {
    "label": "LXQt",
    "idle_ram_mb": 300
  },
  {
    "label": "XFCE",
    "idle_ram_mb": 400
  },
  {
    "label": "MATE",
    "idle_ram_mb": 500
  },
  {
    "label": "KDE Plasma",
    "idle_ram_mb": 800
  },
  {
    "label": "GNOME",
    "idle_ram_mb": "1,200"
  }
]

Điểm đáng chú ý là mức chênh lệch giữa 5 desktop này. LXQt dùng khoảng 300 MB và XFCE khoảng 400 MB, nên cả hai vẫn để lại đủ RAM trên máy 2 GB cho một trình duyệt. GNOME cần khoảng 1,200 MB trước cả khi bạn mở một cửa sổ, nên trên máy 2 GB, trình duyệt phải tranh phần RAM còn lại với desktop.

Trình duyệt mới là phần tiêu tốn tài nguyên chính, không phải desktop shell. Một trình duyệt hiện đại thường dùng từ 150 đến 400 MB cho mỗi tab đang hoạt động. Vì vậy, VPS 2 GB chạy XFCE chỉ xử lý được một số tab, sau đó bắt đầu dùng swap. Hãy thêm swap để máy chậm lại thay vì kill process: sudo fallocate -l 2G /swapfile, sau đó chạy sudo chmod 600 /swapfile, sudo mkswap /swapfile, sudo swapon /swapfile và thêm dòng tương ứng vào /etc/fstab để swap vẫn được kích hoạt sau reboot. Khi một process biến mất mà không có cảnh báo, hãy chạy dmesg | grep -i "killed process". Dòng đó cho biết kernel out-of-memory killer đã kết thúc process. Trình duyệt thường là process bị kill.

CPU là giới hạn còn lại và dễ bị đánh giá thấp hơn. VPS không có GPU, nên X chuyển sang software rendering thông qua llvmpipe. Điều này có nghĩa CPU phải vẽ từng pixel. Việc cuộn một trang web nặng và phát video đều hiển thị dưới dạng CPU load thông thường. Frame rate sẽ giảm thay vì máy bị treo. Đây cũng là giới hạn bạn gặp phải nếu đang tự hỏi có thể chơi game trên VPS hay không: với mọi tác vụ 3D, câu trả lời là không, chính vì lý do này.

Âm thanh và clipboard trong phiên xrdp

Ubuntu 24.04 sử dụng PipeWire cho âm thanh, còn tính năng chuyển hướng âm thanh của xrdp được viết cho PulseAudio. Vì vậy, bản cài đặt mới thường có hình ảnh nhưng không có âm thanh. Ubuntu có sẵn package bridge.

sudo apt install -y pipewire-module-xrdp pulseaudio-utils alsa-utils

Đăng xuất hoàn toàn khỏi phiên RDP rồi đăng nhập lại, vì module được nạp khi phiên bắt đầu. Chỉ kết nối lại là chưa đủ. Sau đó, chạy lệnh sau bên trong phiên:

pactl list short sinks
speaker-test -c 2 -t wav -l 1

Bạn sẽ thấy một sink có tên chứa xrdp và nghe được âm thanh kiểm tra qua client. Nếu không có sink xrdp, module chưa được nạp vào phiên này. Client cũng phải yêu cầu chuyển hướng âm thanh. Trong xfreerdp3, đó là flag /sound. Với client Windows, đây là tùy chọn "Remote audio" trong Local Resources.

Clipboard văn bản hoạt động theo cả hai chiều khi xrdp-chansrv đang chạy cho phiên của bạn; xrdp tự khởi động tiến trình này. Xác nhận bằng pgrep -a xrdp-chansrv. Nếu copy và paste ngừng hoạt động giữa chừng trong phiên, tiến trình đó đã bị dừng. Kết nối lại sẽ khởi động lại tiến trình. Sao chép file thay vì văn bản là một kênh riêng gọi là drive redirection: /drive:home,/home/you trên xfreerdp3 mount một thư mục local vào phiên remote.

Cửa sổ polkit và các lỗi khác khi đăng nhập lần đầu

Bất ngờ thường gặp nhất khi đăng nhập lần đầu là hộp thoại có nội dung Authentication is required to create a color managed device. Nguyên nhân cụ thể như sau. Service colord yêu cầu polkit cấp quyền. polkit chỉ âm thầm cấp action đó cho session mà nó xác định là đang ngồi tại máy cục bộ. Session RDP không được xem là session cục bộ, nên polkit chuyển sang yêu cầu bạn nhập password. Ubuntu 24.04 đi kèm polkit 124. Phiên bản này đã loại bỏ các file authority cũ .pkla. Vì vậy, mọi hướng dẫn yêu cầu bạn ghi vào /etc/polkit-1/localauthority/50-local.d/45-allow-colord.pkla đều không có tác dụng trên 24.04. Thay vào đó, hãy viết một rule JavaScript.

/* /etc/polkit-1/rules.d/45-allow-colord.rules */
polkit.addRule(function(action, subject) {
    if (action.id.indexOf("org.freedesktop.color-manager.") === 0 &&
        subject.isInGroup("sudo")) {
        return polkit.Result.YES;
    }
});

Chạy sudo systemctl restart polkit rồi kết nối lại. Có 2 lỗi khác cần nhận biết qua triệu chứng.

Hộp đăng nhập nhận password rồi lập tức quay lại. Session đã khởi động nhưng bị dừng. Trước tiên hãy đọc /var/log/xrdp-sesman.log, sau đó đọc ~/.xsession-errors trong thư mục home của bạn. Thiếu xorgxrdp, ~/.xsession trỏ đến một desktop chưa được cài đặt, thư mục home không cho bạn ghi, hoặc disk đầy đều dẫn đến lỗi này.

Bạn kết nối và thấy màn hình màu xám với con trỏ X. X đã khởi động nhưng desktop thì chưa. Đây lại là ~/.xsession: chạy xfce4-session thủ công qua SSH và đọc lỗi mà lệnh in ra.

Chức năng của máy chủ RustDesk tự host

RustDesk tách thành hai tiến trình. hbbs là máy chủ ID và rendezvous để client đăng ký, còn hbbr là relay chuyển tiếp phiên khi kết nối peer-to-peer trực tiếp thất bại. Cả hai đều không chạy desktop. Cả hai dùng chung một image. Đây là compose file do dự án cung cấp, trong đó địa chỉ relay đã được đổi thành hostname của bạn:

services:
  hbbs:
    container_name: hbbs
    image: rustdesk/rustdesk-server:latest
    command: hbbs -r rustdesk.example.com:21117
    ports:
      - 21115:21115
      - 21116:21116
      - 21116:21116/udp
      - 21118:21118
    volumes:
      - ./data:/root
    restart: unless-stopped
  hbbr:
    container_name: hbbr
    image: rustdesk/rustdesk-server:latest
    command: hbbr
    ports:
      - 21117:21117
      - 21119:21119
    volumes:
      - ./data:/root
    restart: unless-stopped

Khởi động các container, rồi đọc public key mà server tạo trong lần khởi động đầu tiên:

sudo docker compose up -d
sudo cat ./data/id_ed25519.pub

Mỗi client cần hostname và public key của bạn. Nhập cả hai trong mục Network settings của RustDesk client. Private key tương ứng được lưu trong ./data/id_ed25519. Nếu xóa data directory, server sẽ tạo một cặp key mới. Khi đó, bạn phải cấu hình lại key trên mọi client. Hãy backup directory này.

Firewall phải cho phép trực tiếp các port sau. hbbs sử dụng TCP 21115, 21116 và 21118, cùng UDP 21116. hbbr sử dụng TCP 21117 và 21119.

sudo ufw allow 21115/tcp
sudo ufw allow 21116/tcp
sudo ufw allow 21116/udp
sudo ufw allow 21117/tcp
sudo ufw allow 21118/tcp
sudo ufw allow 21119/tcp

Vì sao RustDesk không chạy phía sau nginx hoặc Traefik

Những người đã terminate TLS cho mọi dịch vụ tại một reverse proxy thường thử cách này rồi gặp lỗi. hbbs và hbbr sử dụng protocol nhị phân riêng trên TCP và UDP, không phải HTTP. Không có header Host để định tuyến và cũng không có HTTP request để kiểm tra, nên block server của nginx hoặc HTTP router của Traefik không có gì để khớp. UDP listener trên cổng 21116 không liên quan đến HTTP ở bất kỳ layer nào.

Có hai cách hoạt động. nginx có thể forward các cổng TCP bằng block stream. Đây chỉ là forwarding ở layer 4, không phải reverse proxy theo nghĩa thông thường. Các cổng 21118 và 21119 mang websocket mà RustDesk web client sử dụng. Đây là HTTP thông thường, nên hai cổng này có thể chạy phía sau proxy. Nếu làm vậy, hãy thêm firewall rule để chỉ proxy được phép truy cập 21118 và 21119, vì hbbs dựa vào header X-Real-IP trên các kết nối websocket để xác định địa chỉ client thật.

Trình duyệt dùng một lần trong container

Đôi khi bạn chỉ cần một trình duyệt sạch, có IP cố định và được tách khỏi máy của mình. Container workspace đáp ứng việc này mà không cần cài nhiều phần mềm. Webtop của LinuxServer là lựa chọn nhẹ:

services:
  webtop:
    image: lscr.io/linuxserver/webtop:latest
    container_name: webtop
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Etc/UTC
    volumes:
      - /path/to/data:/config
    ports:
      - 127.0.0.1:3000:3000
      - 127.0.0.1:3001:3001
    shm_size: "1gb"
    restart: unless-stopped

Cổng 3000 phục vụ HTTP và cổng 3001 phục vụ HTTPS. Bạn truy cập desktop trong một tab trình duyệt mà không cần RDP client. Image tag hỗ trợ XFCE, KDE, MATE và i3 trên nhiều bản phân phối nền. Tài liệu của dự án cảnh báo rõ về rủi ro: container có quyền privileged trên host và chứa một terminal với sudo không yêu cầu password. Vì vậy, không được để container này trực tiếp đối diện Internet khi chưa có biện pháp bảo vệ. Đó là lý do các cổng trên được bind vào 127.0.0.1 thay vì publish trên mọi địa chỉ. Hãy truy cập container qua SSH tunnel hoặc VPN giống như khi dùng xrdp.

Kasm Workspaces cũng hoạt động theo cách tương tự nhưng có quy mô lớn hơn nhiều. Sản phẩm này có web console, user account và các container riêng cho từng session; container sẽ được reset khi session kết thúc. Kasm cần nhiều tài nguyên hơn mức một VPS nhỏ thường có. Tính đến August 2026, mức tối thiểu được tài liệu ghi nhận là 2 CPU core, 4 GB memory và 50 GB SSD. Mỗi user session còn mặc định dùng thêm 2 core và 2768 MB. Gói 2 GB sẽ không chạy được Kasm. Quá trình cài đặt gồm tải xuống và chạy một script:

cd /tmp
curl -O https://kasm-static-content.s3.amazonaws.com/kasm_release_1.17.0.7f020d.tar.gz
tar -xf kasm_release_1.17.0.7f020d.tar.gz
sudo bash kasm_release/install.sh

VNC và trường hợp vẫn nên dùng

VNC gửi các bản cập nhật framebuffer thay vì lệnh vẽ, nên có cảm giác nặng hơn RDP trên đường truyền chậm và không có kênh âm thanh. VNC phù hợp trong một trường hợp: bạn muốn một phiên desktop tiếp tục chạy sau khi ngắt kết nối và muốn quay lại đúng phiên đó khi kết nối lại. TigerVNC hỗ trợ việc này. vncserver -localhost yes :1 bind Xvnc vào 127.0.0.1 trên TCP 5901 và từ chối kết nối từ mọi nơi khác, vì vậy bạn tunnel nó giống như xrdp bằng ssh -N -L 5901:127.0.0.1:5901 you@vps.example.com. Không bao giờ public một cổng VNC. Hầu hết VNC server chỉ bảo vệ password trong lúc handshake, còn dữ liệu sau đó không được mã hóa. Vì vậy, nếu public cổng VNC, nội dung phiên có thể bị đọc trên đường truyền.

VPS có phù hợp làm máy desktop không?

Để dùng hằng ngày thì không, và có nhiều lý do. VPS không có GPU nên CPU phải xử lý toàn bộ phần hiển thị. Mỗi lần nhấn phím đều phải chờ một vòng truyền qua mạng, và độ trễ 40 ms vốn vẫn ổn khi dùng SSH sẽ dễ nhận thấy trong trình soạn thảo văn bản. Video bị nén hai lần: một lần trên website và một lần nữa bởi RDP encoder. File của bạn nằm trên một disk mà bạn không trực tiếp quản lý, còn việc dùng desktop nhiều sẽ tiêu tốn hạn mức bandwidth hằng tháng vốn được tính cho web server.

Nếu dùng như một máy tạm thời thì VPS rất phù hợp, và chính các đặc điểm trên giải thích cho điều đó. Địa chỉ IP ổn định và thuộc về một data centre, phù hợp khi service cần nhìn thấy một địa chỉ nhất quán. Máy có thể được rebuild từ image trong vài phút, nên nếu một session bị nhiễm thứ gì đó nguy hiểm thì bạn không mất gì đáng kể. VPS được tách khỏi phần cứng thật của bạn và vẫn tiếp tục chạy khi bạn đóng laptop. Tính phí theo giờ giúp một desktop dùng tạm có chi phí thấp.

Nếu bạn vẫn chưa xác định VPS này dùng để làm gì, danh sách thực tế về những việc VPS làm tốt đáng để đọc trước khi cài desktop lên đó. Nếu lý do bạn cần desktop chỉ là một ứng dụng Windows, trước tiên hãy cân nhắc điều đó cùng với những khác biệt thực tế giữa Linux và Windows Server, vì license sẽ thay đổi chi phí của phương án.

FAQ

Tôi có thể chạy remote desktop trên VPS 2 GB không?

Có, nếu dùng desktop nhẹ. XFCE hoặc LXQt dùng khoảng 300 đến 400 MB sau khi đăng nhập, nên vẫn đủ cho trình duyệt mở vài tab. GNOME hoặc KDE Plasma trên VPS 2 GB gần như không còn RAM cho ứng dụng. Hãy thêm một swap file 2 GB để khi thiếu bộ nhớ, máy chạy chậm thay vì kill process. Khi một process biến mất mà không có thông báo, hãy kiểm tra dmesg | grep -i "killed process" để xem kernel out-of-memory killer.

Tôi có nên mở port 3389 trên firewall của VPS không?

Không. TCP 3389 luôn bị scan, và một hộp đăng nhập RDP public sẽ khiến hệ thống bị đoán password. Đặt port=tcp://.:3389 trong /etc/xrdp/xrdp.ini để xrdp chỉ listen trên 127.0.0.1, xác nhận bằng ss -tlnp | grep 3389, rồi truy cập qua ssh -N -L 3389:127.0.0.1:3389 you@vps.example.com. Nếu có hơn một hoặc hai người dùng, hãy bind xrdp vào địa chỉ WireGuard thay vì loopback.

Vì sao xrdp hỏi "Authentication is required to create a color managed device"?

Service colord yêu cầu polkit cấp quyền, nhưng polkit chỉ tự động cấp action đó cho session đang đăng nhập cục bộ. RDP session không được xem là session cục bộ, nên bạn sẽ thấy prompt nhập password ở mỗi lần đăng nhập. Trên Ubuntu 24.04, cách sửa cũ .pkla không có tác dụng vì polkit 124 đã bỏ các local authority file. Hãy tạo /etc/polkit-1/rules.d/45-allow-colord.rules chứa một JavaScript rule trả về polkit.Result.YES cho các action id bắt đầu bằng org.freedesktop.color-manager., rồi chạy sudo systemctl restart polkit.

Tôi có thể đặt server RustDesk tự host phía sau nginx hoặc Traefik không?

Không thể đặt service chính phía sau proxy. hbbs và hbbr dùng binary protocol riêng thay vì HTTP, nên không có Host header để định tuyến. UDP 21116 cũng không thể đi qua HTTP proxy. Hãy mở TCP 21115 đến 21119 và UDP 21116 trên firewall, rồi để client kết nối trực tiếp. Các websocket port 21118 và 21119 được web client sử dụng, là HTTP và có thể đặt phía sau proxy. Nếu dùng proxy, hãy cấu hình firewall để chỉ proxy được truy cập các port này vì hbbs tin tưởng X-Real-IP trên những kết nối đó.

Vì sao không có âm thanh trong xrdp session?

Ubuntu 24.04 dùng PipeWire, còn tính năng chuyển hướng âm thanh của xrdp được xây dựng cho PulseAudio. Vì vậy âm thanh không hoạt động cho đến khi bạn cài bridge. Chạy sudo apt install -y pipewire-module-xrdp, sau đó log out hoàn toàn khỏi session và đăng nhập lại. Module được load khi session bắt đầu, nên reconnect sẽ không load module. Kiểm tra bằng pactl list short sinks để tìm sink có tên chứa xrdp. Đồng thời bảo đảm client yêu cầu âm thanh: dùng flag /sound trên xfreerdp3 hoặc chọn "Remote audio" trong Windows client.

#remote-desktop#xrdp#rustdesk#vnc#tự lưu trữ