很感谢 xvfb 这个工具给我们提供了相关的功能
比如在没有 X server 的机器上运行 gedit, 可以用下面的命让友令
xvfb-run --auto-servernum --server-args="-screen 0 1280x760x24" gedit
xvfb 这个工具相当于一个wrapper, 给应用程序提供虚拟的 X server
用 ps auxf 观察进程的结构,可以发现 xvfb-run 首先创建了 Xvfb:103 这个 daemon 子进程,而后再运行 gedit
...
_ /bin/sh /usr/bin/xvfb-run --auto-servernum --server-args=-screen 0 1280x760x24 gedit _ Xvfb :103 -screen 0 1280x760x24 -nolisten tcp _ gedit
如果,自己编写一个脚本 1.sh, 内容是显示 $DISPLAY 变量
---- 1.sh ---echo $DISPLAY
再用下面的命令运行
xvfb-run --auto-servernum --server-args="-screen 0 1280x760x24" ./1.sh
输出是
:103
而查看进程,原来 deamon 提供 DISPLAY :103
_ /bin/sh /usr/bin/xvfb-run --auto-servernum --server-args=-screen 0 1280x760x24 ./1.sh _ Xvfb :103 -screen 0 1280x760x24 -nolisten tcp
再用命令查看 netstat -ln, 可以看到提供服务的 unix socket
...unix 2 [ ACC ] STREAM LISTENING 2060030 /tmp/.X11-unix/X103
...
总结:
xvfb 是通过提配滑数供一个类似 X server 守护培首进程 和 设置程序运行的环境变量 DISPLAY 来提供程序运行的环境
本文主要介绍,如何在Ubuntu远程连接服务器、远程启动进程、远程启动后台进程、远程启动后台图形化进程的常规方法。
最常用的远程连接方法就是ssh,ssh介绍与使用可以参考 SSH原理与运用(一):远程登录
用下面的命令可以直接连接远程的机器
正常情况下,通过ssh连接上远程机器以后,执行命令,启动进程都没有什么问题。但是如果关闭了ssh窗口,这些启动的进程会自动关闭。
关闭ssh窗口-->关闭session会话-->触发SIGHUP信号-->关闭ssh窗口启动的所有进程
解决方法,可以通过nohup或者screen方式实现ssh关闭而进程不退出
nohup 命令运行由 Command 参数和任何相关的 Arg 参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后使用 nohup 命令猛尺运行后台中的程序。要运行后台中的 nohup 命令,添加 &( 表示“and”的符号)到命令的尾部。
例如:后台启动一个node进程
nohup很容易使用,简答的命令启动都没有什么问题,但是对于复杂的需要交互的命令就比较麻烦了,例如,关闭了ssh窗口,但是下次再登录进来的时候,还是想恢复上次的进程交互方式,通过nohup就不能实现,可以通过screen实现
例如:同样上面的方式我们启动一个node进程
对于远程启动的程序,有时候我们并不关心程序是否有图形化界面(比如自动化测试),只要程序能够运行就可以了。xvfb工具提供了这个功能。
Xvfb 是什么呢,他的名称是 virtual framebuffer X server for X Version 11, Xvfb 可以直接处理Window 的图形化功能,并且运销不会把图像输出到屏幕上,也就是说,就算你的电脑没有启动 Xwindow , 你仍然枝悄高可以执行任何图形程式。详细可以参考 维基百科Xvfb
安装xvfb
运行xvfb-run 常用命令
例如:
我们通过ssh启动一个chromium浏览器
提示不能打开,如下图
下面通过
通过xvfb-run启动浏览器,命令如下
浏览器启动成功,如下图
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)