zoukankan      html  css  js  c++  java
  • NoVNC的使用、websockify以及VNC截图

    在使用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操作。

  • 相关阅读:
    Account group in ERP and its mapping relationship with CRM partner group
    错误消息Number not in interval XXX when downloading
    错误消息Form of address 0001 not designated for organization
    Algorithm类介绍(core)
    梯度下降与随机梯度下降
    反思
    绘图: matplotlib核心剖析
    ORB
    SIFT
    Harris角点
  • 原文地址:https://www.cnblogs.com/Jerryshome/p/2771637.html
Copyright © 2011-2022 走看看