Interface para Qemu
Publicado por Diogo Souza da Silva 15/03/2007
[ Hits: 9.964 ]
Homepage: www.manfiesto.blog.br
Minha primeira contribuição, uma interface grafica para o Qemu, escrita em pygtk.
Fiz para aprender como funciona a linguagem, e é minha primeira experiência com as linguagens. Ainda não está 100%, mas já quebra um belo galho. Toda dica, contribuição, critica e etc é bem vinda.
#!/usr/bin/python # -*- coding: utf-8 -*- # # Minha primeira experiencia em pygtk, uma interface simples para o qemu # Apenas para aprender como se faz. # Ele pega as opcoes definida na interface e de acordo com elas # preprara os parametros a serem enviados e finalemente chama o qemu # # O Qemu deve estar instalado corretamente para que o script funcione # E tambem o kqemu, caso queira usar essa opcao # # Muita coisa aqui nao foi feita da melhor forma possivel por ser meu primeiro script # Qualquer dica, conselho, reclamacao etc é bem vindo # # Por diogosouza.eu (at) gmail.com # Em 25-Fev-2007 # import pygtk pygtk.require('2.0') import gtk # Importado para passar instrucoes ao sistema operacional import os # classe principal class teste: # construtor da janela def __init__(self): #inicia variaveis que vou usar depois self.audio = "" self.tela = "" self.hora = "" self.cdx = "" self.hdx = "" self.floppyx = "" self.parametros ="qemu " self.booton = "--> cdrom ON" # Aqui e onde a janela e criada self.win = gtk.Window(gtk.WINDOW_TOPLEVEL) self.win.connect('delete-event',gtk.main_quit) self.win.set_border_width(8) self.win.set_title('Qemu Facil') # Dividi a janela em quatro conteiners. O vbox e onde organizo tudo # no grid ficam as opcoes gerais, nos hbox os que sobraram self.vbox = gtk.VBox(False, 8) self.grid = gtk.Table(5,4) self.hbox = gtk.HBox(False, 8) self.hbox2 = gtk.HBox(False, 8) # Abaixo a construcao geral da janela self.grid.set_col_spacings(10) self.intro = gtk.Label("Qemu Facil - uma simples interface") self.label = gtk.Label('Usar') self.usar_cdrom = gtk.CheckButton("-->") self.usar_hd = gtk.CheckButton("-->") self.usar_floppy = gtk.CheckButton("-->") # Esses chamam as funcoes para definir as variaveis de acordo com as escolhas self.usar_cdrom.connect('toggled', self.activar_cdrom, "-->") self.usar_hd.connect('toggled', self.activar_hd, "-->") self.usar_floppy.connect('toggled', self.activar_floppy, "-->") self.label2 = gtk.Label('Boot') # Aqui eu ja tive de anexar logo a tabela e definir a função por serem radio # e eu nao sei trata-los de outra forma... self.boots = gtk.RadioButton(None, "") self.grid.attach(self.boots, 4 , 5, 1, 2) self.boots.connect('toggled', self.boot_cdrom, "-->") self.boots= gtk.RadioButton(self.boots, "") self.grid.attach(self.boots, 4, 5, 2, 3) self.boots.connect('toggled', self.boot_hd, "-->") self.boots = gtk.RadioButton(self.boots, "") self.grid.attach(self.boots, 4, 5, 3, 4) self.boots.connect('toggled', self.boot_floppy, "-->") self.label3 = gtk.Label('CDROM') self.label4 = gtk.Label('HardDisk') self.label5 = gtk.Label('Floppy') # Esses são quem guarda o endereço das imagens a serem usadas self.cdrom = gtk.Entry() self.hd = gtk.Entry() self.floppy = gtk.Entry() # Por default ficam os drivers físicos self.cdrom.set_text("/dev/cdrom") self.floppy.set_text("/dev/fd0") self.cdrom_busca = gtk.Button('Buscar') self.hd_busca = gtk.Button('Buscar') self.floppy_busca = gtk.Button('Buscar') self.cdrom_busca.connect("clicked", self.busca_cdrom) self.hd_busca.connect("clicked", self.busca_hd) self.floppy_busca.connect("clicked", self.busca_floppy) # Agora eu monto tudo no grid self.grid.attach(self.label, 0, 1, 0, 1) self.grid.attach(self.label2, 4, 5, 0, 1) self.grid.attach(self.usar_cdrom, 0, 1, 1, 2) self.grid.attach(self.label3, 1, 2, 1, 2) self.grid.attach(self.cdrom, 2, 3, 1, 2) self.grid.attach(self.cdrom_busca, 3, 4, 1, 2) self.grid.attach(self.usar_hd, 0, 1, 2, 3) self.grid.attach(self.label4, 1, 2, 2, 3) self.grid.attach(self.hd, 2, 3, 2, 3) self.grid.attach(self.hd_busca, 3, 4, 2, 3) self.grid.attach(self.usar_floppy, 0, 1, 3, 4) self.grid.attach(self.label5, 1, 2, 3, 4) self.grid.attach(self.floppy, 2, 3, 3, 4) self.grid.attach(self.floppy_busca, 3, 4, 3, 4) # Agora e o que entra no hbox, Memoria Ram e Kqemu self.label6 = gtk.Label('Ram(MB):') self.ram = gtk.combo_box_new_text() self.ram.append_text("64") self.ram.append_text("128") self.ram.append_text("256") self.ram.append_text("512") self.label7 = gtk.Label('Kqemu') self.kqemu = gtk.combo_box_new_text() self.kqemu.append_text("Sim - com kernel") self.kqemu.append_text("Sim - simples") self.kqemu.append_text("Nao usar") self.hbox.pack_start(self.label6) self.hbox.pack_start(self.ram) self.hbox.pack_start(self.label7) self.hbox.pack_start(self.kqemu) # Segundo hbox, Localtime, Audio e Fullscreen self.localtime_c = gtk.CheckButton("Hora Local") self.audio_c = gtk.CheckButton("Audio") self.fullscreen_c = gtk.CheckButton("Tela Cheia") self.localtime_c.connect('toggled', self.activar_hora, "-->") self.audio_c.connect('toggled', self.activar_audio, "-->") self.fullscreen_c.connect('toggled', self.activar_tela, "-->") self.hbox2.pack_start(self.localtime_c) self.hbox2.pack_start(self.audio_c) self.hbox2.pack_start(self.fullscreen_c) # Caso o usuario queira algo mais... self.label8 = gtk.Label("Parametros adcionais") self.extra = gtk.Entry() # Botão para chamar o qemu self.entrar = gtk.Button("Entrar") self.entrar.connect("clicked", self.emular) # Agora tudo entra no vbox na ordem certa self.vbox.pack_start(self.intro) self.vbox.pack_start(self.grid) self.vbox.pack_start(self.hbox) self.vbox.pack_start(self.hbox2) self.vbox.pack_start(self.label8) self.vbox.pack_start(self.extra) self.vbox.pack_start(self.entrar) self.win.add(self.vbox) self.win.show_all() # As funcoes a seguir sao do botao de busca das imagens # Ele abre uma caixa de selecao de arquivos e passa o arquivo # selecionado para a entrada devida, os gtk.Entry, que sao lidos mais tarde def file_ok_cdrom(self, w): self.fc = " %s " % self.filec.get_filename() self.cdrom.set_text(self.fc) self.filec.hide() def file_ok_hd(self, w): self.fh = " %s " % self.fileh.get_filename() self.hd.set_text(self.fh) self.fileh.hide() def file_ok_floppy(self, w): self.ff = " %s " % self.filef.get_filename() self.floppy.set_text(self.ff) self.filef.hide() def destroy(self, widget): self.filec.hide() self.fileh.hide() self.filef.hide() def busca_cdrom(self, widget, data=None): self.filec = gtk.FileSelection("File selection") self.filec.connect("destroy", self.destroy) self.filec.ok_button.connect("clicked", self.file_ok_cdrom) self.filec.cancel_button.connect("clicked",lambda w: self.filec.destroy()) self.filec.show() def busca_hd(self, widget, data=None): self.fileh = gtk.FileSelection("File selection") self.fileh.connect("destroy", self.destroy) self.fileh.ok_button.connect("clicked", self.file_ok_hd) self.fileh.cancel_button.connect("clicked",lambda w: self.fileh.destroy()) self.fileh.show() def busca_floppy(self, widget, data=None): self.filef = gtk.FileSelection("File selection") self.filef.connect("destroy", self.destroy) self.filef.ok_button.connect("clicked", self.file_ok_floppy) self.filef.cancel_button.connect("clicked",lambda w: self.filef.destroy()) self.filef.show() # As funcoes abaixo apenas servem para definir as variaveis que depois serao lidas # para passa-las ao qemu. Se ve quais Discos usar e em qual esta o Boot def activar_cdrom(self, widget, data=None): self.cdx = "%s cdrom %s" % (data, ("OFF", "ON")[widget.get_active()]) def activar_hd(self, widget, data=None): self.hdx = "%s hd %s" % (data, ("OFF", "ON")[widget.get_active()]) def activar_floppy(self, widget, data=None): self.floppyx = "%s floppy %s" % (data, ("OFF", "ON")[widget.get_active()]) def boot_cdrom(self, widget, data=None): self.booton = "%s cdrom %s" % (data, ("OFF", "ON")[widget.get_active()]) def boot_hd(self, widget, data=None): self.booton = "%s hd %s" % (data, ("OFF", "ON")[widget.get_active()]) def boot_floppy(self, widget, data=None): self.booton = "%s floppy %s" % (data, ("OFF", "ON")[widget.get_active()]) # Essa verifica as ultimas instruções passadas, Audio, Hora e TelaCheia def activar_audio(self, widget, data=None): self.audio = "%s audio %s" % (data, ("OFF", "ON")[widget.get_active()]) def activar_hora(self, widget, data=None): self.hora = "%s hora %s" % (data, ("OFF", "ON")[widget.get_active()]) def activar_tela(self, widget, data=None): self.tela = "%s tela %s" % (data, ("OFF", "ON")[widget.get_active()]) def emular(self, button): # Essa funcao e que chama o qemu com os devidos parametros # Ele primeiro verifica quais itens usar. self.parametros = "qemu " self.imagem = 0 self.boot = 0 self.mram = 0 self.active = self.ram.get_active() self.activek = self.kqemu.get_active() # Primeiro ve quais discos carregar e em qual boot # mas so deixa boot em disco carregado e so ativa disco com imagem selecionada if self.cdx == "--> cdrom ON" and self.cdrom.get_text() != "" : self.parametros = self.parametros +" -cdrom "+ self.cdrom.get_text() self.imagem = 1 if self.booton == "--> cdrom ON": self.parametros = self.parametros +" -boot d" self.boot = 1 if self.hdx == "--> hd ON" and self.hd.get_text() != "" : self.parametros = self.parametros +" -hda "+ self.hd.get_text() self.imagem = 1 if self.booton == "--> hd ON": self.parametros = self.parametros +" -boot c" self.boot = 1 if self.floppyx == "--> floppy ON" and self.floppy.get_text() != "": self.parametros = self.parametros +" -fda "+ self.floppy.get_text() self.imagem = 1 if self.booton == "--> floppy ON": self.parametros = self.parametros +" -boot a" self.boot = 1 # Depois define a RAM a ser usada if self.active == 0 : self.mram = "64" elif self.active == 1 : self.mram = "128" elif self.active == 2 : self.mram = "256" elif self.active == 3 : self.mram = "512" else: self.mram = "128" self.parametros = self.parametros +" -m "+ self.mram # Verifica se e ou nao para usar kqemu if self.activek == 0 : self.parametros = self.parametros +" -kernel-kqemu " elif self.activek == 2: self.parametros = self.parametros +" -no-kqemu " # E as opcoes extras if self.audio == "--> audio ON" : self.parametros = self.parametros +" -soundhw all " if self.tela == "--> tela ON" : self.parametros = self.parametros +" -full-screen " if self.hora == "--> hora ON" : self.parametros = self.parametros +" -localtime " # E por fim adciona os parametros extras self.parametros = self.parametros + " " + self.extra.get_text() # Agora verifica se o minimo foi configurado if self.boot == 1 and self.imagem == 1 : # Essa função envia a string ja definida para o sistema # e retorna o output para lugar nenhum(/dev/null) os.system(self.parametros) else: # Caso falte algum item ele exibe essa mensagem de erro. self.alert = gtk.MessageDialog(None, gtk.DIALOG_MODAL, buttons = gtk.BUTTONS_CLOSE, message_format = "Sistema nao esta pronto para iniciar, verifique suas opcoes") self.resp = self.alert.run() self.alert.show() if self.resp == gtk.RESPONSE_CLOSE: self.alert.destroy() # Abaixo o programa e iniciado def main(self): gtk.main() teste = teste() teste.main()
Calculadora de area de poligonos e circulos
Mudar wallpaper por um aleatorio
QFacil 0.2 - Qemu simplificado.
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Título: Descobrindo o IP externo da VPN no Linux
Armazenando a senha de sua carteira Bitcoin de forma segura no Linux
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Instalando Brave Browser no Linux Mint 22
vídeo pra quem quer saber como funciona Proteção de Memória:
Encontre seus arquivos facilmente com o Drill
Mouse Logitech MX Ergo Advanced Wireless Trackball no Linux
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Como abrir o pycharm no linux (2)
VMs e Interfaces de Rede desapareceram (12)