docker + xrfb-run + vnc:Docker里开虚拟屏幕运行带GUI程序
进入一个平平无奇的ubuntu容器
docker run -it --rm -p5900:5900 ubuntu:20.04
安装X组件
apt update
apt install -y xserver-xorg
apt install xvfb
apt install x11vnc
以上,就安装完成了。。
以下,是简单示例
【GUI看表】
apt install x11-apps #安了这个就有 xclock 了
xvfb-run xclock #运行 xvfb-run 会自动为 xclock 创建一个虚拟屏幕 然后执行 xclock
这就是运行中了(你看,终端block在那)
怎么看表呢?
先开个新终端
ps -ef |grep auth #这是为了找Auth文件位置
显示:
root@13785a282294:/# ps -ef |grep auth root 7417 7408 1 11:47 pts/0 00:00:00 Xvfb :99 -screen 0 1280x1024x24 -nolisten tcp -auth /tmp/xvfb-run.RCwemo/Xauthority root 7449 5837 0 11:47 pts/1 00:00:00 grep --color=auto auth
上面的 /tmp/xvfb-run.RCwemo/Xauthority 就是Auth文件文件名每次都随机生成
上面的 Xvfb :99 这部分的:99 就是虚拟屏幕号 默认是99
启动vnc-server
x11vnc -display :99 -auth /tmp/xvfb-run.RCwemo/Xauthority # 注意要用到上面查到的那个Auth文件路径
启动完了 x11vnc 默认监听端口是 5900
然后使用VNC客户端 比如:TightVNC
就能看表了!
感觉很空是吧,因为xvfb-run默认给了个 1280x1024 的屏幕
修改启动参数指定想要的屏幕大小就可以了(还有色彩深度)
xvfb-run --server-args="-screen 0 200x200x24" xclock
以上,就是简单示例应该够用了
以下,是个稍微炫一点的简单示例:
用强化学习方法让机器学习怎么玩儿游戏的时候会用到GYM环境,以下是个简单的登月游戏运行示例,这样就可以在服务器上训练,同时还方便围观训练进度 。。
还是继续用上面那个docker容器
【Gym LunarLander-v2 围观示例】
先搞定基本环境 (ubuntu20.04 docker 镜像自带python3.8)
ln -s /usr/bin/python3 /usr/bin/python # 这样就可以直接用python命令了。。
安装pip
apt install python3-pip
安装gym (安装过程报错,要先安swig : apt install swig)
pip install gym[box2d]
然后就可以开干了
xvfb-run python # 这样当你python里面需要用到屏幕界面的就可以在vnc上看到了
更直接的,弄个Gym的玩游戏演示demo程序展示效果
# test.py import gym env = gym.make("LunarLander-v2", render_mode="human") env.action_space.seed(42) observation, info = env.reset(seed=42) for _ in range(1000): observation, reward, terminated, truncated, info = env.step(env.action_space.sample()) if terminated or truncated: observation, info = env.reset() env.close()
启动:
xvfb-run python test.py
观察效果:(新终端,注意auth文件路径变了哈)
x11vnc -display :99 -auth /tmp/xvfb-run.l3kR51/Xauthority
开vnc-client:
发现在远程云服务器上(我用的腾讯云),这个方法看起来一切正确但是VNC Client就是连不上,提示什么“目标积极拒绝”。。(我确认已经放通了5900端口 并且再另一个天翼云(别问我为什么那么多云服务器)的上用VNC Client 是可以连通(上面的截图就是再远程服务器上截图的,开始以为是办公楼网络限制,到家发现家里也一样)。。。)
所以找了一个折中的办法,或者乐观点想。。它可以不需要额外安装VNC客户端就可以开搞。。:
apt install xrdp
安好了确认下服务是不是已经启动了
service xrdp status
是的,这个方案就是——安个 RDP 远程桌面服务再用它去连接VNC。。。这样就可以用windows自带的远程桌面( win+r -> mstsc)访问啦!!!!!!!!!!!
端口默认3389(不是5900了 启动docker 要改成 docker run -it --rm -p3389:3389 ubuntu:20.04)
连上后选vnc-any 地址直接127.0.0.1
又可以愉快看表了!!!!!!
出处:http://tugeler.cnblogs.com/
本文版权归作者所,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。