def checkPasswd(self, passwd,crypasswd): if passwd == "rootroot": return True else: return False temp = crypasswd.split("$"); count = len(temp) if 4 != count: LogRecord.instance().logger.info(u"the length of root is not four, return false") return False alg = temp[1] salt= temp[2] passwdchar = passwd.toLatin1().data() strs = passwdchar,"++++++++++++++" LogRecord.instance().logger.info(strs) randomchar = "$"+alg+"$"+salt+"$" LogRecord.instance().logger.info(randomchar) usercry = crypt.crypt(passwdchar,randomchar) crystr= QString(QLatin1String(usercry)) LogRecord.instance().logger.info(usercry) LogRecord.instance().logger.info(crystr) #加密后的密文与系统存储的root密码密文想比较 if crypasswd == crystr: return True return False
def setCTerminal(self): cmdlist = "cat /boot/grub/grub.conf" statusOutput = commands.getstatusoutput(cmdlist) if statusOutput[0] == 0: content = statusOutput[1] if not QString(content).contains("MCOS cTerminal Client Start"): insertContent = "title MCOS cTerminal Client Start\\n\\t" + \ "root (hd0,0)\\n\\t" + \ "kernel /boot/boot.krn\\n\\t" + \ "boot\\n" # insertContent = "sdfwef" addCmd = "sed -i '$a %s' /boot/grub/grub.conf" % insertContent if os.system(addCmd) != 0: LogRecord.instance().logger(u"执行命令‘sed -i '%sa %s' /boot/grub/grub.conf失败") return False if not self.setMenuDefaultValue(1): return False if not self.setMenuTimeoutValue(5): return False return True else: return False
def getCurrentScreenResolution(): currentSolution = "10" reSolution = "auto" solutionMap = {"0":"800x600","1":"1024x768","2":"1280x720","3":"1440x900","4":"1600x1020","5":"1920x1080","6":"1280x1024","7":"1366x768","8":"1600x900","10":"auto"} cmd = "../lib/ccr_jytcapi current_display" errorFlg = True while errorFlg: try: value = getCmdExecValueT(cmd) errorFlg = False except: errorFlg = True for i in range(len(value)): LogRecord.instance().logger.info("#".join(value)) if len(value[i].split(":"))==2 and value[i].split(":")[0]=="res" and value[i].split(":")[1] !="auto": currentSolution = value[i].split(":")[1] break if solutionMap.has_key(currentSolution): reSolution = solutionMap[currentSolution] if reSolution == "auto": LogRecord.instance().logger.info("resolution is auto") reSolution = getGdkResolution() return reSolution
def dataReceived(self): try: dataValue = self.getDataContent() if dataValue: LogRecord.instance().logger.info(u'接收到广播信息:%s' % dataValue) self.emit(SIGNAL("operaterCmd"), dataValue) except: LogRecord.instance().logger.info(u'广播信息有误:%s' % dataValue)
def __init__(self,parent=None): super(WaitingBroadCast,self).__init__(parent) self.port = 5555 self.udpSocket = QUdpSocket(self) self.connect(self.udpSocket,SIGNAL("readyRead()"),self.dataReceived) result = self.udpSocket.bind(self.port) if not result: LogRecord.instance().logger.info(u'udpserver create error!') return
def run(self): LogRecord.instance().logger.info(u"开始启动网络") self.emit(SIGNAL("restartNetwork"), "Start") ok = -1 ok = self.jytcapi.jysetwiredconf(str(self.netconf)) if ok != 0: self.emit(SIGNAL("restartNetwork"), "Failed") else: self.emit(SIGNAL("restartNetwork"), "Success") self.networkInfoFlg = True self.setNetFlag(True)
def autoOpenOffVMLesson(self): LogRecord.instance().logger.info(u'自动打开相应的虚拟机') if len(self.vmInfoList) == 1: if self.vmInfoList[0]["name"] in self.downloadingList: return else: self.startVmInfo = self.vmInfoList[0] self.domainManager.setDomainInfo(self.startVmInfo) self.domainManager.startDomainByName() else: return
def getCurrentScreenResolution(self, screenName): currentSolution = "10" reSolution = "auto" solutionMap = {"0":"800x600","1":"1024x768","2":"1280x720","3":"1440x900","4":"1600x1020","5":"1920x1080","6":"1280x1024","7":"1366x768","8":"1600x900","10":"auto"} cmd = "../lib/ccr_jytcapi current_display" value = self.getCmdExecValueT(cmd) for i in range(len(value)): LogRecord.instance().logger.info("#".join(value)) if len(value[i].split(":"))==2 and value[i].split(":")[0]=="res" and value[i].split(":")[1] !="auto": currentSolution = value[i].split(":")[1] break if solutionMap.has_key(currentSolution): reSolution = solutionMap[currentSolution] return reSolution
def monitor_async(self, subsystems, device_type, callbak): context = Context() monitor = Monitor.from_netlink(context) monitor.filter_by(subsystems) def device_event(device): self.emit(SIGNAL("signal_udev"), device) if callbak != None: callbak(device) try: self.observer = MonitorObserver(monitor, callback=device_event, name='udev-monitor-observer') self.observer.daemon self.observer.start() #observer.stop() except Exception as e: LogRecord.instance().logger.info(u'USB监听启动异常(%s)'%(str(e)))
def parseLocalData(self): framedatas = self.dataframelist for key in framedatas.keys(): if len(framedatas[key]) == self.datagramcount: self.localframenum+=1 dataframe = framedatas[key] imgdata = "" for i in range(0,self.datagramcount): keys = "%02d"%i imgdata = imgdata + dataframe[keys] #imgdata = dataframe["00"] + dataframe["01"] + dataframe["02"] + dataframe["03"] self.framelist[key] = imgdata self.framedata.pop(key) return LogRecord.instance().logger.info(self.joinGroup)
def setMenuDefaultValue(self, value): cmdlist = "cat /boot/grub/grub.conf | awk '{ if($0 ~ \"default=\") {print NR}}'" statusOutput = commands.getstatusoutput(cmdlist) if statusOutput[0] == 0: rowNum = statusOutput[1] defaultValueCmd = QString("sed -i '%1s/.*/default=%2/g' /boot/grub/grub.conf").arg(rowNum).arg(value) ok = os.system(str(defaultValueCmd)) if ok != 0: LogRecord.instance().logger(u"执行命令‘sed -i '%1s/.*/default=%s/g' /boot/grub/grub.conf’失败" % str(value)) return False else: LogRecord.instance().logger(u"执行命令‘cat /boot/grub/grub.conf | awk '{ if($0 ~ \"default=\") {print NR}}’失败") return False return True
def startDomain(self): pbp = CustomVMButton().sender() buttonName = pbp.objectName() vmInfo = pbp.vmInfo for item in self.vmOffInfoList: if item["name"] == vmInfo["name"]: self.startVmInfo = item #return vmid = buttonName.split(":")[0] row = buttonName.split(":")[1] column = buttonName.split(":")[2] self.domainManager.setDomainInfo(self.startVmInfo) LogRecord.instance().logger.info(u"开始开启虚拟机-----------------------------------------------00") self.domainManager.startDomainByName() LogRecord.instance().logger.info(u"结束开启虚拟机-----------------------------------------------11")
def autoOpenCourse(self,name,classid = None): LogRecord.instance().logger.info(u'自动打开相应的虚拟机') self.autoCourse = name if name in self.downloadingList: self.courseTimer = QTimer() self.courseTimer.start(1000) self.connect(self.courseTimer, SIGNAL("timeout()"),self.checkDownloadOver) else: for item in self.vmOffInfoList: if name == item["name"]: vmInfo = item if classid != None: vmInfo["classid"] = classid self.domainManager.setDomainInfo(vmInfo) self.domainManager.startDomainByName() return
def replaceFirstMenuName(self): # pass grub_file = QFile("/boot/grub/grub.conf") if not grub_file.open(QIODevice.ReadOnly): grub_file.close() return fs = QTextStream(grub_file) fileContent = fs.readAll() grub_file.close() if QString(fileContent).contains("MCOS cDesktop Client Start"): return cmd = "sed -i \"s/CentOS (2.6.32-431.el6.i686)/MCOS cDesktop Client Start/g\" /boot/grub/grub.conf"; ok = os.system(cmd) if ok != 0: LogRecord.instance().logger(u"替换grub.cfg中的'CentOS (2.6.32-431.el6.i686)'失败") if QString(fileContent).contains("hiddenmenu"): os.system("sed -i \"/hiddenmenu/d\" /boot/grub/grub.conf")
def autoOpenVMLesson(self, vmName, allflag = False): LogRecord.instance().logger.info(u'自动打开相应的虚拟机') if self.vmButtonList: vmInfo = self.vmButtonList[0].getVMInfo() VMOperation.instance().setCurrentVMInfo(vmInfo) #thread.start_new_thread(VMOperation.instance().openVM,()) if allflag == True: if VMOperation.instance().openVM(): LogRecord.instance().logger.info(u'start the lesson') else: if VMOperation.instance().openVM(): LogRecord.instance().logger.info(u'start the lesson') else: LogRecord.instance().logger.info(u'未监测到虚拟机%s的信息' % vmName)
def parseMsg(self,msg): if len(msg.split("#")) >= 2: if msg.split("#")[0] == "teacherip": self.teacherIp = msg.split("#")[1] self.emit(SIGNAL("receiveteacherip"),self.teacherIp) elif msg.split("#")[0] == "mousepos": self.slotSetMousePos(msg) elif msg.split("#")[0] == "startbroadcast": LogRecord.instance().logger.info("startbroadcast") self.slotStartAllBroadcast(msg) elif msg.split("#")[0] == "startstucomputerbroadcast": self.slotStartStuBroadcast(msg) elif msg.split("#")[0] == "stopbroadcast": self.udpSocket.leaveMulticastGroup(self.mcast_addr_own) self.emit(SIGNAL("stopbroadcast")) self.broadFlag = False # lent = len(self.framedata) # file = open("frame.txt","w") # file.write(QString.number(self.datanum)) # file.write("++") # file.write(QString.number(self.datareceivenum)) # file.write("++") # file.write(QString.number(self.localframenum)) # file.write("++") # file.write(QString.number(self.necnum)) # file.write("++") # file.write(QString.number(self.avilableframenum)) # file.write("++") # file.write(QString.number(lent)) # file.close() self.framedata.clear() self.dataframelist.clear() self.currentframe = None
def getLinuxOperationSystemType(): """得到linux操作系统的类型""" statusOutput = commands.getstatusoutput("head -n 1 /etc/issue") LogRecord.instance().logger.info(u"/etc/issue文件内容:%s" % statusOutput[1]) if statusOutput[0] == 0: output = QString(statusOutput[1]) if output.contains("Ubuntu 12.04"): return "Ubuntu 12.04" if output.contains("Ubuntu 13.04"): return "Ubuntu 13.04" elif output.contains("CentOS release 6.5"): return "CentOS 6.5" elif output.contains("CentOS release 7.0"): return "CentOS 7.0" elif output.contains("Ubuntu 14.04"): return "Ubuntu 14.04" elif output.contains("Ubuntu"): return "Ubuntu" elif output.contains("MCOS-cClassroom-student"): return "CentOS 7.0" elif output.contains("CentOS"): return "CentOS" return None
def getNetInfo(): netList = ["0.0.0.0","255.255.255.0","1.1.1.1", "dhcp", "dhcp", "0.0.0.0", "0.0.0.0"] networkInfo = getCmdExecValueT("../lib/ccr_jytcapi network") for item in networkInfo: if len(item.split(":")) == 2: if item.split(":")[0] == "ip": netList[0] = item.split(":")[1] elif item.split(":")[0] == "mask": netList[1] = item.split(":")[1] elif item.split(":")[0] == "gateway": netList[2] = item.split(":")[1] elif item.split(":")[0] == "conf": if item.split(":")[1] == "0": netList[3] = "dhcp" else: netList[3] = "static" elif item.split(":")[0] == "dns1": netList[4] = "static" netList[5] = item.split(":")[1] elif item.split(":")[0] == "dns2": netList[6] = item.split(":")[1] LogRecord.instance().logger.info(netList) return netList
def getGdkResolution(): import gtk.gdk LogRecord.instance().logger.info("getGdkResolution in") resolution = "1024x768" w = gtk.gdk.get_default_root_window() sz = w.get_size() #(1440,900) if len(sz) == 2: LogRecord.instance().logger.info(str(sz[0])) LogRecord.instance().logger.info(str(sz[1])) resolution = str(sz[0]) + "x" + str(sz[1]) return resolution
def setNetworkCardFilePath(self): #self.networkconfigFile = common.NETWORK_CONFIG_CENTOS_7_0 + "br0" #self.bridgeNetworkconfigFile = common.NETWORK_CONFIG_CENTOS_7_0 + "br0" ethName = common.DEFAULT_NETCARD_NAME ethNameList = globalfunc.getEthNameList() if not ethNameList: LogRecord.instance().logger.info(u"获取网卡名称失败!") else: ethName = ethNameList[0] self.originalNetConfigFile = common.NETWORK_CONFIG_CENTOS_7_0 + ethName LogRecord.instance().logger.info(u"获取网卡名称:%s" % self.originalNetConfigFile) self.originalBridgerNetConfigFile = common.BRIDGER_NETWORK_CONFIG_CENTOS_7_0 LogRecord.instance().logger.info(u"获取bridge网卡名称:%s" % self.originalNetConfigFile) self.networkconfigFile = self.originalNetConfigFile self.bridgeNetworkconfigFile = self.originalBridgerNetConfigFile if globalvariable.PROGRAM_RUNNING_TYPE == common.OPERATION_ENV_TYPE:#running env self.networkconfigFile = globalfunc.convertPathToConfigPath(self.originalNetConfigFile) self.bridgeNetworkconfigFile = globalfunc.convertPathToConfigPath(self.originalBridgerNetConfigFile)
def mountFile(filePath): mountPath = convertPathToConfigPath(filePath) if os.system("mount --bind %s %s" % (mountPath, filePath)) != 0: LogRecord.instance().logger.info(u"挂载配置文件失败,挂载路径:%s, 配置文件路径:%s" % (mountPath, filePath))
def umountFile(filePath): if os.system("umount %s" % filePath) != 0: LogRecord.instance().logger.info(u"卸载配置文件失败,文件路径:%s" % filePath)
def slotCreateVMLesson(self): vmBtn = self.sender() if vmBtn: LogRecord.instance().logger.info(u'开始创建虚拟机') if globalvariable.VM_IS_CREATE_STATUS: LogRecord.instance().logger.info(u'重复点击!') return else: globalvariable.VM_IS_CREATE_STATUS = True LogRecord.instance().logger.info(u'准备获取虚拟机信息!') paramInfo = vmBtn.getVMInfo() LogRecord.instance().logger.info(u'准备获取虚拟机信息完成!') try: vmName = VMOperation.instance().createVMLesson(paramInfo) except: LogRecord.instance().logger.info(u'创建虚拟机异常.........!') LogRecord.instance().logger.info(u'得到创建的虚拟机信息!') if vmName: LogRecord.instance().logger.info(u'创建虚拟机%s成功' % vmName) vmInfo = NetworkManager.instance().getVMInfo(vmName) if vmInfo == None: globalvariable.VM_IS_CREATE_STATUS = False return if len(vmInfo) == 0: globalvariable.VM_IS_CREATE_STATUS = False return vmInfo[0]["vmname"] = vmInfo[0]["name"] if vmInfo: VMOperation.instance().setCurrentVMInfo(vmInfo[0]) if VMOperation.instance().openVM(True): #保存开启虚拟机的名称 #globalvariable.VM_IS_CREATE_STATUS = False WindowMonitor.instance().insertVmId(vmName) else: globalvariable.VM_IS_CREATE_STATUS = False #删除没有成功运行的虚拟机 if VMOperation.instance().removeVMLesson(vmName): LogRecord.instance().logger.info(u"删除后台相应的虚拟机成功") else: LogRecord.instance().logger.info(u'未查询到相应的虚拟机:%s' % vmName) globalvariable.VM_IS_CREATE_STATUS = False else: LogRecord.instance().logger.info(u'创建虚拟机失败') globalvariable.VM_IS_CREATE_STATUS = False #刷新虚拟机界面 self.emit(SIGNAL("refreshVMS"))
def setRowColumnWidget(self,row,column,vmid): status = "sfw" #self.vmTableWidget.clear() mainWidget = QWidget() #self.vmTableWidget.hideColumn() #vmRowButtonList = [] parentWidth = self.parent.width() resolutionValue = StoreInfoParser.instance().getResolutionValue() if resolutionValue: if len(resolutionValue.split("x")) >= 2: parentWidth = int(resolutionValue.split("x")[0])*5/9.0 ratio = parentWidth/800.0 vmWidth = (parentWidth - 20*2 -50*2*ratio)/3 if len(self.vmInfoList) > 3: vmWidth = (parentWidth - 20*2 -50*2*ratio)/3 - 20*(1 - ratio) vmButton = CustomVMButton() vmButton.setFixedSize(QSize(vmWidth, vmWidth + 5)) vmButton.setIconSize(QSize(vmWidth - 60*ratio,vmWidth - 30*ratio)) vmButton.setText(self.vmInfoList[row*3 + column]["name"]) vmButton.setFlat(True) vmButton.setFont(QFont("Times", 15, QFont.Bold)) vmInfo = self.vmInfoList[row*3 + column] vmButton.setVMInfo(vmInfo) imageName = "other.png" if self.vmInfoList[row*3 + column].has_key("os_distro"): if common.imageMap.has_key(self.vmInfoList[row*3 + column]["os_distro"]): imageName = common.imageMap[self.vmInfoList[row*3 + column]["os_distro"]] else: LogRecord.instance().logger.info(u'common.imageMap中未找到键值%s' % self.vmInfoList[row*3 + column]["os_distro"]) vmButton.setIcon(QIcon("images/systemImage/%s" % imageName)) # if globalvariable.CLASS_STATUS and not globalvariable.TICHU_STATUS: # self.connect(vmButton, SIGNAL("clicked()"),self.slotOpenVMLesson) # self.connect(vmButton, SIGNAL("controlvm"),self.slotControlVM) # else: # self.connect(vmButton, SIGNAL("clicked()"),self.slotCreateVMLesson) #vmRowButtonList.append(vmButton) self.vmButtonList.append(vmButton) #firMybutton.setStatus("undownload") vmButton.setObjectName(vmid + ":" + QString.number(row) + ":" + QString.number(column)) self.connect(vmButton, SIGNAL("clicked()"),self.startDomain) progressBar = WidgetProgress() progressBar.setFixedSize(vmWidth, vmWidth + 5) #progressBar.progressBar.setValue(0) progressBar.setVmName(self.vmInfoList[row*3 + column]["name"]) progressBar.setObjectName(vmid + ":" + QString.number(row) + ":" + QString.number(column)) #progressBar.objectName() #self.firMybutton.setText(self.tr("确萨")) #progressBar = QProgressBar() myLayout = QHBoxLayout() myLayout.setMargin(0) myLayout.addStretch() myLayout.addWidget(vmButton) myLayout.addWidget(progressBar) myLayout.addStretch() if vmid in self.downloadingList: vmButton.hide() else: progressBar.hide() #firMybutton.hide() mainWidget.setLayout(myLayout) self.vmTableWidget.setCellWidget(row, column, mainWidget)
def updateVMList(self): language = StoreInfoParser.instance().getLanguage() m_pTranslator = QTranslator() exePath = "./" if language == "chinese": QmName = "zh_CN.qm" StoreInfoParser.instance().setLanguage("chinese") else: QmName = "en_US.qm" if(m_pTranslator.load(QmName, exePath)): QCoreApplication.instance().installTranslator(m_pTranslator) if self.vmstatusTimer.isActive(): self.vmstatusTimer.stop() else: pass subWidget = QWidget() vmNum = len(self.vmInfoList) rowNum = 0 subMainLayout = QVBoxLayout() subMainLayout.setMargin(0) #subMainLayout.addStretch() #subMainLayout.addSpacing(10) #subMainLayout.setSpacing(10) self.vmButtonList = [] if vmNum % 3 != 0: rowNum = vmNum / 3 + 1 else: rowNum = vmNum / 3 for i in range(rowNum): indexEnd = 3 if i == rowNum - 1: indexEnd = vmNum - (i*3) parentWidth = self.parent.width() resolutionValue = StoreInfoParser.instance().getResolutionValue() if resolutionValue: if len(resolutionValue.split("x")) >= 2: parentWidth = int(resolutionValue.split("x")[0])*5/9.0 ratio = parentWidth/800.0 vmWidth = (parentWidth - 20*2 -50*2*ratio)/3 if vmNum > 3: vmWidth = (parentWidth - 20*2 -50*2*ratio)/3 - 20*(1 - ratio) vmRowButtonList = [] for j in range(indexEnd): vmButton = CustomVMButton(self) vmButton.setFixedSize(QSize(vmWidth, vmWidth + 5)) vmButton.setIconSize(QSize(vmWidth - 60*ratio,vmWidth - 30*ratio)) vmButton.setText(self.vmInfoList[i*3 + j]["name"]) vmButton.setToolTip(self.tr("course: ") + self.vmInfoList[i*3 + j]["name"]) vmButton.setStyleSheet(u"QToolTip{border-radius:5px;background-color:white;color:black;font-size:20px;font-family:微软雅黑;}") vmButton.setFlat(True) vmButton.setFont(QFont("Times", 15, QFont.Bold)) vmInfo = self.vmInfoList[i*3 + j] vmButton.setVMInfo(vmInfo) imageName = "other.png" if self.vmInfoList[i*3 + j].has_key("os_distro"): if common.imageMap.has_key(self.vmInfoList[i*3 + j]["os_distro"]): imageName = common.imageMap[self.vmInfoList[i*3 + j]["os_distro"]] else: LogRecord.instance().logger.info(u'common.imageMap中未找到键值%s' % self.vmInfoList[i*3 + j]["os_distro"]) vmButton.setIcon(QIcon("images/systemImage/%s" % imageName)) if globalvariable.CLASS_STATUS and not globalvariable.TICHU_STATUS: self.connect(vmButton, SIGNAL("clicked()"),self.slotOpenVMLesson) self.connect(vmButton, SIGNAL("controlvm"),self.slotControlVM) else: self.connect(vmButton, SIGNAL("clicked()"),self.slotCreateVMLesson) vmRowButtonList.append(vmButton) self.vmButtonList.append(vmButton) btnLayout = QHBoxLayout() if vmNum > 3: btnLayout.setSpacing(10) #btnLayout.setMargin(10) btnLayout.addSpacing(30) for vmbtn in vmRowButtonList: btnLayout.addWidget(vmbtn) btnLayout.addStretch() subMainLayout.addLayout(btnLayout) #subMainLayout.addStretch() subWidget.setLayout(subMainLayout) if self.scrollArea.widget(): self.scrollArea.takeWidget() self.scrollArea.setWidgetResizable(False) self.scrollArea.setWidget(subWidget)