Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
See discussions, stats, and author profiles for this publication at: https://www.researchgate.net/publication/283291584
Corrección de Errores a Nova Ligero 3.0
Thesis · June 2012
DOI: 10.13140/RG.2.1.3670.3440
CITATIONS
0READS
65
1 author:
Some of the authors of this publication are also working on these related projects:
Influence analysis in technological networks (SNA) View project
Nova Linux View project
Dairelys García Rivas
University of Information Sciences
9 PUBLICATIONS 3 CITATIONS
SEE PROFILE
All content following this page was uploaded by Dairelys García Rivas on 28 October 2015.
The user has requested enhancement of the downloaded file.
UNIVERSIDAD DE LAS CIENCIAS INFORMÁTICAS
Título: “Corrección de errores a Nova Ligero 3.0.”
Trabajo de Diploma para optar por el título de
Ingeniero en Ciencias Informáticas
Autor: Dairelys García Rivas
Tutores: Ing. Nadia Porro Lugo
Ing. Miguel Albalat Águila
Ciudad de La Habana
Junio de 2012
1
“La mayor ía de las veces la gente no sabe lo
que quiere hasta que se lo enseñas”.
“Desafortunadamente, la gente no se est á
rebelando contra Microsoft . No conocen nada
mejor” .
Steve Jobs
2
DECLARACIÓN DE AUTORÍA
Declaro que soy la única autora de la presente tesis y reconozco a la Universidad de las Ciencias
Informáticas los derechos patrimoniales de la misma, con carácter no exclusivo.
Para que así conste firmo la presente a los 28 días del mes de Junio del año 2012
_____________________ __________________________
Dairelys García Rivas Ing. Nadia Porro Lugo
__________________________
Ing. Miguel Albalat Águila
3
Dedicator iaDedico este trabajo de diploma a mis padres, que me han hecho la mujer que hoy en día
intento construir y que han estado a mi lado a cada paso del camino; que han compartido mis
noches de insomnio y hoy me acompañan en este día donde de alguna forma culmina una
etapa hermosa de mi vida.
A mis tíos Rodolfo García y Clara Mayo, que no pueden estar a mi lado en estos momentos
por dos razones bien diferentes, pero han sido mi motor impulsor a superarme en la vida.
4
AgradecimientosA Dios y a la Revolución por construir esta obra hermosa que es la UCI.
A mis tutores, Miguel Albalat y Nadia Porro, que han estado a mi lado, dándome apoyo, y
atendiendo mis llamadas a deshora sin protestar; a mi oponente, Yadira, que con ojo avisor ha
revisado el documento en función de hacerlo lo más completo posible.
A mi querido Abel Firvida, que ha sido como un padre para mí todo este tiempo, y también
ha dedicado su valioso tiempo a la revisión de este documento.
A mis abuelas y abuelo, mis tíos y tías, y demás, que me han enseñado lo que es una familia
que confía en uno y cree en sus éxitos.
A mi novio Alexis, que ha sido un gran apoyo para la realización de la investigación e
implementación de aplicaciones, así como un gran apoyo emocional; y a mi gran amigo Yulio
Alemán, que me ayudó a ver las cosas desde otro punto de vista.
A todos los profesores del proyecto Nova: Machín, Miranda, Mónica, Yusleidys, Ernesto
Puente, y otros que me ayudaron con sus ideas y sus consejos.
A mis compañeros de proyecto, que me apoyaron en todo momento.
A todas las personas que se preocuparon por el desarrollo de esta investigación.
5
RESUMEN
La ley de Wirth, en contraposición a la ley de Moore, y el fenómeno de la obsolescencia programada,
imponen el ineficiente aprovechamiento de los recursos computacionales. Como solución a esta
problemática, en Cuba surge Nova Ligero, sistema operativo orientado a computadoras de bajos recursos,
y también al proceso de migración1 de la isla. Durante su despliegue en diversos lugares del territorio
cubano, de conjunto con un proceso de pruebas de la empresa Calisoft, el mismo ha arrojado una serie de
dificultades de necesaria modificación para el correcto funcionamiento del sistema operativo.
La presente investigación documenta minuciosamente el proceso de investigación para la solución de
dichas dificultades, así como la realización del proceso ingenieril y la implementación de su solución de
manera óptima, lo que permitió que se obtuviera un producto final avalado por por la empresa Calisoft.
Palabras Claves: Nova Ligero, sistema operativo, entorno de escritorio, resolución de problemas.
1 Hace referencia al proceso de migración a sistemas operativos GNU/Linux que se encuentran llevando a cabo los Organismos de la Administración Central del Estado en Cuba. En lo adelante, el mismo será referido solamente como “Proceso de migración”.
6
ABSTRACT
Wirth's law, as opposed to Moore's Law, and the phenomenon of planned obsolescence, impose
inefficient use of computational resources. As a solution to this problem arises in Cuba Nova Light,
operating system oriented to computers with low incomes, and also to the migration process2 of the island.
While deployed in various places throughout Cuba, with an overall testing process from Calisoft company,
it has yielded a number of difficulties of necessary amendments to the proper functioning of the operating
system.
This research documents in detail the research process to solve these difficulties, as well as the
realization of process engineering and the implementation of the optimal solution, which allowed to obtain a
final product by the company endorsed by Calisoft.
Keywords: Nova Light, operating system, desktop environment, problem solving.
2 It refers to the migration process to GNU/Linux operating systems that has been taken by the Institutions of the Central Administration of the State in Cuba. From now on, it will be referred just as “Migration process”.
7
ÍNDICE DE CONTENIDOS
INTRODUCCIÓN..........................................................................................................................................3
CAPÍTULO 1: ESTUDIO DEL ESTADO DEL ARTE......................................................................................7
1.1 Ponderación de criticidad de errores.............................................................................................7
1.2 Análisis de posibles soluciones.....................................................................................................8
1.2.1 Errores en comparticiones CIFS en el PCManFM..................................................................8
1.2.2 Errores en opciones Hibernar y Suspender............................................................................9
1.2.3 Aplicación de gestión de distribuciones de teclado...............................................................11
1.2.4 Soporte para impresoras HP LaserJet..................................................................................13
1.2.5 Soporte para proxy...............................................................................................................15
1.2.6 Salvar resoluciones de pantalla............................................................................................15
1.2.7 Aplicación de gestión de preferencias visuales.....................................................................15
1.3 Definición de metodología y herramientas..................................................................................16
1.4 Conclusiones del capítulo...........................................................................................................18
CAPÍTULO 2: IMPLEMENTACIÓN DE SOLUCIONES...............................................................................19
2.1 Errores en comparticiones CIFS en el PCManFM.......................................................................19
Adicionando funcionalidad de montar dispositivos de red.............................................................21
Adicionando código a Libfm..........................................................................................................25
Adicionando código a PCManFM..................................................................................................27
2.2 Errores en opciones Hibernar o suspender.................................................................................29
Adicionando método isEnoughSwapToHibern()............................................................................29
Modificando método check_available_actions()............................................................................30
2.3 Aplicación para la gestión de las distribuciones de teclado.........................................................30
2.4 Soporte para impresora modelo HP LaserJet 2300....................................................................32
2.5 Aplicación para la gestión del soporte de proxy..........................................................................33
2.6 Salvar resoluciones de pantalla..................................................................................................36
2.7 Aplicación de gestión de preferencias visuales...........................................................................36
1
2.8 Otras modificaciones...................................................................................................................37
2.8.1 Menú Inicio/Preferencias......................................................................................................37
2.8.2 PC ManFM...........................................................................................................................37
2.8.3 /home/[usuario].....................................................................................................................37
2.8.4 Inicio de sesión.....................................................................................................................37
2.9 Conclusiones del capítulo...........................................................................................................38
CAPÍTULO 3: REALIZACIÓN DE PRUEBAS..............................................................................................39
3.1 Errores en comparticiones CIFS en el PCManFM.......................................................................39
3.2 Errores en opciones Hibernar o suspender.................................................................................42
3.3 Aplicación para la gestión de las distribuciones de teclado.........................................................42
2.4 Soporte para impresora modelo HP LaserJet 2300....................................................................45
2.5 Aplicación para la gestión del soporte de proxy..........................................................................45
2.6 Salvar resoluciones de pantalla..................................................................................................46
2.7 Aplicación de gestión de preferencias visuales...........................................................................47
2.8 Conclusiones del capítulo...........................................................................................................47
CONCLUSIONES ...................................................................................................................................... 48
RECOMENDACIONES...............................................................................................................................49
REFERENCIAS BIBLIOGRÁFICAS............................................................................................................50
BIBLIOGRAFÍA........................................................................................................................................... 54
ANEXOS..................................................................................................................................................... 55
GLOSARIO DE TÉRMINOS........................................................................................................................75
2
INTRODUCCIÓN
Según la ley de Moore (Gordon Moore 2005), formulada en 1965, “cada veinticuatro meses se
duplicará el número de transistores en un circuito integrado”, por lo que las computadoras cada dos años
han multiplicado al doble su capacidad de procesamiento y han dividido entre dos el valor de su costo de
fabricación, lo que ha impuesto un vertiginoso ritmo de producción. En 1995, Niklaus Wirth (Ziff Davis
1996b) planteó que el hardware se ha hecho más rápido con el tiempo, y algo de ese desarrollo está
cuantificado por la Ley de Moore, pero anota que esto no implica que el trabajo se esté haciendo más
rápido. Bill Gates negó los beneficios de la Ley de Moore años más tarde, proponiendo una variante de la
ley de Wirth, llamada Gates Law (Ley de Gates)(Eric Raymond [no date]), la cual sugiere que la velocidad
del software comercial generalmente disminuye en un 50% cada 18 meses.
Como consecuencia de las leyes explicadas anteriormente, se produce el software bloat3, dando paso
al fenómeno conocido como obsolescencia programada. Ambos han provocado que las computadoras
sean desechadas cada vez con menos tiempo de uso en los países desarrollados; pero Cuba, como país
tercermundista, posee una economía que no puede soportar este modelo consumista, situación que se
encuentra agravada por el bloqueo económico impuesto por parte de Estados Unidos. Por tal motivo, las
computadoras deben explotarse el máximo de tiempo posible. Esto supone un problema, ya que la
sociedad cubana pretende informatizarse, pero cada vez el software actualizado requiere más capacidad
de procesamiento, almacenamiento, etc. Añadido a esto, la isla ha planteado desde el 2004 el proceso de
migración paulatina de los Organismos de la Administración Central del Estado (OACE), con el reto
adicional de que las distribuciones de GNU/Linux más difundidas, como son Ubuntu, Fedora, OpenSuse,
Debian, RedHat, también se rigen por los parámetros dictados en el mercado internacional de hardware y
software.
Por todo lo planteado anteriormente, surge Nova Ligero (sistema operativo desarrollado por un grupo
de estudiantes y profesores de la Universidad de las Ciencias Informáticas (UCI)) como alternativa de
3 Se refiere a la creciente complejidad del software. Las aplicaciones y sistemas operativos modernos son mucho más grandes en tamaño y complejidad, comparados al software en computadoras personales a finales de los '70 y principios de los '80. (Ziff Davis 1996a)
3
código abierto, que soporta la migración, y además se encuentra enfocado específicamente a las
computadoras cubanas con bajas prestaciones .
Como parte del proceso de pruebas, el proyecto Nova Ligero ha sido desplegado en los Joven Club de
Computación de las provincias Sancti Spíritus y Ciego de Ávila, el Parque Zoológico de la provincia Ciego
de Ávila, las computadoras destinadas a la docencia de la Facultad 1 de la UCI, y se está realizando una
versión como sistema operativo personalizado para utilizarse en el proceso eleccionario que se llevará a
cabo en el país. Este sistema operativo, al igual que el resto de los procesos de desarrollo que se
desenvuelven dentro de la UCI, tiene como parámetro indispensable la liberación del producto por la
empresa aseguradora de la calidad del software: Calisoft4. El proceso de retroalimentación con los
involucrados antes mencionados, de conjunto con las no conformidades detectadas por el proceso de
revisión de Calisoft, han dado como resultado un grupo de obstáculos que atentan contra el correcto
funcionamiento del producto resultante. Una gran cantidad de proyectos que desarrollan software libre han
realizado este proceso en incontables ocasiones, pero no lo han documentado para la prevención de
futuros errores. La ausencia de la completa documentación, la no realización del proceso ingenieril y la
falta de implementación de las soluciones más óptimas a las dificultades encontradas, impiden que Nova
Ligero sea un producto avalado por la empresa Calisoft, lo que constituye la situación problemática de la
presente investigación. Para llegar a la búsqueda de una solución a esta situación, se plantea el
problema científico ¿Cómo solucionar los errores detectados por la comunidad de usuarios y Calisoft en
Nova Ligero 3.0?
Como objeto de estudio se determinaron los Sistemas Operativos con Entornos de Escritorio más
reconocidos actualmente, especificándose como campo de acción el Sistema Operativo Nova Ligero 3.0,
sobre el que se trabajará.
El objetivo general de la presente investigación será: Solucionar los errores detectados por la
comunidad de usuarios y Calisoft en Nova Ligero 3.0, teniendo como objetivos específicos:
4 Empresa cubana que brinda servicios de pruebas de calidad a productos de software. Entre estos se encuentran: pruebas de liberación, certificación de productos, sellos de calidad, auditorías, revisiones, diagnósticos, etc. (CALISOFT 2009)
4
1. Analizar causas y posibles soluciones de cada dificultad encontrada.
2. Diseñar e implementar las soluciones elegidas.
3. Realizar pruebas de caja negra a las correcciones implementadas.
Con el propósito de dar cumplimiento a los objetivos planteados se hace necesario realizar las
siguientes tareas:
1. Ponderar la criticidad de las dificultades encontradas.
2. Estudiar los fundamentos teóricos de cada problema.
3. Proponer un diseño de clases para cada solución seleccionada.
4. Comprobar mediante pruebas las soluciones implementadas.
La presente investigación está sustentada sobre la base de la utilización de diferentes métodos
científicos. Como métodos teóricos se emplearon el Analítico-Sintético, permitiendo dividir mentalmente
el fenómeno y establecer la unión entre las partes previamente analizadas, y la Modelación para lograr
una estructura que permita predecir la respuesta del sistema a los cambios realizados. Como método
empírico, se utilizó la Observación para comprobar si en las pruebas realizadas se alcanzaba el resultado
esperado.
El cumplimiento de todas las tareas propuestas permitirá ofrecer un producto que posea una
documentación actualizada de los errores más críticos que puedan surgir durante la utilización del mismo,
que cuente con la explicación detallada de todo el proceso ingenieril realizado y la forma de implementar
las soluciones, y se encuentre avalado por una empresa de prestigio y externa a la institución. Por todo lo
anteriormente expuesto, se determina la idea a defender de que la presente investigación posiblemente
contribuirá a la solución de los errores detectados por la comunidad de usuarios y Calisoft en el sistema
operativo Nova Ligero 3.0.
El presente documento cuenta con las secciones Glosario de términos, Referencias bibliográficas,
Bibliografía y Anexos; y tres capítulos organizados de la siguiente forma:
CAPÍTULO I: “Estudio del estado del arte”: Se presentan propuestas de aplicaciones que puedan
apoyar la erradicación de los errores detectados por la comunidad de usuarios y Calisoft y se seleccionan
5
las posibles soluciones, estableciendo el orden de corrección de estos según su criticidad en Nova Ligero
3.0. Además se determinan las herramientas, la metodología y los lenguajes que se utilizan para el
proceso de desarrollo de las soluciones.
CAPÍTULO II: “Diseño e implementación de soluciones”: Se presentan los procedimientos a realizar y
los componentes a modificar, para dar solución a los errores detectados, asegurando su correcta
documentación con el objetivo de brindar facilidades de mantenimiento al producto Nova Ligero 3.0.
CAPÍTULO III: “Realización de pruebas”: Se presenta el análisis de los resultados alcanzados de la
aplicación de las pruebas de software a Nova Ligero 3.0.
6
CAPÍTULO 1: ESTUDIO DEL ESTADO DEL ARTE
En el presente capítulo se mostrará una introducción al estudio de las herramientas, metodología y
lenguajes de programación a utilizar en el desarrollo de las aplicaciones requeridas. Seguidamente se
procederá a realizar una ponderación de errores, que consiste en asignar valores de criticidad a las
dificultades encontradas con el fin de hallar aquellas que necesitan una solución con mayor prioridad; para
ello serán numeradas desde uno en adelante, donde mientras menor sea el número, mayor será la
prioridad asignada. Luego se analizarán las posibles soluciones a cada unos de los problemas
encontrados, para determinar en las conclusiones del capítulo qué solución es la más propicia para cada
una de las dificultades.
1.1 Ponderación de criticidad de errores
Cuando se cuenta con varios problemas a resolver, es sabio asignarle un valor de criticidad a cada uno,
para saber cuál de ellos solucionar primero; luego, dividir este problema en otros más pequeños, para
poder darle respuesta por partes.
1. Errores en comparticiones CIFS5 en el PCManFM
2. Errores en opciones Hibernar o suspender del entorno de escritorio
3. Ausencia de una aplicación eficiente de gestión de distribuciones de teclado
4. Ausencia de soporte para impresoras modelo HP LaserJet
5. Ausencia de una aplicación para el soporte de proxy6 en el entorno de escritorio
6. Error al guardar resoluciones de pantalla del monitor
5 Siglas de Common Internet File System, en español Sistema de Archivos Comunes de Internet. SMB fue originalmente inventado por IBM, pero la versión más común es esta, renombrada por Microsoft en 1998 con características que incluyen soporte para enlaces simbólicos, enlaces duros, y mayores tamaños de archivo. (Wikipedia 2012s)
6 Programa o dispositivo que realiza una acción en representación de otro. Esta situación estratégica de punto intermedio suele ser aprovechada para soportar una serie de funcionalidades, aunque su finalidad más habitual es la de servidor proxy, que consiste en interceptar las conexiones de red que un cliente hace a un servidor de destino. (Wikipedia 2012q)
7
7. Ausencia de una aplicación de gestión de preferencias visuales del escritorio
8. Otras correcciones de menor criticidad
1.2 Análisis de posibles soluciones
1.2.1 Errores en comparticiones CIFS en el PCManFM
El programa presenta problemas a la hora de montar dispositivos de almacenamiento como discos
compactos (CDs) y dispositivos de almacenamiento por la red (ftp7, sftp8, samba, etc...).
En el proyecto LXDE (http://www.sourceforge.net/projects/lxde), para la creación del manejador de
ficheros PCManFM no existe una librería para el manejo de las funcionalidades principales, como en el
caso de otros entornos de escritorio como Gnome, y KDE (MACÍAS BRUZZONE 2000). Usando GIO9, se
creó una librería llamada LibFM (RENDLE 2010), que cumple con estas funciones, y maneja todas las
acciones que realiza el manejador. (Ver Ilustración 1).
7 Acrónimo de “File Transfer Protocol”, traducido al español como “Protocolo de Transferencia de Ficheros”. Es un protocolo de red para la transferencia de archivos entre sistemas conectados a una red TCP (acrónimo de “Transmission Control Protocol”, traducido al español como “Protocolo de control de transmisiones”), basado en la arquitectura cliente-servidor.
8 Acrónimo de “Secure File Transfer Protocol”, traducido al español como “Protocolo de Transferencia Segura de Ficheros”. Es un protocolo del nivel de aplicación que proporciona la funcionalidad necesaria para la transferencia y manipulación de archivos sobre un flujo de datos fiable.
9 Librería que se esfuerza por brindar una API (Acrónimo de “Application Programming Interface”, traducido al español como “Interfaz de programación de aplicaciones” (Wikipedia 2012j)) VFS (Acrónimo de “Virtual File System”, traducido al español como “Sistema de archivos virtual” (Wikipedia 2012t)) moderno y fácil de usar, que se encuentre en el nivel adecuado en la pila de la biblioteca. El objetivo es superar las deficiencias de GnomeVFS (Wikipedia 2012g) y que la API proporcionada sea tan buena que los desarrolladores la prefieran a las llamadas primas de POSIX (Wikipedia 2012n).
8
Posible solución:
Hacer funcionar la aplicación PCManFM desde una terminal o CLI10 y detectar los errores ocurridos,
para acceder al código fuente y modificarlo.
1.2.2 Errores en opciones Hibernar y Suspender
En el sistema operativo ocurre el error de que en algunas ocasiones el equipo hiberna cuando lo
selecciona el usuario y en otras ocasiones no lo hace, desconociéndose por parte de los usuarios el
motivo por el que sucede esto.
Para que una computadora con un sistema operativo de código abierto pueda hibernar, todos los
procesos que se encuentren en ejecución, deben ser guardados en el disco duro, por tanto se debe
comprobar que las memorias RAM11 y SWAP12 (suponiendo que el sistema operativo cuente con la misma
y tenga configurado su soporte) usadas puedan ser almacenadas ambas en la memoria SWAP disponible,
lo que permite proteger la información de forma que cuando el usuario acceda de nuevo al equipo,
parezca que este último no ha sido apagado (GONZÁLEZ DUQUE 2008). Debe cumplirse una condición
para que la computadora sea capaz de hibernar o suspenderse, la cual se expresa mediante la fórmula:
10 Acrónimo de “Command Line Interface”, traducido al español como “Interfaz de línea de comandos”.11 Acrónimo de “Random Access Memory”, traducido al español como “Memoria de acceso aleatorio”. Es la
memoria desde donde el procesador recibe las instrucciones y guarda los resultados. (Wikipedia 2012k)12 Es una zona del disco (un fichero o partición) que se usa para guardar las imágenes de los procesos que no han
de mantenerse en memoria física. (Wikipedia 2012d)
9
Ilustración 1: Componentes LibFM y
PCManFM para comparticiones CIFS
RAMusadaSWAPusadaSWAPdisponible
Donde RAMusada representa la cantidad de esta memoria que está usando el equipo en el momento de
hibernar, SWAPusada representa la cantidad de esta memoria que se encuentra en uso en el momento de
hibernar, y SWAPdisponible representa la cantidad restante de esta memoria de la que dispone el equipo para
almacenar las dos anteriores.
Cuando el usuario decide apagar el equipo, el paquete guano-sesion muestra una pantalla con las
acciones de las que es capaz el sistema, entonces el primero selecciona la opción que desea, y guano-
session envía un mensaje usando dbus13 al paquete HAL14, para que este se encargue de comunicarse
con el hardware (ver Ilustración 2).
Posible solución 1:
Agregar un parche de código al paquete guano-session-0.9.12, el mismo se encontrará en el directorio
debian/patches/debian-changes-0.9.10, y consiste en la adición del método
isEnougthSwapToHibern(), y la modificación del método check_available_actions(). El primer método
devolverá un valor verdadero si el equipo puede hibernar y valor falso si no puede. El segundo método se
modificará para que si el equipo puede hibernar, muestre todas las opciones, y sino, solamente muestre
13 Acrónimo de “Desktop Bus”. Es un sistema de comunicación entre procesos (IPC), desarrollado como parte del proyecto freedesktop.org para aplicaciones de software con el fin de comunicarse entre sí. (Wikipedia 2012c)
14 Proyecto de software que provee una capa de abstracción de hardware para sistemas Unix, que actualmente está descontinuado en sistemas GNU/Linux, y su funcionalidad se ha incorporado a udev. (Wikipedia 2011c)
10
Ilustración 2: Comunicación entre paquetes guano-session
las opciones de apagar o reiniciar.
Posible solución 2:
Arreglar el paquete que gestiona la acción de hibernar o suspender, proceso que varía en dependencia
del hardware utilizado y se hace complejo debido a que no se cuenta con todo el parque tecnológico
desplegado en Cuba para realizar las pruebas pertinentes sobre el mismo.
Posible solución 3:
Al crear las particiones, se debe asignar de tamaño a la SWAP el doble de capacidad de la memoria
RAM actual, asegurando de esta forma que, de utilizarse toda la memoria RAM, quede espacio libre para
lo que ocupa la SWAP, y aún más de reserva. Este proceso es de práctica muy común entre los usuarios
Linux; aunque no garantiza la solución del problema, se debe tener en cuenta la Posible Solución 1.
1.2.3 Aplicación de gestión de distribuciones de teclado
Para la gestión de las distribuciones de teclado el entorno de escritorio cuenta con una aplicación, la
cual no funciona correctamente, pues no permite guardar las configuraciones de teclado que se le asignan
al sistema. Para la propuesta de solución de esta dificultad, se realizará una investigación de aplicaciones
similares a las que se encuentra en el sistema actualmente, existentes en otros entornos de escritorio,
para determinar las características de las mismas.
En el entorno de escritorio Gnome15 existe una herramienta de administración de opciones del teclado,
llamada gnome-keyboard-propierties (Ver Ilustración 3).
15 Entorno de escritorio e interfaz gráfica de usuario desarrollado por el Proyecto GNOME, con una liberación inicial el 3 de marzo de 1999, encontrándose actualmente en su liberación estable 3.4. Compuesto completamente de software libre y de código abierto. (MACÍAS BRUZZONE 2000)
11
Esta aplicación cuenta con las siguientes características:
• Establecer el idioma del teclado para la marca y modelo del teclado que se está usan-do. Esto
permite usar las teclas multimedia especiales y mostrar los caracteres correctos.
• Separar la distribución de teclado para cada ventana, por lo que cambiar a una distribución
diferente sólo afecta a la ventana actual. Esto permite teclear con una distribución de teclado en ruso
una palabra en un procesador de textos, después cambiar al navegador web y teclear con una
distribución de teclado en inglés, por ejemplo.
• Alternar entre las distribuciones de teclas seleccionadas para cambiar los caracteres que produce
el teclado cuando se teclea. Es posible añadir y eliminar distribuciones, pueden existir hasta cuatro
distribuciones.
• Restaurar predeterminados, restablece los ajustes de distribución de teclado a su estado inicial
para el sistema y la configuración regional.
12
Ilustración 3: gnome-keyboard-propierties
El entorno de escritorio XFCE16 cuenta con una herramienta que permite configurar el teclado, llamada
fbxkb, la misma muestra una bandera del teclado actual en el área de la bandeja de tareas y permite
cambiar a otra mediante un click del mouse.
El entorno de escritorio KDE17 cuenta con una herramienta similar llamada KDE keyboard tool, con una
serie de preferencias que requieren configuraciones adiciones.
Los sistemas operativos Linux poseen por defecto un programa llamado setxkbmap (xfree86.org [no
date]), el cual es el sistema de teclado X11 por defecto y es muy personalizable, aunque presenta el
inconveniente de que no cuenta con interfaz visual para su manejo, sino que se debe especificar el
comando y sus opciones mediante la consola. También contiene un manual que puede ser invocado por
esta misma vía: man setxkbmap.
Posible solución:
La aplicaciones pertenecientes a los entorno de escritorio de Gnome y KDE consumen una cantidad de
memoria en su ejecución superior al deseado para el entorno de escritorio Guano, mientras que la
aplicación perteneciente al entorno de escritorio XFCE no brinda las opciones que brindan estas. Por tanto
se propone la creación de una nueva aplicación que consuma poca memoria y cuente con las
funcionalidades principales de las aplicaciones de Gnome y KDE.
1.2.4 Soporte para impresoras HP LaserJet
Cuando se intenta la conexión física de una impresora de la familia HP, específicamente la modelo
LaserJet 2300, el sistema no la reconoce, pues no cuenta con el soporte para la misma.
Para que el sistema pueda imprimir cuando se conecta una impresora al equipo, el mismo debe
16 Entorno de escritorio de software libre que realizó su última liberación estable el 16 de enero de 2011, escrito en C y GTK+ 2. Se propone ser rápido y ligero, sin dejar de ser visualmente agradable y fácil de usar. (MACÍAS BRUZZONE 2000)
17 Entorno de escritorio contemporáneo para estaciones de trabajo Unix. Cumple con la necesidad de un escritorio amigable para estaciones de trabajo Unix. (MACÍAS BRUZZONE 2000)
13
reconocerla. Existe un programa que gestiona la administración de estos equipos que se encuentren
disponibles. Este se llama CUPS18 y es un sistema de impresión modular para sistemas operativos de tipo
Unix que permite que un computador actúe como servidor de impresión (Ecured 2002).
Existen varios paquetes, como foo2zjs y foomatic-db, que contienen ficheros de extensión .ppd19.
Cada uno de los mismos, contiene dentro un árbol en formato xml que cuenta con las características de
cada equipo. Cuando uno de estos paquetes de instala, al iniciar CUPS, la lista de impresoras disponibles
se actualiza con todas las que existen en este nuevo, y se permite añadirlos.
Cuando un usuario hace una petición de impresión desde cualquier programa, el documento se envía a
una cola de impresión del sistema, donde se verifica que el mismo se encuentre en codificación
PostScript (Wikipedia 2012o), la cual es la que se establece por defecto generalmente en los sistemas
UNIX; de no ser así, el documento es convertido y luego se verifica que la impresora maneje este formato;
de lo contrario se utiliza el GhostScript (SUSE LINUX 2012) para establecer la compatibilidad. Pero para
realizar este proceso, primeramente CUPS debe verificar que la impresora a la que se envía la petición
existe por defecto o en los paquetes instalados (ver Ilustración 4).
Posible solución:
Añadir a los paquetes foo2zjs y foomatic-db el soporte para estas impresoras.
18 Acrónimo de “Common UNIX Print System”, traducido al español como “Sistema de impresión común de UNIX”.19 Acrónimo de “PostScript Printer Description”, traducido al español como “Descripción de impresoras PostScript”.
14
Ilustración 4: Comunicación CUPS - paquetes
1.2.5 Soporte para proxy
En el Sistema Operativo Nova Ligero no existe un programa que gestione la existencia de proxies. El
Sistema Operativo ZevenOS20 utiliza un programa llamado lx-proxy, que permite la existencia de los
mismos, pero funciona mediante una CLI y no contiene una interfaz gráfica.
Posible solución 1:
Utilizar el programa existente en el entorno de escritorio. Esta solución cuenta con la desventaja de que
el sistema operativo intenta ser lo más agradable posible para el usuario, y una interfaz de línea de
comandos puede ser un impedimento para este objetivo.
Posible solución 2:
Añadir al programa existente una interfaz gráfica de usuario (GUI), para lograr la mejor usabilidad del
programa por parte de los usuarios.
1.2.6 Salvar resoluciones de pantalla
En el sistema, actualmente no se puede realizar el cambio de resoluciones de escritorio eficazmente,
debido a que una vez reiniciada la máquina, no se guarda la resolución escogida anteriormente, y se
toman por defecto los valores 800 x 600 píxeles. La aplicación por defecto para esta gestión en el entorno
de escritorio LXDE se llama lxrandr, y la misma guarda las configuraciones en el fichero autostart en el
directorio /home del usuario.
Posible solución:
Utilizando el programa lxrandr, salvar en el directorio autostart del directorio home del usuario los
valores de la resolución en el momento que se modifican.
1.2.7 Aplicación de gestión de preferencias visuales
Nova Ligero, se plantea ser un sistema operativo independiente, pero carece de una identidad propia;
20 ZevenOS es una distribución GNU/Linux con un enfoque en un sistema rápido y fácil de usar con un toque de BeOS (Wikipedia 2012a). Su objetivo es trabajar en ordenadores portátiles más antiguos y computadoras con baja velocidad de la CPU y la memoria con soporte multimedia completo. (ZevenOS 2008)
15
por lo tanto, es necesaria la creación de uno o varios paquetes que contengan los elementos que brinden
propiedades propias del mismo (fondo de escritorio, tema de iconos, tema de ventanas, salvapantalla,
etc.).
Posible solución:
Crear los paquetes necesarios para proveer la identidad del sistema operativo.
1.3 Definición de metodología y herramientas
Como metodología de desarrollo de software21 se utilizará la metodología ágil OpenUP22, la cual
constituye una alternativa eficaz para proyectos pequeños y con pocos recursos, en los que se aprecia un
desarrollo ágil, iterativo e incremental y cuenta con una personalización realizada para el trabajo en el
proyecto productivo Nova (FERNÁNDEZ DEL MONTE, ALBO CASTRO 2011).
Como herramienta de modelado CASE23 se utilizará el Visual Paradigm, la cual permite la
representación gráfica en lenguaje UML24 del ciclo de vida completo del desarrollo de software y
constituye una aplicación open source25 de probada utilidad para el analista y diseñada para la
construcción de sistemas de forma confiable a través de la utilización de un enfoque orientado a objetos.
Como herramienta de programación se utilizará el Geany, basado en el editor de textos Scintilla. Como
lenguaje de programación, se utilizará C, lenguaje orientado a la implementación de Sistemas Operativos,
concretamente Unix, creado en 1972 por Dennis M. Ritchie en los Laboratorios Bell como evolución del
21 Marco de trabajo usado para estructurar, planificar y controlar el proceso de desarrollo en sistemas de información. (Wikipedia 2012l)
22 Acrónimo de “Open Unified Process”, traducido al español como “Proceso unificado abierto”. Es un método y proceso de desarrollo de software presentada por IBM (Acrónimo de “International Bussiness Machines” (Wikipedia 2012i)) en el año 2006 como producto de las mejores características de Rational Unified Process (RUP (Wikipedia 2012p)). (Wikipedia 2012m)
23 Acrónimo de “Computer Aided Software Engineering”, traducido al español como “Ingeniería de Software Asistida por Computadora”
24 Acrónimo de “Unified Modeling Language”, traducido al español como “Lenguaje de Modelado Unificado”. Junto al proceso de desarrollo de software RUP, constituyen la metodología estándar más utilizada para el análisis, implementación y documentación de sistemas orientados a objetos.
25 Denominación que describe la libertad de uso de un software determinado y el acceso a su código fuente.
16
anterior lenguaje B, a su vez basado en BCPL26. Es apreciado por la eficiencia del código que produce y
es el más popular para crear software de sistemas, aunque también se utiliza para crear aplicaciones
(Wikipedia 2012b). Además, en el desarrollo de algunas aplicaciones se utilizará Python, un lenguaje de
programación multiparadigma (soporta orientación a objetos, programación imperativa y, en menor
medida, programación funcional), interpretado de alto nivel cuya filosofía hace hincapié en una sintaxis
muy limpia y que favorezca un código legible; además de que posee una licencia de código abierto
(Wikipedia 2012r). También se utilizará XML27, un metalenguaje28 extensible de etiquetas desarrollado por
el World Wide Web Consortium (W3C29) simplificado y adaptado del SGML30 y permite definir la gramática
de lenguajes específicos (Wikipedia 2012e).
Para lograr la integración de las soluciones obtenidas al repositorio oficial del proyecto, será necesario
realizar un proceso de empaquetamiento de software para distribuciones GNU/Linux. Dicho proceso
consiste en proporcionar las aplicaciones en forma de paquetes. Estos paquetes están formados por los
programas ejecutables de la aplicación, así como por todas las bibliotecas de las que depende y otros
tipos de ficheros (como imágenes, ficheros de audio, traducciones y localizaciones, etc.), de forma que se
proporcionan como un conjunto. Las bibliotecas de las que depende el programa pueden haber sido
enlazadas tanto de forma dinámica como también estática. Por tanto, el usuario percibe al paquete como
un conjunto que representa al programa en sí, cuando en realidad incluye otros ficheros. En los sistemas
26 Acrónimo de “Basic Combined Programming Language”, traducido al español como “Lenguaje de Programación Básico Combinado”. Fue diseñado por Martin Richards de la Universidad de Cambridge en 1966 debido a las dificultades experimentadas con el lenguaje de programación CPL(Wikipedia 2011b) durante los años 60. (Wikipedia 2011a)
27 Acrónimo de “eXstensible Markup Language”, traducido al español como “Lenguaje de Marcas Extensible”.28 Forma de definir lenguajes para diferentes necesidades.29 El Consorcio World Wide Web (W3C) es una comunidad internacional donde las organizaciones Miembro,
personal a tiempo completo y el público en general trabajan conjuntamente para desarrollar estándares Web. Liderado por el inventor de la Web Tim Berners-Lee y el Director Ejecutivo (CEO) Jeffrey Jaffe, la misión del W3C es guiar la Web hacia su máximo potencial. (W3C 2012)
30 Acrónimo de “Standard Generalized Markup Language”, traducido al español como “Estándar de Lenguaje de Marcado Generalizado”. Sistema para la organización y etiquetado de documentos. La Organización Internacional de Estándares (ISO) normalizó este lenguaje ISO 8879:1986. Sirve para especificar las reglas de etiquetado de documentos y no impone en sí ningún conjunto de etiquetas en especial. (Wikipedia 2011d)
17
operativos Debian, o basados en él, el artefacto de salida de dicho proceso es un paquete de extensión
.deb, listo para ser instalado (Debian.org 2012).
1.4 Conclusiones del capítulo
A partir de la ponderación de criticidad realizada, es posible decir cuáles dificultades presentan mayor
prioridad para ser solucionadas. Partiendo del estudio de las causas de cada una de las mismas, se
puede afirmar que el sistema presenta un conjunto de errores, que pudieran ser corregidos de aplicar
alguna de las soluciones propuestas. Estas, se definen como:
1. En los acápites 1.3.1, 1.3.3, 1.3.4, 1.3.6, 1.3.7, se optará por la única solución posible, además
de que cumple con los requisitos establecidos por el sistema.
2. En el acápite 1.3.2, se optará por la Posible Solución 1, ya que es la que se encuentra al
alcance de las posibilidades actuales del país, y se carecen de los medios para poner en práctica la
otra solución.
3. En el acápite 1.3.5, se optará por la Posible Solución 2, ya que es la que más se aproxima a los
objetivos del sistema operativo que se está implementando.
18
CAPÍTULO 2: IMPLEMENTACIÓN DE SOLUCIONES
Un error frecuente en el desarrollo de software libre es la no documentación de los cambios y
aplicaciones que se le ofrecen a la comunidad (Free Software Foundation 2012). Mediante un proceso de
organización y documentación de cada una de las soluciones propuestas en el presente capítulo, se
pretende evitar esta mala práctica, brindando el procedimiento a realizar y los componentes a modificar,
para facilitar el trabajo de las personas que vayan a realizar alguna modificación a estas soluciones,
utilizar el código, o usar la investigación como manual para la solución de errores similares a los aquí
descritos. Por tanto, se procede a identificar los casos de uso que respondan a los requisitos funcionales
que deben ser modificados para corregir las dificultades encontradas.
2.1 Errores en comparticiones CIFS en el PCManFM
Los problemas presentados por la aplicación se evidencian en el error de implementación de los
requisitos funcionales:
• Montar volumen de red.
• Desmontar volumen de red.
• Montar medio extraíble.
• Desmontar medio extraíble.
• Montar dirección.
• Extraer medio extraíble.
Estas funcionalidades se cumplen, modificando los casos de uso (CU) siguientes:
19
Estas modificaciones se evidencian, añadiendo las siguientes funcionalidades, que el programa no
presentaba al inicio:
•Montar dispositivos de almacenamiento por la red (ftp, sftp, samba, etc...) mediante el uso de URI31.
• Visualizar dispositivos de almacenamiento por la red en el panel izquierdo del gestor (ver
Ilustración 5).
• Cuando se montaba un dispositivo de red, el programa ejecutaba la operación sin errores, añadía
el dispositivo al panel izquierdo junto a los demás, para su mejor acceso por parte del usuario; además
de brindar la posibilidad de desmontar mediante la acción de clic sobre un triángulo en el mismo.
Estas trajeron consigo el siguiente error:
En los casos donde se añadía un volumen o dispositivo removible (cd, dvd,stick memory, etc...), se
cerraba sin previo aviso después de correr varias instancias, dejando la siguiente salida de error (Ver
Ilustración 6):
31 Acrónimo de “Uniform Resource Identifier”, traducido al español como “Identificador uniforme de recurso”. Es una cadena de caracteres corta que identifica inequívocamente un recurso (servicio, página, documento, dirección de correo electrónico, enciclopedia, etc.).
20
Ilustración 5: Comparticiones Samba
PcmanFm es una aplicación que se encuentra compuesta por una librería Libfm a partir de su versión 0.5
en adelante; donde Libfm, que trabaja con GTK+32, encierra las principales funcionalidades que debe
tener un gestor de archivos genérico y PcmanFm contiene el código que construye solamente la interface
de usuario (GUI por sus siglas en inglés). Esta característica permite que el mantenimiento de esta
aplicación sea más fácil, modificando solamente Libfm; en este caso es la operación que se realiza. Para
ver el diagrama completo, ir a Anexo 4: Diagrama de clases LibFM (requiere ampliar la imagen).
Adicionando funcionalidad de montar dispositivos de red
En el código fuente de Libfm, se encuentra la carpeta src/gtk (Ver Ilustración 7), dentro de la misma se
encuentran los ficheros que contienen los componentes que manejan la interface o tienen algún
componente visual en la librería.
Entre estos archivos, se encuentran:
• fm-places-model.h, fm-places-model.c
• fm-places-view.h, fm-places-view.c
32 Conjunto de bibliotecas multiplataforma para desarrollar interfaces gráficas de usuario (GUI), creadas inicialmente para desarrollar el programa de edición de imágenes GIMP (Wikipedia 2012f), sin embargo actualmente bastante usadas por muchos otros programas en los sistemas GNU/Linux. (Wikipedia 2012h)
21
Ilustración 6: Errores de ejecución
• fm-gtk-utils.h, fm-gtk-utils.c
El código que se encuentra en los ficheros con el prefijo fm-places-model (ver Ilustración 8) es el
encargado de construir el componente GtkListStore33 (contenedor de los dispositivos). Aquí se adicionará
la mayor cantidad de código, ya que es donde se definen todas las características de los dispositivos
montados, así como su localización.
El código que se encuentra en los ficheros con el prefijo fm-places-view (ver Ilustración 9) es el
encargado de construir el componente GtkTreeView34 (interface del contendor de dispositivos); este
componente define la forma en que serán accedidos los dispositivos visualmente: cómo se muestran,
acceden, y desmontan los dispositivos al usuario.
33 Estructura de datos en forma de Lista que puede ser usada junto al componente de almacenamiento GtkTreeView.34 Componente de la librería Gtk-2.0 el cual se encarga de mostrar estructuras tanto listas como árboles.
22
El código que se encuentra en los ficheros con el prefijo fm-gtk-utils (ver Ilustración 10) contiene las
funciones primarias utilizadas por los ficheros anteriormente mencionados:
• Montar una dirección URI.
• Montar, desmontar y expulsar un Volumen (dispositivo de almacenamiento removible).
• Montar y desmontar un Mount (dispositivo de red virtual).
• Operaciones de copiar y mover archivos.
• Manejo de la papelera de reciclaje.
• Creación y manejo de ventanas de diálogos de errores o preguntas al usuario.
24
Ilustración 9: /src/gtk/fm-places-view.h
Adicionando código a Libfm
Las primeras funciones a modificar son las almacenadas en fm-gtk-utils.c. En este archivo se modifica
la estructura de datos que contiene los tipos de montajes que la aplicación puede manejar, estos se
encuentran en la estructura MountAction. Además, se modifica la función fm_do_mount, agregándole la
manera de manejar cada uno de los tipos de dispositivos previamente adicionados en MountAction.
(Anexo 5: Parche de código fuente)
El próximo paso es incorporar al contenedor de los dispositivos una manera de manejar los mismos.
Estas modificaciones se deben realizar a los archivos fm-places-model.h y fm-places-model.c (ver
Ilustración 11).
25
Ilustración 10: Fichero gtk-utils
En el archivo fm-places-model.h se adiciona a la estructura FmPlaceItem un objeto de tipo GMount
solamente para manejar los dispositivos de almacenamiento por la red, debido a que ya existe la
funcionalidad de reconocer los volúmenes o dispositivos extraíbles de almacenamiento; en la misma se le
adiciona al enumerativo FmPlaceType el tipo de dispositivo añadido antes en FmPlaceItem. (Anexo 6:
Parche de código fuente)
En el archivo fm-places-model.c se implementan las funciones add_mount, on_mount_removed:
encargadas de adicionar y borrar un dispositivo de almacenamiento por la red respectivamente. Se
modifican las funciones place_item_free, encargada de eliminar las instancias de los contenedores;
update_vol, encargada de actualizar el contenedor en materia de información: tipo de icono, nombre del
dispositivo, etc...; add_vol se encarga de añadir un volumen; find_vol se encarga de localizar un volumen
en un componente GtkTreeView; on_mount_added se ejecuta cuando se monta un dispositivo de
almacenamiento por la red y llama la función add_vol; fm_places_model_init se encarga de inicializar el
componente GtkListStore. (Anexo 2: Parche de código fuente).
El próximo paso es modificar e incorporar las funcionalidades necesarias al componente visual que se
encarga de mostrar los dispositivos. Estas modificaciones se deben realizar a los archivos fm-places-
view.h y fm-places-view.c (ver Ilustración 12).
Se modifica la función activate_row, encargada de gestionar las acciones que se pueden realizar con
26
un dispositivo; se modifica on_button_release, que se encarga de localizar qué fue activado cuando se
realiza un clic sobre el componente, debido a que el mismo componente contiene la funcionalidad de
acceder y desmontar en el evento on_click; se modifica place_item_get_menu, encargada de crear el
menú de funcionalidades a realizar sobre los dispositivos: ya sea montarlos, desmontarlos o expulsar; se
modifica además on_umount, encargada de realizar la función de montaje cuando se selecciona la
misma en el menú de acciones a realizar. (Anexo 3: Parche de código fuente)
Adicionando código a PCManFM
El código fuente de PCManFM en versiones anteriores a la 0.6 se encontraba en el mismo código
fuente de LibFM, en las versiones actuales se encuentra como un código fuente aparte. No obstante, en
el código fuente de LibFM se encuentra un demo de PCManFM con las mínimas funcionalidades.
Luego de realizar los cambios pertinentes en LibFM, es necesario modificar a PCManFM para que
utilice lo que se ha incorporado. Vale destacar que se daba por sentado que no se debería modificar el
código fuente de PCManFM, ya que este utiliza a LibFM como principal librería de funciones para su
construcción y habiendo hecho las modificaciones a LibFM directamente estas modificaciones tendrían
efecto en PCManFM. Esto no ocurre debido a errores de diseño del propio PCManFM: se encuentra
diseñado para que sólo exista una instancia del mismo, mediante el uso de sockets35, a los cuales se le
agregan funcionalidades según se soliciten en el momento de su ejecución; trayendo consigo la
problemática de que ciertos componentes se crean y se actualizan sólo cuando se crea la primera
instancia de PCManFM.
Para solucionar la problemática anterior se modifica el archivo main-win.c situado en la carpeta src/
dentro del código fuente (ver Ilustración 13), el código alojado en este archivo es el encargado de definir la
ventana principal del PcManFM junto a los componentes que la conforman.
35 Extremo de comunicación al que le puede ser asignado un nombre, que permite el intercambio de información punto a punto bilateral entre dos procesos.
27
28
29
Ilustración 13: Archivo main-win.c
2.2 Errores en opciones Hibernar o suspender
El problema presentado está dado por el requisito funcional:
• RF # 1: Permitir al sistema la opción de Hibernar o Suspender.
De dicho requisito se obtiene un caso de uso virtual, del que se derivan cuatro casos de uso
adicionales:
En este caso, solamente es necesario modificar dos de ellos, Hibernar sistema y Suspender sistema.
Basado en la investigación realizada en el Capítulo 1, se procede a adicionar el método
isEnoughSwapToHibern() al paquete guano-session, y modificar el método check_available_actions().
Adicionando método isEnoughSwapToHibern()
Se procede a la declaración de las variables, primeramente se declara un puntero que hace referencia
a la cabecera del fichero que contiene la información de la memoria, se declara un buffer de 255
caracteres para leer dicho fichero línea por línea, una variable de 100 caracteres para ir seleccionando las
palabras clave e ir asignando los valores correspondientes a las variables, que se declaran debajo.
Recorriendo cada línea, se comparan los valores correspondientes a las variables necesarias para
realizar la comprobación, y se almacenan los mismos en las variables declaradas anteriormente.
Mediante un cálculo aritmético se almacena la memoria total usada y se compara con la cantidad de
memoria SWAP disponible en el momento. El método devuelve 0 si no se puede hibernar, y 1 si se puede.
30
Modificando método check_available_actions()
A continuación, se procede a eliminar la sección de código que permite por defecto listar todas las
opciones, sin verificar primeramente si puede ser realizada la acción. Se adiciona una condición que
establece que si el sistema puede suspender o hibernar, se muestren estas opciones, de lo contrario no lo
harán, de esta forma se restringe al usuario solamente a las funcionalidades para las que esté capacitado
el sistema operativo en ese instante.
Para visualizar el código íntegro, ver Anexo 1: Parche de código fuente.
2.3 Aplicación para la gestión de las distribuciones de teclado
El panel del entorno de escritorio LXDE presenta un conjunto de plugins para brindarle otras
funcionalidades al mismo, una de ellas es un plugin para gestionar el manejo de los modelos de teclado y
los idiomas existentes. Esta aplicación no funciona adecuadamente (obsoleta, utiliza funciones ya
deprecadas de xkb36), no logra configurar el teclado según los idiomas existentes al no encontrarlos en el
sistema operativo.
Por lo tanto, es recomendable implementar una nueva aplicación para la configuración del teclado:
lxkb-config, basándose en otras aplicaciones existentes y cumpliendo con el estándar dictado por la
Freedesktop.org37. La misma, cuenta con los siguientes requisitos funcionales:
• RF # 1: Adicionar nueva distribución de teclado.
• RF # 2: Eliminar distribución de teclado existente.
• RF # 3: Establecer distribuciones de teclado predeterminadas.
• RF # 4: Probar distribución de teclado seleccionada.
• RF # 5: Aplicar configuración al sistema completo.
36 Acrónimo de “X keyboard extension”. Habilita un control del teclado más allá de lo que realiza el núcleo del sistema de ventanas X.
37 Proyecto que trabaja por la interoperatibilidad y la compartición de la tecnología base de los DE (Desktop Enviroment, Entorno de escritorio) para X Windows System (X11), tanto en GNU/Linux como en otros SO de tipo Unix.
31
• RF # 6: Aplicar configuración al usuario actual.
Para satisfacer estos requisitos funcionales, se determinan los casos de uso siguientes:
Esta aplicación accede al fichero xfree86.xml, que se encuentra en la ruta /usr/share/x11/xkb/rules/.
De él obtiene las distribuciones que se encuentran disponibles en el sistema operativo, y las muestra para
su selección en la aplicación LXKB-config. Si el usuario selecciona alguna opción, la herramienta utiliza
el comando setxkbmap (estudiado en el Capítulo 1 en el subepígrafe 1.2.3 Aplicación de gestión de
distribuciones de teclado) para realizar las modificaciones pertinentes en el sistema. Consiguiendo una
integración, el programa modifica el fichero autostart en la ruta /home/.config/, para que agregue en los
programas de inicio por defecto (Ver Ilustración 14).
En el proceso de creación del programa, se agrupan
los ficheros fuentes del mismo en una carpeta llamada
src/; los mismos importan las librerías necesarias para
el trabajo con la interfaz visual, entre otras opciones
(ver Ilustración 14).
32 Ilustración 14: Componentes de LXKB
El resultado final es un programa que cumple con las funcionalidades expresadas al comenzar el proceso
de diseño (Ver Ilustraciones 15 y 16).
2.4 Soporte para impresora modelo HP LaserJet 2300
Para la solución del problema, se identifica el requisito funcional:
• RF # 1: Imprimir documentos en impresora modelo HP LaserJet.
El mismo se satisface mediante la modificación del siguiente CU:
Utilizando el lenguaje XML se modifica el paquete foo2zjs y se le adiciona al mismo la información
33
Ilustración 15: LXKB-config Ilustración 16: LXKB-config
concerniente a las impresoras de modelo HP LaserJet, junto con la de otros modelos. En países con
conexión a Internet de banda ancha, este fichero contiene un enlace simbólico que permite descargar el
firmware de la impresora que se desea conectar al equipo. En Cuba, por no contar con estas condiciones,
se procedió a descargar todos estos paquetes, e incluirlos en el repositorio del sistema operativo, para
que pueda ser accesible por cualquier usuario que desee instalarlo. En la unión de este paquete y el
foomatic-db se encuentran todas las configuraciones de impresoras que obtiene el programa CUPS para
generar la lista de impresoras conocidas por el sistema (ver Ilustración 17).
34
Ilustración 17: Clases aplicación LXKB-config
Ilustración 18: Componentes CUPS
2.5 Aplicación para la gestión del soporte de proxy
Utilizando el lenguaje de programación Python en aras de acelerar el proceso de desarrollo, y teniendo
en cuenta que se trata de la aplicación Lxproxy, nativa del sistema operativo ZevenOS, que presenta
errores de ejecución y que la misma no se encontrará en ejecución en todo momento, lo que no atenta
contra el uso de poca memoria, se procede a programar la aplicación que permite la gestión de proxies en
el sistema.
Primeramente, se identifican los siguientes requisitos funcionales:
• RF # 1: Usar conexión directa a Internet.
• RF # 2: Configurar el proxy manualmente.
Los mismos se satisfacen mediante los casos de uso siguientes:
En el directorio raíz del
paquete Lxproxy existe el
fichero setup.py, el cual
contiene una clase llamada InstallAndUpdateDataDirectory, que se encarga de instalar el paquete en el
sistema. En el directorio bin, se encuentra el fichero lxproxy, el cual contiene una clase que es la
responsable de controlar las funcionalidades de mostrar la aplicación, cerrar, mostrar preferencias, etc. En
el directorio lxproxy, se encuentra el fichero de configuración de las preferencias (lxproxyconfig.py) y los
ficheros que inicializan las clases visuales con la ayuda de la librería GTK+ (AboutLxproxyDialog.py y
PreferencesLxproxyDialog.py) (ver Ilustración 19).
35
36
El resultado es una aplicación funcional que brinda solución al problema inicial (ver Ilustración 20).
37
Ilustración 19: Clases y ficheros Lxproxy
Ilustración 20: Interfaz de usuario Lxproxy
2.6 Salvar resoluciones de pantalla
Al seleccionar la opción de apagar o reiniciar el sistema, el mismo no almacena la configuración de
pantalla que se definió, siempre inicia el sistema con la resolución 800x600.
Esta situación arroja la definición del requisito funcional:
• RF # 1: Guardar resolución de pantalla
Y para dar solución al mismo, la presentación del siguiente caso de uso:
Existe una aplicación llamada lxrandr que gestiona las resoluciones de pantalla del sistema. Esto es un
frontend38 o interfaz para el comando xrandr, que permite modificar la resolución de pantalla y la tasa de
refresco39. Mediante código C, se crea un lanzador para xrandr en la carpeta /home/.config/autostart,
con la última configuración seleccionada por el usuario. Esta variante soluciona el problema para todas las
resoluciones posteriores, en caso de usarse una variable para guardar los valores seleccionados.
2.7 Aplicación de gestión de preferencias visuales
Se procede a la creación y empaquetamiento de las aplicaciones nova-artwort y nova-wallpapers. La
primera contiene un protector de pantalla con imágenes propias del sistema operativo y el logo del sistema
operativo, que será establecido como logo de inicio, configuraciones que se encuentran dentro de un
fichero en el directorio debian/. La segunda fue programada usando el lenguaje Python y contiene un
fichero de extensión .xml que se establece como fondo de escritorio dinámico que cada una cantidad de
tiempo determinada cambia automáticamente las imágenes de fondo de escritorio; las mismas también se
encuentran dentro de dicho paquete y se copian al directorio del sistema /usr/share/background.
38 Front-end y back-end son términos que se relacionan con el principio y el final de un proceso.39 El número de cuadros mostrados en un segundo, expresado en Hertzios. (Tschemig 2007)
38
2.8 Otras modificaciones
2.8.1 Menú Inicio/Preferencias
En las preferencias del menú Inicio existen dos opciones con el mismo nombre, que cumplen con las
mismas funciones, y existen otras dos opciones que cumplen con el mismo objetivo, pero tienen cambiado
el idioma del nombre en el menú (español e inglés).
La solución consiste en acceder al fichero donde se editan las preferencias de los usuarios (fichero que
se encuentra en el directorio home del usuario), y eliminar los ítems del menú que se encuentran
repetidos.
2.8.2 PC ManFM
El texto alternativo del botón “Añadir nueva pestaña” no se muestra.
La solución en este caso consiste en acceder al fichero que se encuentra dentro del paquete de fuentes
de PCManFM que crea las ventanas, y añadir el texto que corresponde al mensaje que se muestra
cuando se detiene el cursor del mouse sobre el mismo.
Otra solución posible consistiría en eliminar el botón, teniendo en cuenta que para obtener una nueva
pestaña se puede utilizar la combinación de teclas Ctrl + T.
2.8.3 /home/[usuario]
Las carpetas del home aparecen en inglés, incluso cuando se haya instalado el sistema en español.
La solución a este problema consiste en cambiar el nombre de esta carpeta en el directorio /etc/skel, y
luego aplicar un comando para que se actualicen los nombres de carpetas del escritorio.
2.8.4 Inicio de sesión
Se muestran las opciones al usuario de iniciar sesión por los escritorios KDE/Openbox,
GNOME/Openbox, Openbox session y sin embargo no se pueden brindar los servicios.
La integración con estos escritorios se tuvo en cuenta en la concepción inicial de entorno de escritorio,
39
pero luego no fue implementada, por lo que nunca existió, y por lo tanto, no podían funcionar. La solución
sería eliminar esas opciones del fichero desde donde se cargan automáticamente cuando inicia la
computadora.
2.9 Conclusiones del capítulo
Luego de implementadas, las soluciones propuestas son incorporadas a sus respectivos software. Los
paquetes resultantes son empaquetados, recompilados e incluidos como paquetes de software en los
repositorios de Nova40 en su versión 2011.
40 Repositorio: servidor en Internet donde se puede acceder al software que brinda la distribución. En el caso de Nova, el mismo se encuentra solamente a disposición de la UCI en el sitio: http://novarepo.uci.cu/nova.
40
Ilustración 21: Caso de Prueba basado en CU Montar dirección URI
CAPÍTULO 3: REALIZACIÓN DE PRUEBAS
Para dar garantía de que las dificultades existentes han sido solucionadas, y obtener el certificado de
calidad por parte de la empresa Calisoft, en el presente capítulo se diseñan una serie de casos de prueba
de caja negra que permiten comprobar que las soluciones implementadas han sido las correctas. Las
pruebas se realizarán en función de los casos de uso identificados en el capítulo anterior.
3.1 Errores en comparticiones CIFS en el PCManFM
En el capítulo 2 se detectaron seis casos de uso para dar respuesta a las dificultades planteadas:
• Montar volumen de red (RF # 1)
Para comprobar la correcta realización de este, se determinaron cinco escenarios (Montar dirección
smb, Intentar montar dirección smb incorrecta, Intentar montar dirección smb con campos vacíos, Montar
dirección sftp, Intentar montar dirección sftp con campos vacíos) y tres variables (Dirección de red,
Usuario, Contraseña), obteniéndose los resultados esperados y no arrojando No Conformidades41.
• Desmontar volumen de red (RF # 2)
Para comprobar la correcta realización de este, se determinaron dos escenarios (Desmontar volumen
de red mediante barra lateral izquierda, Intentar desmontar volumen de red mediante icono en el directorio
“/media” del navegador de archivos) y ninguna variable, obteniéndose los resultados esperados y no
arrojando No Conformidades.
• Montar medio extraíble (RF # 3)
Para comprobar la correcta realización de este, se determinaron dos escenarios (Montar medio en
dirección de memoria libre, Intentar montar medio en dirección de memoria ocupada) y ninguna variable,
obteniéndose los resultados esperados y no arrojando No Conformidades.
• Desmontar medio extraíble (RF # 4)
41 Una no conformidad ocurre cuando un producto o un proceso no cumple con lo establecido en las descripciones o en los requisitos funcionales descritos, que podría directa o indirectamente conducir al mal funcionamiento del programa, falta de aceptación de parte del cliente, o una combinación de éstos.
41
Condiciones de ejecuciónQue exista un navegador de archivos que soporte el protocolo de la dirección
SC Montaje de dispositivos
Escenario Descripción Usuario Contraseña Respuesta del sistema Flujo centralV
V
V V V
compartido compartido
V
V V V
compartido
V V V
********
V
V V V
Descripción generalEl caso de uso comienza cuando el usuario selecciona la opción de insertar una nueva dirección. A partir de ahí, analiza el tipo de dirección que se está insertandoY en función de eso el sistema responde.
Dirección URIEC 1.1 Montar
dirección URI correcta
El usuario inserta una dirección en la barra de direcciones de su navegador y el mismo le ofrece la localización donde se encuentra
1.1 El sistema evalúa el protocolo usado para procesar la dirección. Se verifica que es una dirección válida y se localiza la carpeta en el equipo.
1.0 El usuario inserta la dirección URI en el navegador de ficheros.
/home/[usuario]/Des
EC 1.2 Intentar montar dirección URI incorrecta
El usuario inserta una dirección en la barra de direcciones de su navegador y el mismo interpreta que la dirección no es válida
1.1 El sistema evalúa el protocolo usado para procesar la dirección. Se interpreta que la dirección no corresponde a ninguna carpeta del sistema de archivos.1.2 El sistema muestra un prompt con un mensaje de error
1.0 El usuario inserta la dirección URI en el navegador de ficheros.
/fgr/dd/ff
EC 2.1 Montar dirección smb
El usuario inserta una dirección en la barra de direcciones de su navegador y el mismo abre la carpeta.
1.1 El sistema evalúa el protocolo usado para procesar la dirección. Interpreta que se trata del protocolo samba.2.0 El sistema se conecta a dicha carpeta para identificar si necesita autenticación y muestra un prompt pidiendo la información de conexión.2.2 El navegador verifica los datos y abre la carpeta compartida.3.0 El navegador actualiza su barra lateral izquierda con la nueva compartición.
1.0 El usuario inserta la dirección samba en el navegador de ficheros.
2.1 El usuario inserta los datos de autenticación.
smb://10.34.5.24
EC 2.2 Intentar montar dirección smb incorrecta
El usuario inserta una dirección en la barra de direcciones de su navegador y el mismo interpreta que la dirección no es válida
1.1 El sistema evalúa el protocolo usado para procesar la dirección. Se interpreta que la dirección no es válida para este protocolo.1.2 El sistema muestra un prompt con un mensaje de error
1.0 El usuario inserta la dirección URI en el navegador de ficheros.
smb://150.250.254.255
EC 2.3 Intentar montar dirección smb correcta con campos vacíos
El usuario inserta una dirección en la barra de direcciones de su navegador pero los datos para acceder a la carpeta no son válidos
1.1 El sistema evalúa el protocolo usado para procesar la dirección. Interpreta que se trata del protocolo samba.2.0 El sistema se conecta a dicha carpeta para identificar si necesita autenticación y muestra un prompt pidiendo la información de conexión.2.2 El navegador verifica los datos y lanza un prompt con el error de que hay campos incorrectos.
1.0 El usuario inserta la dirección URI en el navegador de ficheros.
2.1 El usuario inserta el valor del campo usuario y deja en blanco el campo contraseña
smb://10.34.5.24
EC 3.1 Montar dirección sftp
El usuario inserta una dirección sftp en la barra de direcciones de su navegador y el mismo abre la carpeta.
1.1 El sistema evalúa el protocolo usado para procesar la dirección. Interpreta que se trata del protocolo sftp.2.0 El sistema se conecta a dicha carpeta muestra un prompt pidiendo la información de conexión.2.2 El navegador verifica los datos y abre la carpeta compartida.3.0 El navegador actualiza su barra lateral izquierda con la nueva compartición.
1.0 El usuario inserta la dirección samba en el navegador de ficheros.
2.1 El usuario inserta los datos de autenticación.
sftp://10.34.5.24
dairelys
EC 3.2 Intentar montar dirección sftp incorrecta
El usuario inserta una dirección en la barra de direcciones de su navegador y el mismo interpreta que la dirección no es válida
1.1 El sistema evalúa el protocolo usado para procesar la dirección. Se interpreta que es el protocolo sftp pero que la dirección no es válida para este protocolo.1.2 El sistema muestra un prompt con un mensaje de error
1.0 El usuario inserta la dirección URI en el navegador de ficheros.
sftp://150.250.254.255
EC 3.3 Intentar montar dirección sftp con datos de conexión vacíos
El usuario inserta una dirección en la barra de direcciones de su navegador pero los datos para acceder a la carpeta no son válidos
1.1 El sistema evalúa el protocolo usado para procesar la dirección. Interpreta que se trata del protocolo sftp.2.0 El sistema se conecta a dicha carpeta para identificar si necesita autenticación y muestra un prompt pidiendo la información de conexión.2.2 El navegador verifica los datos y lanza un prompt con el error de que hay campos incorrectos.
1.0 El usuario inserta la dirección URI en el navegador de ficheros.
2.1 El usuario inserta el valor del campo usuario y deja en blanco el campo contraseña
Sftp://10.34.5.24
dairelys
Para comprobar la correcta realización de este, se determinaron dos escenarios (Desmontar medio
mediante barra lateral izquierda, Intentar desmontar medio mediante icono en el directorio “/media” del
navegador de archivos) y ninguna variable, obteniéndose los resultados esperados y no arrojando No
Conformidades. (ver Ilustración 21)
• CU Montar dirección URI (RF # 5)
Para comprobar la correcta realización de este, se determinaron ocho escenarios (Montar dirección URI
correcta, Intentar montar dirección URI incorrecta, Montar dirección smb, Intentar montar dirección smb
incorrecta, Intentar montar dirección smb con campos vacíos, Montar dirección sftp, Intentar montar
dirección sftp con campos vacíos) y tres variables (Dirección URI, Usuario, Contraseña), obteniéndose los
resultados esperados y no arrojando No Conformidades. (ver Ilustración 22)
42
Ilustración 22: Caso de Prueba basado en CU Desmontar medio extraíble
El caso de uso comienza cuando el usuario selecciona la opción de desmontar el medio extraíble
Condiciones de ejecuciónQue se encuentre correctamente montado el dispositivo, sin errores.
SC Montaje de dispositivos
Escenario Descripción Respuesta del sistema Flujo central
Descripción general
EC 1.1 Desmontar medio mediante barra lateral izquierda
Se desmonta un medio extraíble previamente montado en el sistema de archivos usando el botón de desmontado de la barra lateral izquierda
1.1 El sistema localiza la dirección de memoria donde se encuentra montado el dispositivo y la libera.
1.2 El navegador actualiza el panel lateral para mostrar al usuario que el medio ha sido expulsado.
1.0 El usuario da click en el icono de triángulo que se encuentra al lado del nombre del dispositivo, localizados en el panel lateral izquierdo del navegador
EC 1.2 Intentar desmontar medio mediante icono en el directorio /media del navegador de archivos
Se desmonta un medio extraíble previamente montado en el sistema de archivos utilizando el menú contextual de la carpeta en el directorio /media o en el Escritorio del sistema de archivos
1.1 El navegador le muestra al usuario el menú contextual del medio.2.1 El sistema localiza la dirección de memoria donde se encuentra montado el dispositivo y la libera.2.2 El navegador actualiza el panel lateral para mostrar al usuario que el medio ha sido expulsado.
1.0 El usuario da click derecho en el icono que se encuentra en el escritorio o en el directorio media.2.0 El usuario selecciona la opción de Desmontar medio del menú contextual.
43
Ilustración 23: Caso de Prueba basado en CU Agregar nueva distribución
Condiciones de ejecución-
SC Adicionar nueva distribución de teclado
Escenario Descripción Disposición Variante txt_probar Respuesta del sistema Flujo centralV V
EEUU
V V V
EEUU á é í ó ú ñ
Descripción generalEl caso de uso comienza cuando el usuario selecciona una nueva distribución y su variante a utilizar por el teclado existente, y termina cuando el mismo puede probar o no el cambio.
EC 1.1 Adicionar distribución y variante sin probarlas
El usuario selecciona la distribución y luego la variante que desea y luego acepta los cambios sin probarlos.
0.0 El sistema muestra las distribuciones existentes.1.2 El sistema busca las variantes asociadas a esa distribución y las muestra.2.2 El sistema aplica los cambios correspondientes.
1.1 El usuario selecciona la distribución de teclado.2.1 El usuario selecciona la variante deseada y presiona la tecla aceptar.
Alternativa internacional (antigua us_intl)
EC 1.2 Adicionar distribución y variante probando los cambios efectuados
El usuario selecciona la distribución y luego la variante que desea y luego comprueba el cambio antes de dar click en aceptar.
0.0 El sistema muestra las distribuciones existentes.1.2 El sistema busca las variantes asociadas a esa distribución y las muestra.2.2 El sistema aplica los cambios correspondientes.
1.1 El usuario selecciona la distribución de teclado.2.1 El usuario selecciona la variante deseada e introduce el texto a probar en el campo “Probar distribución” y presiona la tecla aceptar.
Alternativa internacional (antigua us_intl)
• Extraer medio extraíble (RF # 6)
Para comprobar la correcta realización de este, se determinaron dos escenarios (Extraer medio,
Intentar extraer medio con dirección de memoria ocupada) y ninguna variable, obteniéndose los resultados
esperados y no arrojando No Conformidades.
3.2 Errores en opciones Hibernar o suspender
Fueron detectados para dar solución a esta dificultad, los siguientes casos de uso:
• Hibernar sistema (RF # 1)
• Suspender sistema (RF # 2)
Para realizar el proceso de pruebas de ambos casos de uso, se determinaron dos escenarios: Que el
equipo
pueda
llevar a
cabo la
opción
seleccionada (Hibernar o Suspender), o que no pueda. Para comprobar que la solución es la correcta, se
44
Ilustración 24: Caso de Prueba basado en CU Aplicar configuración a la sesión
Condiciones de ejecuciónQue exista al menos una variante insertada en la lista.
SC Aplicar configuración a la sesión
Escenario Descripción Respuesta del sistema Flujo central
Descripción generalEl caso de uso comienza cuando el usuario da click en el botón Aceptar de la pestaña principal del programa y termina con un mensaje o con el cierre del programa.
EC 1.1 Aplicar configuración correctamente seleccionando opción Aplicar
El usuario aplica los cambios que realizó y el sistema muestra un mensaje informando que los cambios se realizaron con éxito.
1.2 El programa verifica que las configuraciones sean válidas y las aplica al sistema. Muestra un mensaje informando que la configuración fue aplicada con éxito.
1.1 El usuario da click en el botón “Aplicar” de la ventana principal.
EC 1.2 Aplicar configuración incorrecta seleccionando opción Aceptar
El usuario intenta aplicar los cambios que realizó y el sistema muestra un mensaje informando que los cambios no se aplicaron.
1.2 El programa intenta verificar que las configuraciones sean válidas, pero encuentra que no lo son. Muestra un mensaje informando que la distribución no es válida.
1.1 El usuario da click en el botón “Aplicar” de la ventana principal.
EC 2.1 Aplicar configuración seleccionando opción Aceptar
El usuario acepta los cambios y la aplicación se cierra.
1.2 El programa aplica las configuraciones seleccionadas y se cierra.
1.1 El usuario da click en el botón “Aceptar” de la ventana principal.
procede a probar en un equipo que el sistema operativo suspenda e hiberne, teniendo resultados
satisfactorios.
3.3 Aplicación para la gestión de las distribuciones de teclado
Se detectaron en el capítulo anterior seis casos de uso para dar respuesta a las dificultades
planteadas:
• Agregar nueva distribución de teclado (RF # 1)
Para comprobar la correcta realización de este, se determinaron dos escenarios (Agregar distribución
correcta, Intentar agregar distribución existente42) y dos variables (Distribución, Variante), arrojando los
resultados esperados y ninguna No Conformidad. (ver Ilustración 23)
• Eliminar distribución seleccionada (RF # 2)
Para comprobar la correcta realización de este, se determinaron dos escenarios (Eliminar distribución
existente, Intentar eliminar única distribución existente) y dos variables (Distribución, Variante), arrojando
los resultados esperados y ninguna No Conformidad.
• Establecer distribución predeterminada (RF # 3)
Para comprobar la correcta realización de este, se determinaron un escenario (Establecer configuración
correctamente) y dos variables (Distribución, Variante), arrojando los resultados esperados y ninguna No
Conformidad.
• Probar distribución (RF # 4)
Para comprobar la correcta realización de este requisito, se procede a probar la aplicación que se ha
seleccionado escribiendo en el campo de texto, obteniendo un resultado favorable.
42 Si el usuario intenta agregar una distribución existente en la lista de las adicionadas, la misma se añade dos veces.
45
• Aplicar distribución al sistema (RF # 5)
Para comprobar la correcta realización de este, se determinó un escenario (Aplicar configuración
correctamente) y dos variables (Distribución, Variante), arrojando los resultados esperados y ninguna No
Conformidad.
• Aplicar configuración a la sesión (RF # 6)
Para comprobar la correcta realización de este, se determinó un escenario (Aplicar configuración
correctamente) y dos variables (Distribución, Variante), arrojando los resultados esperados y ninguna No
Conformidad. (ver Ilustración 26)
46
2.4 Soporte para impresora modelo HP LaserJet 2300
Se detectó en el capítulo anterior un caso de uso para dar respuesta a esta dificultad:
• Imprimir documento (RF # 1)
Para comprobar la correcta realización de este, se determinaron tres escenarios (Imprimir documento
correctamente, Imprimir en ausencia de drivers, Imprimir en ausencia de impresora) y ninguna variable,
arrojando los resultados esperados y ninguna No Conformidad. (ver Ilustración 27)
2.5 Aplicación para la gestión del soporte de proxy
Se detectaron en el capítulo anterior dos casos de uso para dar respuesta a esta dificultad:
• Usar configuración directa a Internet (RF # 1)
47
Ilustración 25: Caso de Prueba basado en CU Imprimir documento
Condiciones de ejecuciónQue exista una impresora conectada al equipo.
SC Imprimir documento
Escenario Descripción Respuesta del sistema Flujo central
Descripción generalEl CU de comienza cuando el usuario decide imprimir un documento, el sistema verifica que posee una impresora conectada y los drivers para usarla, y termina con el documento impreso.
EC 1.1 Imprimir documento correctamente
El documento seleccionado por el usuario es puesto en cola de impresión, el sistema verifica que existe impresora disponible e imprime el documento.
1.2 El sistema pone el documento en cola de impresión.
1.3 El sistema verifica que existe una impresora disponible, cuando la encuentra, le asigna la cola de impresión, y la misma imprime el documento.
1.1 El usuario selecciona la opción de imprimir el documento.
EC 1.2 Imprimir en ausencia de drivers
El documento seleccionado por el usuario es puesto en cola de impresión, el sistema verifica que existe una impresora conectada al equipo, pero no cuenta con la información ni drivers de la misma, y muestra un mensaje de error.
1.2 El sistema pone el documento en cola de impresión.1.3 El sistema verifica que existe una impresora conectada al equipo, pero CUPS no cuenta con la información referente a la misma.1.4 El sistema muestra un mensaje de error.
1.1 El usuario selecciona la opción de imprimir el documento.
EC 1.3 Imprimir en ausencia de impresora
El documento seleccionado por el usuario es puesto en cola de impresión, el sistema verifica si existe una impresora disponible, pero no existe ninguna, y muestra mensaje de error.
1.2 El sistema pone el documento en cola de impresión.1.3 El sistema verifica si existe una impresora conectada al equipo, pero no encuentra ninguna.1.4 El sistema muestra un mensaje de error.
1.1 El usuario selecciona la opción de imprimir el documento.
Para comprobar la correcta realización de este, se determinó un escenario (Obtener configuración por
defecto) y ninguna variable, arrojando los resultados esperados y ninguna No Conformidad.
• Usar configuración manual del proxy (RF # 2)
Para comprobar la correcta realización de este, se determinaron dos escenarios (Configuración de
proxy con datos correctos, Intento de configuración con datos incorrectos) y tres variables (HTTP-Proxy,
SHTTP-Proxy, FTP-Proxy), arrojando los resultados esperados y ninguna No Conformidad. (ver Ilustración
28)
2.6 Salvar resoluciones de pantalla
Se detectó en el capítulo anterior un caso de uso para dar respuesta a esta dificultad:
• Guardar configuración (RF # 1)
Para comprobar la correcta realización de este, se determinaron dos escenarios (Guardar configuración
correctamente, Intentar guardar configuración insatisfactoriamente) y ninguna variable, arrojando los
resultados esperados y ninguna No Conformidad.
48
Ilustración 26: Caso de prueba basado en CU Usar configuración manual
Object 7
2.7 Aplicación de gestión de preferencias visuales
Se procede a la instalación de los paquetes obtenidos en el Sistema Operativo Nova Desktop 2011, a la
comprobación de la instalación correcta de los mismos, comprobando que el cambio dinámico de fondos
de escritorio se realiza automáticamente, y el protector de pantalla es fácilmente configurable.
2.8 Conclusiones del capítulo
Se realizaron en total 17 casos de prueba basados en casos de uso, tomando en cuenta más de 34
escenarios de pruebas, con la intención de analizar la respuesta posible del sistema ante cada uno de los
mismos.
Mediante la realización de las pruebas anteriores, fue posible comprobar que la implementación
propuesta de las aplicaciones permite la erradicación de los errores iniciales.
49
CONCLUSIONES
A partir de la investigación realizada se arriban a las siguientes conclusiones:
Se analizaron las causas de cada dificultad encontrada y se concluye que estas se debían a
errores en el código fuente y ausencia de firmware para el hardware específico.
Se redefinió el diseño de varias aplicaciones que presentaban mal diseño de clases.
Mediante la corrección del código se erradicaron las dificultades existentes.
Las pruebas realizadas permitieron comprobar que las soluciones propuestas funcionan
correctamente.
50
RECOMENDACIONES
A pesar de que los objetivos de la presente investigación fueron satisfechos, no obstante se propone:
Realizar un rediseño del programa PCManFM y la librería LibFM.
Incluir las modificaciones realizadas en los repositorios de Nova y las próximas distribuciones.
Compartir las mejoras realizadas con la comunidad internacional.
51
REFERENCIAS BIBLIOGRÁFICAS
• CALISOFT, 2009. Calisoft. In: [online]. 2009. [Accessed 1 February 2012]. Available from: http://calisoft.uci.cu/index.php/servicios.
• ECURED, 2002. Common Unix Printing System - EcuRed. In: [online]. 8 January 2002. [Accessed 8 January 2002]. Available from: http://www.ecured.cu/index.php/Common_Unix_Printing_System.
• ERIC RAYMOND, [no date]. The Jargon File - Gates’s Law. In: The Jargon File, version 4.4.7 [online]. [Accessed 25 May 2012]. Available from: http://www.catb.org/jargon/html/G/Gatess-Law.html.
• RENDLE, Steffen, 2010. libFM. In: [online]. 2011 2010. [Accessed 13 March 2012]. Available from: http://www.libfm.org/.
• SUSE LINUX, 2012. Capítulo 5. Funcionamiento de la impresora. In: SUSE LINUX [online]. 2 May 2012. [Accessed 2 May 2012]. Available from: http://www.cez.com.pe/Linux/manual%20suse%20linux%209.1/suselinux-adminguide_es/html/ch05.html.
• TSCHEMIG, 2007. Refresh Rate: Frecuencia de Refresco Vertical. In: [online]. 6 February 2007. [Accessed 10 June 2012]. Available from: http://www.tecnologiahechapalabra.com/tecnologia/glosario_tecnico/articulo.asp?i=559.
• W3C, 2012. Sobre el W3C - W3C España. In: [online]. 2012. [Accessed 21 May 2012]. Available from: http://www.w3c.es/Consorcio/.
• WIKIPEDIA, 2011a. BCPL - Wikipedia, la enciclopedia libre. In: [online]. 15 November 2011. [Accessed 10 June 2012]. Available from: http://es.wikipedia.org/wiki/BCPL.
• WIKIPEDIA, 2011b. Combined Programming Language - Wikipedia, la enciclopedia libre. In: [online]. 17 November 2011. [Accessed 10 June 2012]. Available from: http://es.wikipedia.org/wiki/Combined_Programming_Language.
• WIKIPEDIA, 2011c. HAL (software) - Wikipedia, la enciclopedia libre. In: [online]. 29 November 2011. [Accessed 25 May 2012]. Available from: http://es.wikipedia.org/wiki/HAL_(software).
• WIKIPEDIA, 2011d. SGML - Wikipedia, la enciclopedia libre. In: [online]. 22 July 2011.
52
[Accessed 25 May 2012]. Available from: http://es.wikipedia.org/wiki/SGML.
• WIKIPEDIA, 2012a. BeOS - Wikipedia, la enciclopedia libre. In: [online]. 24 March 2012. [Accessed 10 June 2012]. Available from: http://es.wikipedia.org/wiki/BeOS.
• WIKIPEDIA, 2012b. C (lenguaje de programación) - Wikipedia, la enciclopedia libre. In: [online]. 15 May 2012. [Accessed 25 May 2012]. Available from: http://es.wikipedia.org/wiki/C_(lenguaje_de_programaci%C3%B3n).
• WIKIPEDIA, 2012c. D-Bus - Wikipedia, la enciclopedia libre. In: [online]. 24 January 2012. [Accessed 25 May 2012]. Available from: http://es.wikipedia.org/wiki/Dbus.
• WIKIPEDIA, 2012d. Espacio de intercambio - Wikipedia, la enciclopedia libre. In: [online]. 5 May 2012. [Accessed 25 May 2012]. Available from: http://es.wikipedia.org/wiki/Espacio_de_intercambio.
• WIKIPEDIA, 2012e. Extensible Markup Language - Wikipedia, la enciclopedia libre. In: [online]. 12 April 2012. [Accessed 25 May 2012]. Available from: http://es.wikipedia.org/wiki/Xml.
• WIKIPEDIA, 2012f. GIMP - Wikipedia, la enciclopedia libre. In: [online]. 17 May 2012. [Accessed 25 May 2012]. Available from: http://es.wikipedia.org/wiki/Gimp.
• WIKIPEDIA, 2012g. GNOME VFS - Wikipedia, la enciclopedia libre. In: [online]. 4 April 2012. [Accessed 25 May 2012]. Available from: http://es.wikipedia.org/wiki/GNOME_VFS.
• WIKIPEDIA, 2012h. GTK+ - Wikipedia, la enciclopedia libre. In: [online]. 18 May 2012. [Accessed 25 May 2012]. Available from: http://es.wikipedia.org/wiki/Gtk.
• WIKIPEDIA, 2012i. IBM - Wikipedia, la enciclopedia libre. In: [online]. 12 May 2012. [Accessed 25 May 2012]. Available from: http://es.wikipedia.org/wiki/IBM.
• WIKIPEDIA, 2012j. Interfaz de programación de aplicaciones - Wikipedia, la enciclopedia libre. In: [online]. 28 March 2012. [Accessed 25 May 2012]. Available from: http://es.wikipedia.org/wiki/Interfaz_de_programaci%C3%B3n_de_aplicaciones.
• WIKIPEDIA, 2012k. Memoria de acceso aleatorio - Wikipedia, la enciclopedia libre. In: [online]. 23 May 2012. [Accessed 25 May 2012]. Available from: http://es.wikipedia.org/wiki/Ram.
• WIKIPEDIA, 2012l. Metodología de desarrollo de software - Wikipedia, la enciclopedia libre. In:
53
[online]. 1 April 2012. [Accessed 25 May 2012]. Available from: http://es.wikipedia.org/wiki/Metodolog%C3%ADa_de_desarrollo_de_software.
• WIKIPEDIA, 2012m. OpenUP - Wikipedia, la enciclopedia libre. In: [online]. 20 May 2012. [Accessed 25 May 2012]. Available from: http://es.wikipedia.org/wiki/OpenUP.
• WIKIPEDIA, 2012n. POSIX - Wikipedia, la enciclopedia libre. In: [online]. 26 March 2012. [Accessed 25 May 2012]. Available from: http://es.wikipedia.org/wiki/Posix.
• WIKIPEDIA, 2012o. PostScript - Wikipedia, la enciclopedia libre. In: [online]. 30 April 2012. [Accessed 30 April 2012]. Available from: http://es.wikipedia.org/wiki/PostScript.
• WIKIPEDIA, 2012p. Proceso Unificado de Rational - Wikipedia, la enciclopedia libre. In: [online]. 21 May 2012. [Accessed 25 May 2012]. Available from: http://es.wikipedia.org/wiki/RUP.
• WIKIPEDIA, 2012q. Proxy - Wikipedia, la enciclopedia libre. In: [online]. 25 May 2012. [Accessed 25 May 2012]. Available from: http://es.wikipedia.org/wiki/Proxy.
• WIKIPEDIA, 2012r. Python - Wikipedia, la enciclopedia libre. In: [online]. 23 April 2012. [Accessed 25 May 2012]. Available from: http://es.wikipedia.org/wiki/Python.
• WIKIPEDIA, 2012s. Server Message Block - Wikipedia, the free encyclopedia. In: [online]. 3 April 2012. [Accessed 25 May 2012]. Available from: http://en.wikipedia.org/wiki/Server_Message_Block.
• WIKIPEDIA, 2012t. Sistema de archivos virtual - Wikipedia, la enciclopedia libre. In: [online]. 16 May 2012. [Accessed 25 May 2012]. Available from: http://es.wikipedia.org/wiki/VFS.
• XFREE86.ORG, [no date]. SETXKBMAP(1) manual page. In: [online]. [Accessed 25 May 2012]. Available from: http://www.xfree86.org/current/setxkbmap.1.html.
• ZEVENOS, 2008. ZevenOS » About. In: [online]. 2008. [Accessed 10 June 2012]. Available from: http://www.zevenos.com/about.
• ZIFF DAVIS, 1996a. Software bloat Definition from PC Magazine Encyclopedia. In: PC Magazine [online]. 2012 1996. [Accessed 11 May 2012]. Available from: http://www.pcmag.com/encyclopedia_term/0,1237,t=software+bloat&i=57626,00.asp.
• ZIFF DAVIS, 1996b. Wirth’s law Definition from PC Magazine Encyclopedia. In: PC Magazine [online].
54
2012 1996. [Accessed 11 May 2012]. Available from: http://www.pcmag.com/encyclopedia_term/0,1237,t=Wirths+law&i=57670,00.asp.
55
BIBLIOGRAFÍA
• DEBIAN.ORG, 2012. Packaging manuals. In: [online]. 9 April 2012. [Accessed 25 May 2012]. Available from: http://www.debian.org/doc/manuals/packaging-tutorial/.
• FERNÁNDEZ DEL MONTE, ING. YUSLEYDI and ALBO CASTRO, ING. MÓNICA, 2011. Metodología para el desarrollo de distribuciones GNU/Linux basada en OpenUp y el programa de mejora organizado por CaliSoft. S.l.: s.n.
• FREE SOFTWARE FOUNDATION, 2012. Por qué el software libre necesita documentación libre - Proyecto GNU - Free Software Foundation (FSF). In: [online]. 6 June 2012. [Accessed 10 June 2012]. Available from: http://www.gnu.org/philosophy/free-doc.es.html.
• GONZÁLEZ DUQUE, Raúl, 2008. Suspender e Hibernar. In: [online]. 2008. [Accessed 1 February 2012]. Available from: http://mundogeek.net/archivos/2008/06/08/suspender-e-hibernar/.
• GORDON MOORE, 2005. Excerpts from A Conversation with Gordon Moore: Moore’s Law. 2005. S.l.: s.n.
• MACÍAS BRUZZONE, Francisco, 2000. 10 Entornos de escritorio linux. In: Opcionweb.com [online]. 2 March 2000. [Accessed 7 March 2012]. Available from: http://www.opcionweb.com/index.php/2009/05/26/10-entornos-de-escritorio-linux/.
56
ANEXOS
1. Anexo 1: Parche de código fuente
--- guano-session-0.9.10.orig/src/main.c+++ guano-session-0.9.10/src/main.c@@ -270,13 +270,63 @@ xfsm_shutdown_helper_hal_send ( LogoutAc #endif } +/*+ * Determines if there is enought space in the swap+ * to hibernate the system. Comparing the total memory+ * size with the swap size.+ * + * Returns: 1 if there is enought space, + * 0 if there is not.+ */++static int isEnougthSwapToHibern() {+ FILE *f = fopen("/proc/meminfo", "r");+ char buff[255];+ char var[100];+ long value;+ long ram_total, ram_libre, swap_total, swap_libre;+++ while (fgets(buff, 255, f) != NULL) {+ sscanf(buff, "%s %ld", var, &value);+ if (strcmp(var, "MemTotal:") == 0) {+ ram_total = value;+ continue;+ }+ if (strcmp(var, "MemFree:") == 0) {+ ram_libre = value;+ continue;+ }+ if (strcmp(var, "SwapTotal:") == 0) {
57
+ swap_total = value;+ continue;+ }+ if (strcmp(var, "SwapFree:") == 0) {+ swap_libre = value;+ continue;+ }+ }+ + + + long total_used = (ram_total - ram_libre) + (swap_total - swap_libre);+ if (total_used > swap_total)+ return 0;+ else+ return 1;+}+ static void check_available_actions() { /* check if we can use HAL to shutdown the computer */ use_hal = xfsm_shutdown_helper_hal_check (); if( use_hal ) /* check if hal is available */ {- available_actions = LOGOUT_ACTION_SHUTDOWN | LOGOUT_ACTION_REBOOT | LOGOUT_ACTION_SUSPEND | LOGOUT_ACTION_HIBERNATE;+ /* Check if the swap have enought space for SUSPEND OR HIBERNATE */+ if (isEnougthSwapToHibern() )+ available_actions = LOGOUT_ACTION_SHUTDOWN | LOGOUT_ACTION_REBOOT | LOGOUT_ACTION_SUSPEND | LOGOUT_ACTION_HIBERNATE;+ else+ available_actions = LOGOUT_ACTION_SHUTDOWN | LOGOUT_ACTION_REBOOT ; } else /* check if gdm is available */ {--- guano-session-0.9.10.orig/data/utils/autostart.sh+++ guano-session-0.9.10/data/utils/autostart.sh
58
@@ -63,4 +63,4 @@ nm-applet & /usr/lib/policykit-1-gnome/polkit-gnome-authentication-agent-1 & # ejecter-ejecter &+# ejecter &--- /dev/null+++ guano-session-0.9.10/data/utils/printer.desktop@@ -0,0 +1,14 @@+[Desktop Entry]+Encoding=UTF-8+Name=Printer Configuration+Name[es]=Configuración de impresoras+GenericName=Printer+GenericName[es]=Impresoras+Comment=Printer+Comment[es]=Printer+Exec=x-www-browser 127.0.0.1:631+Icon=printer+Terminal=false+Type=Application+Categories=GTK;Printing;HardwareSettings;Settings;System;+StartupNotify=false
2. Anexo 2: Parche de código fuente
--- /tmp/libfm-36dfad2/src/gtk/fm-places-model.c..................................2011-02-08 10:39:01.000000000 -0500+++ libfm-0.1.15+git20110210nova1/src/gtk/fm-places-model.c..........2012-01-16 01:21:53.000000000 -0500@@ -41,6 +41,9 @@ case FM_PLACES_ITEM_VOL: g_object_unref(item->vol); break;+ case FM_PLACES_ITEM_MOUNT:+ g_object_unref(item->mount);+ break; } fm_file_info_unref(item->fi); g_slice_free(FmPlaceItem, item);
59
@@ -92,8 +95,8 @@ { fm_file_info_unref(item->fi); item->fi = fm_file_info_ref(fi);- /* remove the file from list to speed up further loading.- * This won't cause problem since nobody else if using the list. */+ /* remove the file from list to speed up further loading. */+ /* This won't cause problem since nobody else if using the list. */ fm_list_delete_link(job->file_infos, l); break; }@@ -111,30 +114,47 @@ GdkPixbuf* pix; GMount* mount; FmPath* path;-- name = g_volume_get_name(item->vol);- if(item->fi->icon)- fm_icon_unref(item->fi->icon);- gicon = g_volume_get_icon(item->vol);- icon = fm_icon_from_gicon(gicon);- item->fi->icon = icon;- g_object_unref(gicon);-- mount = g_volume_get_mount(item->vol);- if(mount)- {- GFile* gf = g_mount_get_root(mount);- path = fm_path_new_for_gfile(gf);- g_object_unref(gf);- g_object_unref(mount);- item->vol_mounted = TRUE;- }- else- {- path = NULL;- item->vol_mounted = FALSE;- }-
60
++ if (G_IS_VOLUME(item->vol) && (item->vol != NULL)){+ name = g_volume_get_name(item->vol);+ if(item->fi->icon)+ fm_icon_unref(item->fi->icon);+ gicon = g_volume_get_icon(item->vol);+ icon = fm_icon_from_gicon(gicon);+ item->fi->icon = icon;+ g_object_unref(gicon);++ mount = g_volume_get_mount(item->vol);+ if(mount)+ {+ GFile* gf = g_mount_get_root(mount);+ path = fm_path_new_for_gfile(gf);+ g_object_unref(gf);+ g_object_unref(mount);+ item->vol_mounted = TRUE;+ }+ else+ {+ path = NULL;+ item->vol_mounted = FALSE;+ }+ }+ if (G_IS_MOUNT(item->mount) && (item->mount != NULL)){+ name = g_mount_get_name(item->mount);+ if(item->fi->icon)+ fm_icon_unref(item->fi->icon);+ gicon = g_mount_get_icon(item->mount);+ icon = fm_icon_from_gicon(gicon);+ item->fi->icon = icon;+ g_object_unref(gicon);++ GFile* gf = g_mount_get_root(item->mount);+ path = fm_path_new_for_gfile(gf);++ g_object_unref(gf);+ item->vol_mounted = TRUE;
61
++ }
if(!fm_path_equal(item->fi->path, path)) { fm_file_info_set_path(item->fi, path);@@ -164,18 +184,40 @@ GtkTreeIter it; FmPlaceItem* item; item = g_slice_new0(FmPlaceItem);- item->fi = fm_file_info_new();- item->type = FM_PLACES_ITEM_VOL;- item->vol = (GVolume*)g_object_ref(vol);- gtk_list_store_insert_before(GTK_LIST_STORE(model), &it, &model->sep_it);- gtk_list_store_set(GTK_LIST_STORE(model), &it, FM_PLACES_MODEL_COL_INFO, item, -1);- update_vol(model, item, &it, job);+ item->fi = fm_file_info_new();+ item->type = FM_PLACES_ITEM_VOL;+ item->mount = NULL;+ item->vol = (GVolume*)g_object_ref(vol);+ gtk_list_store_insert_before(GTK_LIST_STORE(model), &it, &model->sep_it);+ gtk_list_store_set(GTK_LIST_STORE(model), &it, FM_PLACES_MODEL_COL_INFO, item, -1);+ update_vol(model, item, &it, job);+}++static void add_mount(FmPlacesModel* model, GMount* mount, FmFileInfoJob* job)+{+ GtkTreeIter it;+ FmPlaceItem* item;+ item = g_slice_new0(FmPlaceItem);+ item->fi = fm_file_info_new();+ item->type = FM_PLACES_ITEM_MOUNT;+ item->vol = NULL;+ item->mount = (GMount*)g_object_ref(mount);+ gtk_list_store_insert_before(GTK_LIST_STORE(model), &it, &model->sep_it);+ gtk_list_store_set(GTK_LIST_STORE(model), &it, FM_PLACES_MODEL_COL_INFO, item, -1);+ update_vol(model, item, &it, job); }
62
-static FmPlaceItem* find_vol(FmPlacesModel* model, GVolume* vol, GtkTreeIter* _it)+static FmPlaceItem* find_vol(FmPlacesModel* model, GObject* vol, GtkTreeIter* _it) { GtkTreeIter it; FmPlaceItem* item;+ GVolume* volume = NULL;+ GMount* mount = NULL;+ if (G_IS_VOLUME(vol) && vol != NULL)+ volume = (GVolume *)g_object_ref(vol);+ else if (G_IS_MOUNT(vol) && vol != NULL)+ mount = (GMount *)g_object_ref(vol);+ /* FIXME: don't need to find from the first iter */ if(gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model), &it)) {@@ -183,14 +225,27 @@ { FmPlaceItem* item; gtk_tree_model_get(GTK_TREE_MODEL(model), &it, FM_PLACES_MODEL_COL_INFO, &item, -1);-- if(item && item->type == FM_PLACES_ITEM_VOL && item->vol == vol)- {- *_it = it;- return item;+ if (volume != NULL){+ if(item && item->type == FM_PLACES_ITEM_VOL && \+ (item->vol != NULL && G_IS_VOLUME(item->vol)) && item->vol == volume)+ {+ *_it = it;+ return item;+ }+ }+ if (mount != NULL){+ if((item && item->type == FM_PLACES_ITEM_MOUNT) && \+ (item->mount != NULL && G_IS_MOUNT(item->mount)) && item->mount == mount)+ {+ *_it = it;+ return item;
63
+ } } }while(it.user_data != model->sep_it.user_data && gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &it)); }+ g_object_unref(volume);+ g_object_unref(mount); return NULL; } @@ -207,7 +262,7 @@ FmPlacesModel* model = FM_PLACES_MODEL(user_data); FmPlaceItem* item; GtkTreeIter it;- item = find_vol(model, vol, &it);+ item = find_vol(model, (GObject*) vol, &it); /* g_debug("remove vol: %p, uuid: %s, udi: %s", vol, g_volume_get_identifier(vol, "uuid"), g_volume_get_identifier(vol, "hal-udi")); */ if(item) {@@ -217,13 +272,28 @@ } } +void on_mount_removed(GVolumeMonitor* vm, GMount* mount, gpointer user_data)+{+ FmPlacesModel* model = FM_PLACES_MODEL(user_data);+ FmPlaceItem* item;+ GtkTreeIter it;+ item = find_vol(model, (GObject*) mount, &it);+ g_debug("remove mount: %s, root: %s", g_mount_get_name(mount), g_mount_get_uuid(mount));+ if(item)+ {+ gtk_list_store_remove(GTK_LIST_STORE(model), &it);+ place_item_free(item);+ update_sep_tp(model);+ }+}+
64
void on_vol_changed(GVolumeMonitor* vm, GVolume* vol, gpointer user_data) { FmPlacesModel* model = FM_PLACES_MODEL(user_data); FmPlaceItem* item; GtkTreeIter it; g_debug("vol-changed");- item = find_vol(model, vol, &it);+ item = find_vol(model,(GObject*) vol, &it); if(item) update_vol(model, item, &it, NULL); }@@ -231,15 +301,15 @@ void on_mount_added(GVolumeMonitor* vm, GMount* mount, gpointer user_data) { FmPlacesModel* model = FM_PLACES_MODEL(user_data);+ FmPlaceItem *item;+ GtkTreeIter it;+ GtkTreePath* tp; GVolume* vol = g_mount_get_volume(mount); if(vol) {- FmPlaceItem *item;- GtkTreeIter it;- item = find_vol(model, vol, &it);+ item = find_vol(model,(GObject*) vol, &it); if(item && item->type == FM_PLACES_ITEM_VOL && !item->fi->path) {- GtkTreePath* tp; GFile* gf = g_mount_get_root(mount); FmPath* path = fm_path_new_for_gfile(gf); g_debug("mount path: %s", path->name);@@ -256,6 +326,33 @@ } g_object_unref(vol); }+ else+ {+ /* If not volume then it's a mount added */+ /* Find it first if exists */
65
+ item = find_vol(model,(GObject*) mount, &it);+ if (!item)+ {+ /* Adding mount */+ add_mount(GTK_TREE_MODEL(model), (GMount *)mount, NULL);+ }+ else if(item && item->type == FM_PLACES_ITEM_MOUNT && !item->fi->path)+ {+ GFile* gf = g_mount_get_root(mount);+ FmPath* path = fm_path_new_for_gfile(gf);+ g_debug("mount path: %s", path->name);+ g_object_unref(gf);+ fm_file_info_set_path(item->fi, path);+ if(path)+ fm_path_unref(path);+ item->vol_mounted = TRUE;++ /* inform the view to update mount indicator */+ tp = gtk_tree_model_get_path(GTK_TREE_MODEL(model), &it);+ gtk_tree_model_row_changed(GTK_TREE_MODEL(model), tp, &it);+ gtk_tree_path_free(tp);+ }+ } } static void add_bookmarks(FmPlacesModel* model, FmFileInfoJob* job)@@ -462,7 +559,9 @@ GtkTreeIter it; GtkTreePath* tp; FmPlaceItem* item;- GList *vols, *l;+ GList *vols = NULL, *l = NULL, *mounts = NULL, *all = NULL;+ GVolume *volume;+ GMount * mount; GIcon* gicon; FmIcon* icon; GFile* gf;@@ -531,19 +630,58 @@ g_signal_connect(self->vol_mon, "volume-removed", G_CALLBACK(on_vol_removed), self);
66
g_signal_connect(self->vol_mon, "volume-changed", G_CALLBACK(on_vol_changed), self); g_signal_connect(self->vol_mon, "mount-added", G_CALLBACK(on_mount_added), self);+ g_signal_connect(self->vol_mon, "mount-removed", G_CALLBACK(on_mount_removed), self); /* separator */ gtk_list_store_append(model, &self->sep_it); - /* add volumes to side-pane */+ /* Colects volumes */ vols = g_volume_monitor_get_volumes(self->vol_mon); for(l=vols;l;l=l->next) { GVolume* vol = G_VOLUME(l->data);- add_vol(self, vol, job);+ all = g_list_append(all, vol);+ /* add_vol(self, vol, job); */ g_object_unref(vol); } g_list_free(vols);+ + /* Supports smb, sftp, ftp... */+ /* Colects mounts */+ mounts = g_volume_monitor_get_mounts (self->vol_mon);+ for (l=mounts;l;l=l->next)+ {+ mount = G_MOUNT(l->data);+ if (mount)+ {+ volume = g_mount_get_volume (mount);+ if (volume)+ {+ g_object_unref (volume);+ continue;+ }+ all = g_list_append(all, mount); + g_object_unref (mount);+ }+ }+ g_list_free(mounts);
67
++ /* Adds all drives to side panel */+ for (l=all;l;l=l->next)+ {+ if (G_IS_VOLUME(l->data))+ {+ GVolume* vol1 = G_VOLUME(l->data);+ add_vol(self, vol1, job);+ g_object_unref (vol1);+ }+ if (G_IS_MOUNT(l->data))+ {+ GMount* mount1 = G_MOUNT(l->data);+ add_mount(self, mount1, job);+ g_object_unref (mount1);++ } /* get the path of separator */ self->sep_tp = gtk_tree_model_get_path(GTK_TREE_MODEL(self), &self->sep_it);
3. Anexo 3: Parche de código fuente
--- /tmp/libfm-36dfad2/src/gtk/fm-places-view.c..........................................2011-02-08 10:39:01.000000000 -0500+++ libfm-0.1.15+git20110210nova1/src/gtk/fm-places-view.c...................2012-01-16 10:11:55.000000000 -0500@@ -438,7 +438,9 @@ if(gtk_tree_model_get_iter(GTK_TREE_MODEL(model), &it, tree_path)) { FmPlaceItem* item;- FmPath* path;+ FmPath* path = NULL;+ GFile* gf;+ GMount* mnt = NULL; gtk_tree_model_get(GTK_TREE_MODEL(model), &it, FM_PLACES_MODEL_COL_INFO, &item, -1); if(!item) return;@@ -447,38 +449,50 @@ case FM_PLACES_ITEM_PATH:
68
path = fm_path_ref(item->fi->path); break;+ case FM_PLACES_ITEM_MOUNT:+ {+ if ((item->mount != NULL) && G_IS_MOUNT(item->mount)){+ mnt = (GMount*)g_object_ref(item->mount);+ }+ }+ break; case FM_PLACES_ITEM_VOL: {- GFile* gf;- GMount* mnt = g_volume_get_mount(item->vol);+ if ((item->vol != NULL) && G_IS_VOLUME(item->vol)){+ mnt = g_volume_get_mount(item->vol);+ } if(!mnt) {+ GtkWindow* parent = GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(view)));- if(!fm_mount_volume(parent, item->vol, TRUE))- return;- mnt = g_volume_get_mount(item->vol);- if(!mnt)- {- g_debug("GMount is invalid after successful g_volume_mount().\nThis is quite possibly a gvfs bug.\nSee https://bugzilla.gnome.org/show_bug.cgi?id=552168");- return;+ if ((item->vol != NULL) && G_IS_VOLUME(item->vol)){+ if(!fm_mount_volume(parent, item->vol, TRUE))+ return;+ mnt = g_volume_get_mount(item->vol);+ if(!mnt)+ {+ g_debug("GMount is invalid after successful g_volume_mount().\nThis is quite possibly a gvfs bug.\nSee https://bugzilla.gnome.org/show_bug.cgi?id=552168");+ return;+ } }
69
- }- gf = g_mount_get_root(mnt);- g_object_unref(mnt);- if(gf)- {- path = fm_path_new_for_gfile(gf);- g_object_unref(gf);- }- else- path = NULL;- break;- }+ } + } + break; default: return; }-- if(path)+ if (!path){+ gf = g_mount_get_root(mnt);+ g_object_unref(mnt);+ if(gf)+ {+ path = fm_path_new_for_gfile(gf);+ g_object_unref(gf);+ }+ else+ path = NULL;+ }+ if (path) { g_signal_emit(view, signals[CHDIR], 0, button, path); fm_path_unref(path);@@ -526,18 +540,27 @@ if(item && item->vol_mounted) { GtkWidget* toplevel = gtk_widget_get_toplevel(view);
70
- /* eject the volume */- if(g_volume_can_eject(item->vol))- fm_eject_volume(toplevel, item->vol, TRUE);- else /* not ejectable, do unmount */- {- GMount* mnt = g_volume_get_mount(item->vol);- if(mnt)- {- fm_unmount_mount(toplevel, mnt, TRUE);- g_object_unref(mnt);- }- }+ + if ((item->vol != NULL) && G_IS_VOLUME(item->vol)){+ /* eject the volume */+ if(g_volume_can_eject(item->vol))+ fm_eject_volume(toplevel, item->vol, TRUE);+ else /* not ejectable, do unmount */+ {+ GMount* mnt = g_volume_get_mount(item->vol);+ if(mnt)+ {+ fm_unmount_mount(toplevel, mnt, TRUE);+ g_object_unref(mnt);+ }+ }
+ }+ else if ((item->mount != NULL) && G_IS_MOUNT(item->mount)){+ GMount* mnt = (GVolume*)g_object_ref(item->vol);+ fm_unmount_mount(toplevel, mnt, TRUE);+ g_object_unref(mnt);+ }+ gtk_tree_path_free(tp); gtk_tree_path_free(view->clicked_row);@@ -587,8 +610,12 @@ GMount* mnt;
71
gtk_action_group_add_actions(act_grp, vol_menu_actions, G_N_ELEMENTS(vol_menu_actions), item); gtk_ui_manager_add_ui_from_string(ui, vol_menu_xml, -1, NULL);-- mnt = g_volume_get_mount(item->vol);++ if ((item->vol != NULL) && G_IS_VOLUME(item->vol))+ mnt = g_volume_get_mount(item->vol);+ else if ((item->vol != NULL) && G_IS_VOLUME(item->mount))+ mnt = item->mount;+ if(mnt) /* mounted */ { g_object_unref(mnt);@@ -607,6 +634,25 @@ act = gtk_action_group_get_action(act_grp, "Eject"); gtk_action_set_visible(act, FALSE); }+ else if(item->type == FM_PLACES_ITEM_MOUNT)+ {+ GtkAction* act;+ GMount* mnt;+ gtk_action_group_add_actions(act_grp, vol_menu_actions, G_N_ELEMENTS(vol_menu_actions), item);+ gtk_ui_manager_add_ui_from_string(ui, vol_menu_xml, -1, NULL);++ if ((item->mount != NULL) && G_IS_MOUNT(item->mount))+ mnt = (GMount*)g_object_ref(item->mount);++ if(mnt) /* mounted */+ {+ g_object_unref(mnt);+ act = gtk_action_group_get_action(act_grp, "Mount");+ gtk_action_set_visible(act, FALSE);+ act = gtk_action_group_get_action(act_grp, "Eject");+ gtk_action_set_visible(act, FALSE);+ }+ } else goto _out; gtk_ui_manager_insert_action_group(ui, act_grp, 0);
72
@@ -681,8 +727,13 @@ void on_umount(GtkAction* act, gpointer user_data) {+ GMount* mnt; FmPlaceItem* item = (FmPlaceItem*)user_data;- GMount* mnt = g_volume_get_mount(item->vol);+ if ((item != NULL) && (G_IS_VOLUME(item->vol)) && item->type == FM_PLACES_ITEM_VOL)+ mnt = g_volume_get_mount(item->vol);+ else if ((item != NULL) && (G_IS_MOUNT(item->mount)) && item->type == FM_PLACES_ITEM_MOUNT)+ mnt = (GMount*)g_object_ref(item->mount);+ if(mnt) { fm_unmount_mount(NULL, mnt, TRUE);
73
4. Anexo 4: Diagrama de clases LibFM (requiere ampliar la imagen)
5. Anexo 5: Parche de código fuente
--- /tmp/libfm-36dfad2/src/gtk/fm-gtk-utils.c.............................................2011-02-08 10:39:01.000000000 -0500+++ libfm-0.1.15+git20110210nova1/src/gtk/fm-gtk-utils.c......................2011-02-23 14:50:35.000000000 -0500@@ -301,7 +301,8 @@ MOUNT_GFILE, UMOUNT_MOUNT, EJECT_MOUNT,- EJECT_VOLUME+ EJECT_VOLUME,+ MOUNT_MOUNT }MountAction; struct MountData@@ -364,6 +365,9 @@ case MOUNT_VOLUME: g_volume_mount(G_VOLUME(obj), 0, op, cancellable, on_mount_action_finished, data); break;+ case MOUNT_MOUNT:+ //g_volume_mount(G_VOLUME(obj), 0, op, cancellable, on_mount_action_finished, data);+ break; case MOUNT_GFILE: g_file_mount_enclosing_volume(G_FILE(obj), 0, op, cancellable, on_mount_action_finished, data); break;@@ -454,6 +458,11 @@ return fm_do_mount(parent, G_OBJECT(vol), MOUNT_VOLUME, interactive); } +gboolean fm_mount_mount(GtkWindow* parent, GMount* mount, gboolean interactive)+{+ return fm_do_mount(parent, G_OBJECT(mount), MOUNT_MOUNT, interactive);+}+ gboolean fm_unmount_mount(GtkWindow* parent, GMount* mount, gboolean interactive) { return fm_do_mount(parent, G_OBJECT(mount), UMOUNT_MOUNT, interactive);
75
6. Anexo 6: Parche de código fuente
--- /tmp/libfm-36dfad2/src/gtk/fm-places-model.h.......................................2011-02-08 10:39:01.000000000 -0500+++ libfm-0.1.15+git20110210nova1/src/gtk/fm-places-model.h.................2011-02-23 14:50:35.000000000 -0500@@ -62,6 +62,7 @@ FM_PLACES_ITEM_NONE, FM_PLACES_ITEM_PATH, FM_PLACES_ITEM_VOL,+ FM_PLACES_ITEM_MOUNT }FmPlaceType; typedef struct _FmPlaceItem@@ -72,6 +73,7 @@ union { GVolume* vol;+ GMount* mount; FmBookmarkItem* bm_item; }; }FmPlaceItem;
76
GLOSARIO DE TÉRMINOS
Distribución (distro): distribución de software basada en el núcleo Linux que incluye determinados
paquetes de software para satisfacer las necesidades de un grupo específico de usuarios, dando así
origen a ediciones domésticas, empresariales y para servidores. [3]
Framework: conjunto estandarizado de conceptos, prácticas y criterios para enfocar un tipo de
problemática particular, que sirve como referencia para enfrentar y resolver nuevos problemas de índole
similar. Puede incluir soporte de programas, bibliotecas, y un lenguaje interpretado, entre otras
herramientas, para así ayudar a desarrollar y unir los diferentes componentes de un proyecto. [8,13]
PCManFM: manejador de archivos extremadamente rápido y ligero, aunque con muchas funciones,
que funciona con navegación por pestañas. [10]
Software privativo: cualquier programa informático en el que el usuario tiene limitaciones para usarlo,
modificarlo o redistribuirlo (esto último con o sin modificaciones). [3]
SourceForge: sitio web de colaboración para proyectos de software que provee una portada para un
amplio rango de servicios útiles para los procesos de desarrollo de software e integra un amplio número
de aplicaciones de software libre (tales como PostgreSQL y CVS). [10]
77
View publication statsView publication stats