场景:
两台Linux主机
B主机需要远程桌面到A主机上运行程序,需要运行的程序是跑在A主机的Docker里面的。
需要实现的效果就是,A主机分一些资源给B主机来跑程序,B在跑程序的时候不能影响A主机的正常工作。
远程桌面:
xrdp+remmina
A主机安装远程桌面Server端(xrdp)
# 安装Xrdp
sudo apt install xrdp
# 检查xrdp状态
sudo systemctl status xrdp# 配置Xrdp(可选)
sudo vim /etc/xrdp/xrdp.ini
sudo systemctl restart xrdp# 配置防火墙(记得服务器放行3389)
sudo ufw allow from 192.168.1.0/24 to any port 3389 # ip地址根据自己的实际情况修改
sudo ufw allow 3389
B主机安装远程桌面客户端(remmina)
sudo apt install remmina
在Ubuntu 设置->用户中新建一个用户(如果不新建用户的话,可能会出现登录黑屏的问题。请自行尝试是否需要新建用户)
remmina安装完成后,就可以通过remmina图形界面进行远程连接,连接的时候,可能会报color depth的问题,需要在连接配置页面改一下颜色深度,我这里改成true color 32b可正常连接。
远程桌面图形显示问题
远程连接成功后,现在终端中运行一个带可视化的程序,如gedit,如果出现如下错误提示,需要在终端中执行xhost + ,执行后再次运行应该就能正确显示图形界面了。
# 错误信息
(gedit:2144): Gtk-WARNING **: cannot open display: :0
# 执行(不要忘了后面那个加号)
xhost +
Docker图形显示问题
在docker中运行带图形界面的程序时,可能会报如下错误信息
can not open display 0
此时需要在远程桌面的终端中查看display信息
echo $DISPLAY# 我这里的输出是 :11.0
把创建docker容器脚本中的DISPALY值改为上述值后重新创建容器
#仅贴出比较关键的两行,这两行会影响docker的显示
-v /tmp/.X11-unix:/tmp/.X11-unix:rw \
-e DISPLAY="${display}"
至此,基本上整个环境就搭建好了,中间还遇到了一些小问题,都是很好解决的,就不在这里赘述了。