wiki:ubiquity

Plugins para el Ubiquity

Enlaces oficiales : https://wiki.ubuntu.com/Ubiquity/Plugins

Para los plugins de GTK se deben de generar dos ficheros :

  • interfaz.ui
  • controlador.py

El fichero interfaz debe ir en /usr/share/ubiquity/gtk , mientras que el controlador debe ir en /usr/lib/ubiquity/plugins

Para la interfaz, se recomienda desde Glade enlazar los eventos con metodos. No hay que definir los botones de avance o atras.

En los plugins no se pueden realizar print, por lo que habra que utlizar para depurar syslog o escribir en ficheros.

Las cadenas que aparecen en este ejemplo con el formato cadena/de/texto/referente/a/algo son cadenas que hay que incluir en el fichero de plantillas de debconf.

Las traducciones se realizan mediante debconf. Estas traducciones se realizan de la siguiente forma :

  • Se genera un fichero nombre_del_paquete.templates que tendra un aspecto similar a este :
    Template: ubiquity/text/release_notes_only
    Type: text
    _Description:
     You may wish to read the <a href="release-notes">release notes</a>.
    
  • Se creara en el directorio debian una carpeta llamada po, que contendra ficheros de tipo po, que contendran la cadena indicada en _Description como msgid, y con la traduccion correcta
  • Si se trabaja con el rules nuevo no hay que incluir nada, sin embargo si se trabaja con el rules viejo hay que incluir el debhelper dh_installdebconf

Las cadenas de la interfaz grafica que se traduzcan desde el template deben de tener en el campo "Template" un valor como este :

Template: ubiquity/text/ID_DEL_COMPONENTE
Type: text
_Description:
 You may wish to read the <a href="release-notes">release notes</a>.

Ejemplo comentado

from ubiquity import misc, plugin, validation

NAME = 'NOMBRE_DEL_MODULO'

AFTER = 'language' # El modulo se mostrara despues de que language se haya mostrado
BEFORE = ['usersetup','timezone'] # El modulo se mostrara antes de que se muestren los modulos usersetup y timezone
WEIGHT = 13 # en caso de empate con otro plugin este numero sirve para decidir cual va primero, siendo el numero mas alto el mas prioritario

HIDDEN = 'language' # El modulo language se ocultara 
'''
Esto es obligatorio. Sino esta definido esta clase no se mostrara en ubiquity
'''
class PageGtk(plugin.PluginUI):
        plugin_title = 'titulo/de/la/seccion'

        def __init__(self, controller, *args, **kwargs):
                from gi.repository import Gio, Gtk
                self.resolver = Gio.Resolver.get_default()
                self.controller = controller
                builder = Gtk.Builder()
                self.controller.add_builder(builder)
                builder.add_from_file(os.path.join(
                        os.environ['UBIQUITY_GLADE'], 'interfaz.ui'))
                builder.connect_signals(self)
                self.page = builder.get_object('contenedorbase') # Este es el id del contenedor base que se ha definido en el fichero interfaz.ui
                self.texto = builder.get_object('id_campo_de_texto') # esto es un objeto GTK del tipo definido en la GUI
                self.plugin_widgets = self.page

'''
Esto es obligatorio.
'''
class Page(plugin.Plugin):
        ''' Este metodo es obligatorio'''
        def ok_handler(self):
                '''


                Aqui va el codigo que queremos que haga al presionar el boton



                '''
                # Esta llamada es importante, sino no avanzara
                plugin.Plugin.ok_handler(self)


'''

Esta clase es opcional.
Solo se ejecutara una vez se haya realizado la copia de todo el sistema. Esto quiere decir que al entrar esta clase ya tenemos disponible /target con todo lo que hay instalado en la iso (casper y demas paquetes)

'''
class Install(InstallPlugin):
        '''
           Aqui se define si se quiere hacer algun script con cosas
        '''
        def prepare(self,unfiltered=False):
            comando_a_ejecutar = ['comando_a_ejecutar','argumento1','argumento2']
            environment = {''} # Variables de entorno cuando se ejecuta el comando
            return (comando_a_ejecutar,[],environment)

        '''
           Este es el que dispara el evento de instalacion.
        '''
        def install(self, target, progress, *args, **kwargs):
            progress.info('descripcion/que/aparece/en/la/barra/de/progreso')
            return InstallPlugin.install(self, target, progress, *args, **kwargs)


Last modified 3 years ago Last modified on Dec 16, 2014, 2:56:15 PM