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. Phân biệt đúng vai trò của RustDesk relay.
Remote desktop trên Linux VPS thực sự có nghĩa là gì
Có hai 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 sai loại có thể khiến bạn mất cả buổi chiều. Loại thứ nhất là một broker truy cập từ xa. Server tự host của RustDesk là ví dụ phổ biến: nó chuyển tiếp một session giữa hai máy bạn đã sở hữu, chẳng hạn laptop và PC ở nhà. Server thuê không chạy desktop nào cả. Nó giúp hai đầu kết nối nhận diện nhau và chuyển tiếp packet khi chúng 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 server thuê. Khi đó, pixel được dựng trong data centre và stream đến máy của bạn. Đây là mô hình của xrdp, VNC (virtual network computing) hoặc một container workspace.
Có một câu hỏi giúp phân biệt hai loại này. Sau khi thiết lập xong, con trỏ chuột đang nằm trên máy nào? Nếu con trỏ nằm trên một máy bạn đã sở hữu, bạn cần một broker. Nếu con trỏ nằm trên chính VPS, bạn cần một desktop chạy trên VPS. Phần lớn nội dung bên dưới tập trung vào trường hợp thứ hai, vì đây là trường hợp mà hầu hết hướng dẫn đều bỏ qua.
Chọn phương án 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 làm việc đi qua rendezvous server công khai do bên khác vận hành, vì bạn giữ key pair. Cách này không bảo vệ máy được điều khiển. Máy đó vẫn là PC mà 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 TCP 3389 liên tục bị quét trên Internet và khỏi các lượt đoán mật khẩu vào hộp đăng nhập RDP, vì cổng đó không bao giờ public ra Internet. Cách này không bảo vệ một 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 một phiên desktop vẫn tồn tại sau khi bị ngắt kết nối, bằng một protocol cũ và đơn giản hơn RDP. Tự VNC không bảo vệ được gì: tunnel đảm nhiệm toàn bộ phần bảo mật, nên chạy riêng VNC trên public port là phương á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. Cách này không bảo vệ host: các image này chạy với quyền rộng và có
sudokhông yêu cầu password bên trong, nên không nên xem container là một ranh giới đủ tin cậy cho workload không đáng tin cậy.
Cài xrdp và XFCE trên Ubuntu 24.04
Image VPS không có sẵn desktop đồ họa. Bạn cần cài desktop, sau đó cài xrdp — server mã nguồn mở dùng giao thức RDP (remote desktop protocol), cũng là giao thức mà client Windows sử dụng. Hãy chọn 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 xrdpTí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 đăng nhập sẽ nhận mật khẩu rồi đưa bạn trở lại ngay hộp đăng nhập.
Tiếp theo, cấu hình desktop mà session phải khởi chạy. xrdp chạy /etc/xrdp/startwm.sh, và file này sẽ chạy ~/.xsession nếu file đó tồn tại.
echo "xfce4-session" > ~/.xsession
chmod 644 ~/.xsessionCuối cùng, xrdp cần đọc TLS (transport layer security) key dùng để 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 xrdpKết quả liệt kê 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 thành phần trên Internet quét, và hộp đăng nhập RDP sẽ phản hồi lịch sự với mọi lần thử mật khẩu. Không mở cổng này. Thay vào đó, bind xrdp vào địa chỉ loopback và truy cập qua một tunnel mà bạn đã tin cậy.
Chỉnh sửa /etc/xrdp/xrdp.ini và thay đổi listener trong phần [Globals].
[Globals]
port=tcp://.:3389File được cung cấp đã ghi chú cú pháp này trong các comment: tcp://.:3389 có nghĩa là 127.0.0.1:3389, còn tcp://:3389 có nghĩa là mọi interface. Khởi động lại và xác nhận, vì một lỗi đánh máy ở đây có thể khiến service vẫn âm thầm lắng nghe trên mọi địa chỉ.
sudo systemctl restart xrdp
ss -tlnp | grep 3389Bạn cần thấy 127.0.0.1:3389. Nếu thấy 0.0.0.0:3389, xrdp đã bỏ qua thay đổi của bạn. Nguyên nhân thường là dòng đó đã nằm dưới một section heading khác ở phần sau của file.
Bây giờ mở tunnel từ máy của bạn.
ssh -N -L 3389:127.0.0.1:3389 you@vps.example.com-N có nghĩa là “mở kết nối nhưng không chạy command nào”, vì vậy session chỉ tồn tại để chuyển tiếp port. Để terminal đó chạy và trỏ RDP client đến 127.0.0.1:3389. Trên client Linux, phần mềm 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 /soundTrên Windows, dùng mstsc tích hợp sẵn và nhập 127.0.0.1 làm máy tính đích. FreeRDP yêu cầu bạn tin cậy certificate trong lần kết nối đầu tiên và in ra 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, một thành phần nào đó trên chính máy của bạn đã chiếm cổng 3389. Di 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ủ sau WireGuard VPN tự host, cấp cho máy địa chỉ tunnel 10.8.0.1 và đặt 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 3389 cũng không nên tồn tại. Nếu không chắc các rule hiện tại đang cho phép gì, hãy bắt đầu từ 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áy tính để bàn từ xa 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 không. Các số liệu dưới đây là những mức RAM thường gặp, đã làm tròn, ngay sau khi đăng nhập vào Ubuntu 24.04. Chúng được lấy từ các bảng so sánh đã công bố, không phải từ phép đo trên máy của bạn. Hãy tự đo bằng free -m ngay sau khi kết nối.
Dữ liệu đằng sau biểu đồ này
[
{
"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 đó. LXQt dùng khoảng 300 MB, còn XFCE dùng khoảng 400 MB. Vì vậy, cả hai vẫn chừa đủ RAM trên máy 2 GB để chạy browser. GNOME cần khoảng 1,200 MB trước khi bạn mở một cửa sổ nào. Trên máy 2 GB, browser sẽ phải tranh phần RAM còn lại với desktop.
Chi phí thực sự nằm ở browser, không phải desktop shell. Một browser 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 vài tab trước khi bắt đầu 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 để cấu hình vẫn còn sau khi 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. Browser 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. CPU vì thế phải render từng pixel. Cuộn một trang nặng và phát video đều tạo ra CPU load rõ rệt. Khi đó frame rate giảm thay vì máy bị treo. Đây cũng là giới hạn bạn gặp nếu đang thắc mắc 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 dùng PipeWire cho âm thanh, còn tính năng chuyển tiếp â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. Các gói Ubuntu đã cung cấp 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 đó kiểm tra từ bên trong phiên:
pactl list short sinks
speaker-test -c 2 -t wav -l 1Bạn sẽ thấy một sink có tên chứa xrdp và nghe thấy â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 tiếp âm thanh: đó là flag /sound trên xfreerdp3, hoặc tùy chọn "Remote audio" trong mục Local Resources của Windows client.
Clipboard văn bản hoạt động hai chiều sau khi xrdp-chansrv chạy trong phiên của bạn; xrdp sẽ 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 có tên drive redirection: /drive:home,/home/you trên xfreerdp3 mount một thư mục cục bộ vào phiên từ xa.
Cửa sổ polkit và các lỗi khác trong lần đăng nhập đầu tiên
Điều bất ngờ thường gặp nhất trong lần đăng nhập đầu tiên là hộp thoại có nội dung Authentication is required to create a color managed device. Nguyên nhân khá cụ thể. 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 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 /etc/polkit-1/localauthority/50-local.d/45-allow-colord.pkla hoàn toàn không có tác dụng trên 24.04. Thay vào đó, hãy viết một JavaScript rule.
/* /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 quay lại ngay. Session đã khởi động rồi bị dừng. Trước tiên, hãy đọc /var/log/xrdp-sesman.log, sau đó đọc ~/.xsession-errors trong home directory của bạn. Thiếu xorgxrdp, ~/.xsession trỏ đến một desktop chưa được cài đặt, home directory không có quyề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 không khởi động. Đây lại là ~/.xsession: chạy xfce4-session thủ công qua SSH và đọc lỗi mà lệnh in ra.
Máy chủ RustDesk tự host làm gì
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. Không tiến trình nào chạy desktop. Cả hai đều nằm trong một image. Đây là compose file do dự án công bố, 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-stoppedKhởi động các container, rồi đọc public key mà server tạo ra trong lần chạy đầu tiên:
sudo docker compose up -d
sudo cat ./data/id_ed25519.pubMỗi client cần hostname và public key của bạn. Nhập cả hai trong phần 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 mới trên mọi client. Hãy backup directory này. Nếu đây trở thành cách team bạn truy cập mọi máy thay vì chỉ là thử nghiệm cuối tuần, bản build RustDesk relay riêng đáng để làm theo vì có cách xử lý key Ed25519, dùng image tag cố định thay vì latest, và tính được băng thông relay mà gói dịch vụ của bạn phải trả phí.
Firewall phải cho phép trực tiếp các port này. hbbs dùng TCP 21115, 21116 và 21118, cùng với UDP 21116. hbbr 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/tcpTại sao RustDesk không thể đặt 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 qua 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ì để match. 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 là forwarding layer 4 thuần túy, không phải reverse proxy theo nghĩa thông thường. Các cổng 21118 và 21119 truyền websocket được RustDesk web client sử dụng. Đây là HTTP thông thường, nên hai cổng này có thể đặt 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ực.
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 không thay đổi 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-stoppedCổ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 chính dự án nêu rõ rủi ro: container có quyền privileged trên host và có terminal với sudo không cần mật khẩu, nên không được để lộ trực tiếp ra Internet. Vì vậy, 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 nó qua cùng SSH tunnel hoặc cùng VPN đã dùng cho xrdp.
Kasm Workspaces cũng hoạt động theo ý tưởng tương tự nhưng có quy mô lớn hơn nhiều, với web console, tài khoản người dùng và container riêng cho từng session. Các container này được reset khi session kết thúc. Nó cần nhiều tài nguyên hơn một VPS nhỏ có thể cung cấp. Tính đến August 2026, mức tối thiểu được tài liệu nêu là 2 CPU core, 4 GB memory và 50 GB SSD. Mỗi user session mặc định dùng thêm 2 core và 2768 MB. Gói 2 GB sẽ không chạy được. Quy 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.shVNC 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 kết nối 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, nên bạn tunnel VNC giống hệt xrdp bằng ssh -N -L 5901:127.0.0.1:5901 you@vps.example.com. Không bao giờ public cổng VNC. Hầu hết VNC server chỉ bảo vệ password trong quá trình handshake, còn dữ liệu sau đó không được bảo vệ. Vì vậy, nếu mở cổng VNC ra public, nội dung phiên có thể bị đọc trên đường truyền.
VPS có phù hợp làm máy tính để bàn không?
Để dùng hằng ngày thì không, và có nhiều lý do cộng lại. VPS không có GPU nên CPU phải xử lý toàn bộ phần hiển thị. Mỗi lần gõ phím đều phải chờ một lượt round trip qua mạng; độ trễ 40 ms có thể không đáng kể khi dùng SSH nhưng sẽ thấy rõ trong trình soạn thảo văn bản. Video bị nén hai lần: một lần bởi 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 sở hữu. Việc dùng desktop nhiều cũng tiêu tốn monthly bandwidth allowance vốn được tính cho một web server.
Để làm máy dùng tạm 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. Đây là điều cần có khi service phải nhìn thấy một địa chỉ nhất quán. Có thể rebuild máy từ image trong vài phút. Vì vậy, nếu một session bị dính phần mềm độc hại thì việc hủy session đó không làm bạn mất gì. VPS tách biệt vớ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. Cách tính phí theo giờ khiến một desktop dùng tạm có chi phí thấp.
Nếu bạn vẫn chưa xác định máy này dùng để làm gì, hãy đọc danh sách thực tế về những việc VPS phù hợp trước khi cài desktop trên đó. Nếu lý do bạn muốn có desktop chỉ là để chạy 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 này.
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 máy 2 GB gần như không còn bộ nhớ cho ứng dụng. Hãy thêm swap file 2 GB để khi thiếu bộ nhớ, máy chạy chậm thay vì kill process. Nếu 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 có kích hoạt out-of-memory killer không.
Tôi có nên mở port 3389 trên firewall của VPS không?
Không. TCP 3389 bị scan liên tục, và một endpoint đăng nhập RDP public sẽ bị thử đ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 bằng 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 trực tiếp tại máy. Session RDP không được xem là session local, nên bạn sẽ gặp prompt yêu cầu 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., sau đó 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 để client kết nối trực tiếp. Các websocket port 21118 và 21119 được web client sử dụng, chạy trên HTTP và có thể đặt phía sau proxy. Nếu làm vậy, hãy cấu hình firewall để chỉ proxy được phép truy cập các port này, vì hbbs tin cậy X-Real-IP trên những connection đó.
Vì sao session xrdp của tôi không có âm thanh?
Ubuntu 24.04 dùng PipeWire, trong khi 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 đó logout hoàn toàn khỏi session rồi đăng nhập lại, vì module được load khi session bắt đầu và reconnect sẽ không load module này. Kiểm tra bằng pactl list short sinks để tìm một sink có tên chứa xrdp. Đồng thời bảo đảm client yêu cầu âm thanh; trên xfreerdp3, tùy chọn này là flag /sound, còn trong client Windows là "Remote audio".