一、前言
远程桌面两种方式,xrdp和vnc,各有优缺点,根据自己设备实际情况去使用,有UI界面但是没有显示屏的使用VNC,多人协同开发的使用xrdp
目录
二、环境
RK3588(linux5.10.66+debian/ubuntu/麒麟是桌面文件系统)
调试笔记本window10,安装常用工具winscp,xshell,finalshell,secureRTP等等
VMware17+Ubuntu20.04源码开发环境(这里就依赖于各个硬件平台的厂家提供资料了)
三、正文
1.xrdp方式
(此方法不能同步嵌入式设备的屏幕到windows的共享桌面端)
安装并启用xrdp服务
sudo apt-get install xrdp xorgxrdp
# 安装桌面环境(选择一个)
# 银河麒麟 UKUI
sudo apt-get install ukui-desktop-environment
# GNOME(这个不好使,黑屏闪退)
sudo apt-get install xubuntu-desktop
# XFCE
sudo apt-get install xfce4 xfce4-goodies
两种界面分别如下:
修改/etc/xrdp/startwm.sh,配置桌面环境
sudo vim /etc/xrdp/startwm.sh
直接替换最后两行:
# 银河麒麟 UKUI
export XDG_SESSION_TYPE=x11
exec ukui-session
# GNOME(这个不好使)
export XDG_SESSION_TYPE=x11
exec gnome-session
# XFCE
exec startxfce4
#!/bin/sh
# xrdp X session start script (c) 2015, 2017 mirabilos
# published under The MirOS Licence
if test -r /etc/profile; then
. /etc/profile
fi
if test -r /etc/default/locale; then
. /etc/default/locale
test -z "${LANG+x}" || export LANG
test -z "${LANGUAGE+x}" || export LANGUAGE
test -z "${LC_ADDRESS+x}" || export LC_ADDRESS
test -z "${LC_ALL+x}" || export LC_ALL
test -z "${LC_COLLATE+x}" || export LC_COLLATE
test -z "${LC_CTYPE+x}" || export LC_CTYPE
test -z "${LC_IDENTIFICATION+x}" || export LC_IDENTIFICATION
test -z "${LC_MEASUREMENT+x}" || export LC_MEASUREMENT
test -z "${LC_MESSAGES+x}" || export LC_MESSAGES
test -z "${LC_MONETARY+x}" || export LC_MONETARY
test -z "${LC_NAME+x}" || export LC_NAME
test -z "${LC_NUMERIC+x}" || export LC_NUMERIC
test -z "${LC_PAPER+x}" || export LC_PAPER
test -z "${LC_TELEPHONE+x}" || export LC_TELEPHONE
test -z "${LC_TIME+x}" || export LC_TIME
test -z "${LOCPATH+x}" || export LOCPATH
fi
if test -r /etc/profile; then
. /etc/profile
fi
#test -x /etc/X11/Xsession && exec /etc/X11/Xsession
#exec /bin/sh /etc/X11/Xsession
# 方案1:自动选择当前桌面环境(推荐)
#if [ -n "$DESKTOP_SESSION" ]; then
# case "$DESKTOP_SESSION" in
# ukui) exec ukui-session ;;
# gnome) exec gnome-session ;;
# xfce) exec startxfce4 ;;
# *) exec /etc/X11/Xsession ;;
# esac
#else
# 方案2:手动指定默认环境(例如UKUI)
# export XDG_SESSION_TYPE=x11
# exec ukui-session
#fi
#手动指定默认环境(麒麟UKUI)
export XDG_SESSION_TYPE=x11
exec ukui-session
修后后执行,如果不是调试不用执行
sudo systemctl restart xrdp
加权限
sudo chmod +x /etc/xrdp/startwm.sh
设置开机自启
sudo systemctl start xrdp
sudo systemctl enable xrdp
查xrdp服务状态:
sudo systemctl status xrdp
确保服务状态为active (running)
之后检查防火墙是否开启,如果未安装提示没有防火墙就不用管了
检查 ufw 防火墙状态:sudo ufw status(默认未安装)
检查 firewalld 防火墙状态:sudo firewall-cmd --state(默认未安装)
iptables(较旧的 Linux 发行版):
sudo iptables -L -n | grep 3389
如果没有输出,说明 3389 端口未放行,放行命令:
sudo iptables -A INPUT -p tcp --dport 3389 -j ACCEPT
保存规则(防止重启失效):
sudo iptables-save | sudo tee /etc/iptables/rules.v4
sudo service iptables save
验证端口是否可访问,即使防火墙放行了 3389 端口,仍然可以使用 netstat 或 ss 检查 xrdp 是否在监听:
sudo netstat -tulnp | grep 3389
sudo ss -tulnp | grep 3389
使用finalshell远程桌面
或者电脑WIN+R输入mstsc,连接ip,输入账号密码
两者其实都是调用windows系统自带的远程桌面,一样的
xrdp 默认不支持直接同步显示本地物理屏幕,它的工作机制是创建一个 新的独立桌面会话,而不是直接共享当前用户的已有图形会话(即本地显示器上看到的内容)。这是 xrdp 的架构设计决定的,与协议实现方式有关
2.vnc方式
(此方法能同步,电脑要安装VNC-Viewer)
安装x11vnc
sudo apt install x11vnc -y
设置访问密码,默认密码123就行
x11vnc -storepasswd
启动 x11vnc 共享当前屏幕
x11vnc -display :0 -forever -shared -rfbauth ~/.vnc/passwd
-display :0:绑定到本地屏幕(通过 echo $DISPLAY 确认)。
-forever:保持持久运行。
-shared:允许多客户端连接。
-rfbauth:指定密码文件。
从 Windows 连接,使用 VNC 客户端(如 TigerVNC Viewer 或 RealVNC),地址:目标IP:5900,输入刚设置的密码。
设置开机自启
创建 systemd 服务
sudo vim /etc/systemd/system/x11vnc.service
添加内容
[Unit]
Description=x11vnc Remote Desktop Service
After=display-manager.service
[Service]
ExecStart=/usr/bin/x11vnc -display :0 -forever -shared -rfbauth /root/.vnc/passwd
User=root
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
启用服务,和设置开机自启
sudo systemctl enable x11vnc
sudo systemctl start x11vnc
查x11vnc服务状态:
sudo systemctl status x11vnc
确保服务状态为active (running)
之后安装VNC-Viewer-7.13.1-Windows_1038_4ffee工具包
配置连接
之后就进入了,与桌面环境一模一样
20250401补充
当设备没有外接显示器时,使用远程桌面打开默认分辨率为1024x768,很显然不符合我们大部分场景需求,我们需要无显示器时打开的桌面也是1920x1080或者可以设置其他,这里补充设置说明
方式一:安装dummy(此方法可能会覆盖物理显示设备,当有实际的显示屏时就不显示了)
sudo apt update
sudo apt install xserver-xorg-video-dummy
mkdir /etc/X11/xorg.conf.d
sudo vim /etc/X11/xorg.conf.d/10-dummy.conf
填入以下内容(设置 1920x1080 分辨率)
Section "Device"
Option "Ignore" "true" # 关键:避免覆盖真实显卡
Identifier "DummyDevice"
Driver "dummy"
VideoRam 256000 # 显存大小(KB)
EndSection
Section "Monitor"
Identifier "DummyMonitor"
HorizSync 30.0-70.0
VertRefresh 50.0-75.0
Modeline "1920x1080" 173.00 1920 2048 2248 2576 1080 1083 1088 1120 -hsync +vsync
EndSection
Section "Screen"
Identifier "DummyScreen"
Device "DummyDevice"
Monitor "DummyMonitor"
DefaultDepth 24
SubSection "Display"
Depth 24
Modes "1920x1080"
EndSubSection
EndSection
之后重启即可
可使用xrandr查看
xrandr
xrandr -q
如果没有输入
export DISPLAY=:0
方式二:强制修改 X11 的默认 Screen 分辨率(经测试此方法可行,无显示屏远程桌面分辨率调整了,接显示屏也会正常显示)
mkdir /etc/X11/xorg.conf.d
sudo nano /etc/X11/xorg.conf.d/10-screen.conf
填入以下内容:(见附件)
Section "Screen"
Identifier "Screen0"
Device "Card0"
Monitor "Monitor0"
DefaultDepth 24
SubSection "Display"
Depth 24
Virtual 1920 1080 # 强制虚拟分辨率
EndSubSection
EndSection
重启显示
sudo systemctl restart display-manager
重启系统,查看无外接显示屏时远程桌面分辨率是否1920x1080,外接显示屏时显示屏是否正常启动,远程桌面是否正常1920x1080
PS:当没有外接显示屏时通过远程桌面去系统设置的显示配置中可能会导致异常,正常都不需要配置了,不要瞎点即可
四、结语
远程桌面,搞起来搞起来,可以在配置设备时都配置,尤其是针对设备实际不接屏幕的,有大用!