博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NoVNC的使用、websockify以及VNC截图
阅读量:5036 次
发布时间:2019-06-12

本文共 2115 字,大约阅读时间需要 7 分钟。

在使用NoVNC的时候,需要VNCServer支持websocket,对于大多数VNCServer来说要想使用NoVNC则需要使用NoVNC自带的./utils/websockify来进行代理或者二次

封装,具体操作步骤如下:
一、代理方式
    1.1 启动 vncserver
        tightvncserver -geometry 1024x768 -nolisten tcp :1
    1.2 使用websockify进行代理
        ./utils/websockify 6800 --web ./ localhost:5901
    1.3 在vncviewer中使用6800端口进行交互
二、二次封装
    2.1 二次封装模式依赖于LD_PRELOAD 库(rebind.so),为正常使用该模式,需要编译rebind.so,具体命令如下
        cd ./utils
        ./make
    2.1 启动websockify时使用 -- 后跟具体命令的方式启动封装模式
        ./utils/websockify 5901 -D --wrap-mode=ignore -- tightvncserver -nolisten tcp -geometry 1024x768 :1
    2.2  在vncviewer中使用5901端口进行交互
使用NoVNC时的抓屏处理:
一、代理方式:
1.1 启动tightvncserver
    tightvncserver  -geometry 1024x768 -rfbport 8888
1.2 使用websockify代理vncserver
    ./utils/websockify 5901 localhost:8888
1.3 使用vncdotool(https://github.com/sibson/vncdotool)进行抓屏处理
    vncdotool -s 10.0.11.111:8888 capture  screenshot.png
二、二次封装
2.1 启动vncserver
     ./utils/websockify 5901 -D --wrap-mode=ignore -- tightvncserver -nolisten tcp -geometry 1024x768 :1  
    此时websockify会使用一个暂时不使用的端口,比如53274,rebind会在将tightvncserver -nolisten tcp -geometry 1024x768 :1使用的5901端口转
换成53294端口来使用
    注意,为正常使用,请确保websockify的listen_port同tightvncserver的:Displaynumber + 5900保持一致。
2.2 抓屏
    vncdotool -s 127.0.0.1:53294 capture  screenshot.png
注意:在使用websockify的rebind方式启动tightvncserver的时候需要特别注意的一点就是,只有在listen_port和tightvncserver启动的rfbport端口相同时才
会真正完成rebind,具体解释如下:在rebind.c中会判断oldport == askport(oldport为websockify的listen_port,askport为wrap_cmd中的bind端口),只
有在 oldport == askport的时候才真正rebind,真正的转换bind的端口,而这也依赖于websokify的wrap_cmd中的程序对负责bind的socket库是动态链接进来的
,只有是动态链接的才会由此效果,具体原因是在rebind.c中使用了if (!func) func = (void *(*)()) dlsym(RTLD_NEXT, "bind");来完整真正的rebind。
从测试来看,tightvncserver 程序使用的是静态链接方式,所以为使其真正起作用,需要websockify的listen_port同tightvncserver 的rfbport一致。
tightvncserver内部执行顺序如下:先调用GetDisplayNumber,通过循环bind VNC server port (5900+n) or the X server port (6000+n).找到可用的
displaynumber,tightvncserver是采用动态链接方式使用bind的,所以此时能完成oldport == askport的比较,进而确定是否真正rebind。在确定
displaynumber之后再根据传入的参数组织成Xtightvnc的命令行参数,启动Xtightvnc服务。在Xtightvnc启动时,再根据各个参数bind各个端口。测试发现
Xtightvnc使用的静态链接方式,所以bind端口时,并未触发rebind操作。

转载于:https://www.cnblogs.com/Jerryshome/archive/2012/11/15/2771637.html

你可能感兴趣的文章
ZOJ 3657(The Little Girl who Picks Mushrooms)
查看>>
2018-04-18web自动化学习心得(2)
查看>>
SSIS实践入门3:把SSIS程序包从A电脑到B电脑的转移
查看>>
对象的notify方法的含义和对象锁释放的三种情况
查看>>
Eclipse中设置在创建新类时自动生成注释
查看>>
NOI2019:Stay at Home
查看>>
Codefo 546D. Soldier and Number Game
查看>>
php 的加法
查看>>
基于GPU加速的三维空间分析【转】
查看>>
小工具
查看>>
Android 实现形态各异的双向侧滑菜单 自定义控件来袭(转载)
查看>>
robot framework 接口post请求需要加headers
查看>>
JDE隐藏Constant等(Hide Object)
查看>>
python3内置函数
查看>>
java学习之switch 等值判断
查看>>
hdu5036 Explosion 传递闭包
查看>>
WinXP下由于图标造成的System.Windows.Markup.XamlParseException
查看>>
js中ajax返回数据
查看>>
SQL execution plan
查看>>
maven settings.xml windows
查看>>