NoVNC的使用之二: 将Novnc整合进django项目

 

上一篇已经讲了如何让NoVNC代理跑起来 , 这章我们来看看如何将它集成到我们的django项目中来

NoVNC的使用之一: 让我们把NoVNC代理跑起来

 

1. 设置静态文件 (包括NoVNC需要用到的 css , js , image , template 文件)

写道

这里我们假设 /media/ 目录是你的静态文件目录 , 这个目录下有 css , js , images等目录....

1. 我们创建一个 vnc的目录 , mkdir vnc

2. cp -R ~/work/noVNC/images -> media/vnc
cp -R ~/work/noVNC/include -> media/vnc

3. cp ~/work/noVNC/vnc_auto.html -> templates/vnc_auto.html

let us edit this :
// host = WebUtil.getQueryVar('host', window.location.hostname);
host = '{{host}}'
// port = WebUtil.getQueryVar('port', window.location.port);
port = {{port}}

// path = WebUtil.getQueryVar('path', 'websockify');
path = WebUtil.getQueryVar('path', 'websockify/?token={{token}}');

// 'view_only': WebUtil.getQueryVar('view_only', false),
'view_only': WebUtil.getQueryVar('view_only', {{view_only}}),

 

2.  将noVNC代理程序移植到项目中..

 

写道
这里我将VNC的关键代码放到项目的 utils目录下


我们只需要原代码中的 noVNC/utils 即可


cp -R ~/work/noVNC/utils  ../../utils/vnc

 

3.  添加配置文件夹

写道

紧接着上面 , 在 ../../utils/vnc 下 mkdir vnc_tokens 目录

cd vnc_tokens

vim vnc-1.ini and edit is

abcdefg: 10.10.10.202:5900


×× 如果有多个被控端,就顺着往下写即可,不用一个被控端一个 ini 文件

 

4.  如果在项目中启动 novnc 代理服务

 

写道

1. 线程 (threading) , 不行, 这个服务只能在主线程中跑

2. 子进程 (subprocess), 不行, 主进程会被阻塞

3. 多进程 (multiprocessing) , OK

   

#coding=utf-8
import os
from multiprocessing import Process

from django.conf import settings

def worker():
    '''
        多进程启动VNC服务
    '''
    
    dir_path = os.path.dirname(__file__)
    
    websockify_path = os.path.join(dir_path, 'vnc', 'utils', 'websockify')
    web_path = os.path.join(dir_path, 'vnc')
    target_path = os.path.join(dir_path, 'vnc', 'vnc_tokens')
    
    cmd = u'python %s --web=%s --target-config=%s %s' %(websockify_path, web_path, target_path, settings.VNC_PROXY_PORT)
    
    os.system(cmd)  
    
def start_websockify():
    '''
        启动vnc代理服务
        ./utils/websockify --web=. --target-config=vnc_tokens 6080  
        {'target_cfg': '/home/xiaofei/work/noVNC/vnc_tokens', 'listen_port': 6080}
    '''

    print u'start vnc proxy..'
    
    t = Process(target=worker,args=())
    t.start()

    print u'vnc proxy started..'

 

 

5.  写一个URL响应函数, 就可以用类似下面的方式 进行 访问 :

def run_vnc(request):
    '''
        调用VNC代理进行远程控制
    '''
    template = loader.get_template('vnc_auto.html')
                
    token = request.GET.get('token', '') # 用来判断不同的访问机器
    view_only = request.GET.get('view_only', 'false') # false可以控制 or true只能查看

    # 代理服务器 IP及端口 , 这个一般都用校服务器局域网IP (127.0.0.1, 6080是默认端口)
    host = '127.0.0.1'
    port = settings.VNC_PROXY_PORT
        
    context = Context({'token':token, 'host':host, 'port': port, 'view_only':view_only})
    

    return HttpResponse(template.render(context)) 

 

6.  http://localhost:8000/system/maintenance/run-vnc/?token=abcdefg  即可控制 10.10.10.202机器 (前提是202开启了  vcn server)

 



 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值