openstack 自己制作云桌面linux瘦客户机

    openstack云桌面有B/S和C/S两种连接方式,B/S只要有浏览器即可,手机,平板,旧PC都可以,对于C/S模式,即瘦客户机,可以把旧电脑作为瘦客户机使用,也可以网购各种配置的专门瘦客户机,其实就是集成在一块主板上的简易电脑主机,在上面运行什么宿主引导系统呢,可以是windows或Linux的桌面版,但要简单高效,对瘦客户机硬件最简化要求,可以安装winpe或网上找轻量级的linux桌面版。

   我选择的是xenialpup64,这款Linux系统带桌面及丰富的系统和应用软件,安装好后才占用不到500M的存储空间,内存也不到1G,以下是在vmware上运行该系统。

  云桌面客户端我用的是remote_viewer,因为openstack服务端采用的是spice协议。

运行remote_viewer客户端,输入云桌面虚拟机端口即可连接:

但要在实际如教学实训中让学生使用,需要让连接自动化,以下是实现逻辑,界面美工还没有处理。

用python开发一个简单的桌面交互程序,实现如下步骤:

1.打开瘦客户机后,自动运行该程序

2.首先弹出输入账号密码对话框,云桌面用户(学生)输入自己的账号密码

3.根据登录信息,取出分配给该学生的虚拟机名称(1个学生上不同的课,可能需要多个安装不同环境的虚拟机),让学生选择要进入的虚拟机。

4.根据学生的选择,启动对应虚拟机(如果未启动),然后获得该虚拟机的spice连接url,包括所在的节点IP及spice连接端口号(获得的url如:spice://192.168.0.100:5905)

5.把上面所获得的url作为remote-viewer的参数,启动remote-viewer连接虚拟机桌面

6.在用户关闭虚拟机或直接关闭remote-viewer后,直接关闭瘦客户机系统和电源

在整个过程,用户不直接操作瘦客户机上的操作系统

实现逻辑代码如下:

import easygui as g 
import urllib
import urllib2
import json

#以下弹出窗口获取用户输入的账号密码
msg="Login In remote desktop" 
title="Login" 
fieldNames=["*User:","*Password:"] 
fieldValues=[] 
fieldValues=g.multpasswordbox(msg,title,fieldNames) 
while True: 
	if fieldValues==None: 
		break errmsg="" 
	for i in range(len(fieldNames)): 
		option=fieldNames[i].strip() 
		if fieldValues[i].strip()=="" and option[0]=="*": 
			errmsg+=("[%s] must input" %fieldNames[i]) 
	if errmsg=="": 
		break 
	fieldValues=g.multpasswordbox(errmsg,title,fieldNames,fieldValues) 


#以下获取分配给用户的虚拟机列表
url = "http://192.168.0.100:8000/login/" 
params={"u":fieldValues[0],"p":fieldValues[1],"t":"cs"}
data = urllib.urlencode(params) 
req = urllib2.Request(url, data) 
response = urllib2.urlopen(req)
html = response.read()
vmlist=json.loads(html)
vmarr=[]
for vm in vmlist:
	vmarr.append(vm.get('vmname'))

#显示虚拟机列表让用户选择
selvm=g.buttonbox("please select desktop?",choices=vmarr)

#获取选择虚拟机的ID
myvmid=""
for vm in vmlist:
	if vm.get('vmname')==selvm:
		myvmid=	vm.get('vmid')
		break

#getvncport服务端程序根据虚拟机ID启动该虚拟机,并获取连接URL
url="http://192.168.0.100:8000/getvncport/?ty=spice&vm=" + myvmid
req = urllib2.Request(url) 
response = urllib2.urlopen(req)
spice = response.read()

#spice是云桌面连接url,以下程序启动连接,并在退出连接后关闭瘦客户机电源
os.popen('remote-viewer -f ' + spice + ' && poweroff')

登录界面

选择云桌面界面,未加图片,未美工呵呵

选择第一个云桌面,连接到该桌面

猜你喜欢

转载自blog.csdn.net/oLinBSoft/article/details/81586817