"Después del juego es antes del juego"
Sepp Herberger

viernes, 29 de enero de 2016

La conjura de los necios (III): no Deus, no machina.

Continuamos con lo dicho aquí y aquí.

En esta nota de prensa del pasado 3 de agosto nuestro presuntamente respetable Gobierno proclamaba:

La Consejería de Educación y Empleo sigue apostando por el software libre en la región.
....
De esta primera reunión se ha extraído, entre otras conclusiones, que la instalación de programas propietarios se hará únicamente en los centros educativos donde se detecte una necesidad real para la formación del alumnado. Igualmente, se ha definido un itinerario a seguir para fortalecer la colaboración y el diálogo con este colectivo y velar por los intereses del software libre en nuestra región, que sigue siendo la apuesta firme de la Junta de Extremadura.
En este sentido, la Consejería asegura que un máximo del 9% de dicho presupuesto, se va a destinar a adquirir el software propietario que se usará en las ramas de Formación Profesional que requieran programas específicos, como es el caso de programas de edición multimedia, contabilidad, etc.
....

Respuesta: trola del 15. Como bien dice nuestro Servicio TIC aquí en el apartado "Instrucciones para la recepción e instalación del equipamiento" el equipamiento viene con arranque dual Ubuntu-Windows y en la mayoría de los casos se deja al libre albedrío y capricho de los usuarios con que sistema arrancar. Si se aplicase la misma política en los comedores escolares mis hijos estarían encantados de poder comer salchichas con ketchup todos los días.

El que un político diga que eso de ahí es una vaca lechera y que su partido ama los productos lácteos no vale nada cuando el obrero especializado, que en este caso soy yo, tiene que arremangarse y ordeñarla y se confirma aquello de lo que venía avisando: es un toro y de leche rien de rien.

Bueno, pues dejemos a los políticos intentando salvarnos de sus miedos y ayudándonos a solucionar sus problemas, y vamos a pensar en lo que viene, que hay que generar riqueza rápidamente para pagar la deuda del Reino de España. Está claro que si no se impone el sentido común y el respeto a la palabra dada, nos van a infestar de forma gratuita (es un decir, porque las licencias las pagamos con nuestros impuestos) de Windows y otras hierbas los centros educativos y tenemos que prepararnos para ello.

  1. Lo primero es tener en cuenta que el PC típico de un centro educativo no tiene un uso normal: cada día pasan por él diferentes usuarios con diferentes habilidades a la hora de usarlo. Cualquier persona con luces que haya usado un aparato de forma compartida, desde un coche a una cafetera, sabe que la degradación del mismo es mas rápida. Como dirían Sheldon Cooper: la entropía aumenta en proporción geométrica. Da igual que pongas sistemas de seguridad limitando permisos: los usuarios somos muy ingeniosos a la hora de crear caos de forma inexplicable e involuntaria.
  2. Lo segundo es que al trabajar con grupos, muchas veces vamos a tener que realizar la misma configuración o acción sobre grupos de PC. Es frecuente pedir al administrador instalar una aplicación en un grupo de PC/usuarios, o copiar unas carpetas y crear una serie de accesos directos, por ejemplo.
  3. Lo tercero es que los Windows tienen la mala costumbre de actualizarse en el peor momento, ralentizando la conexión y a si mismos. La repanocha llega cuando quieres apagarlo y te dice que esperes media hora: una propuesta chispeante si estás en un centro educativo y tienes que dejar el portátil en el armario de carga porque te vas de la clase.

Voy a intentar exponer los distintos enfoques que se me ocurren para gestionar una marabunta de Windows en territorio acostumbrado a Linux, donde ya teníamos nuestro OpenLdap, nuestro puppet, nuestros mirror y demás utilidades al coste de 0 euros:

  • Hacerlo todo a mano. Administrar los PC uno a uno. Volver a los 80 pero sin Barón Rojo y sin la URSS. Estupendo para los que les guste sentirse como Chaplin apretando tuercas 12 horas al día en la línea de producción de Tiempos Modernos.
  • Montarlo artesanalmente en plan hombre pobre: validar los Windows con OpenLdap a través de pGina, crear carpetas compartidas con samba, montar un PDC con samba-ldap, usar Wpkg para instalaciones automáticas..... muy económico si hay un número razonable de Windows pero sospecho que totalmente insuficiente para lo que se nos viene encima. Para mas INRI estas herramientas tapan solo algunos de los agujeros que se avecinan, no todos, sumado a que las utilidades para administrarlos son bastante rudimentarias.
  • Montarlo bien y con clase, con un Windows Server y todas las herramientas adicionales. Claro, aquí hay un problema: nos hemos gastado todo el dinero en el coche y ya no hay para gasolina. Nadie entre las mentes pensantes de la Consejería se ha dado cuenta de que para mantener un tropel de Windows hace falta un entorno de servidor Windows y una máquina potente para ejecutarlo, y eso no sale gratis y habría que haberlo incluido en el presupuesto de los lotes. Pueden mirar al cielo esperando que llegue una solución Deus ex machina, pero lo cierto es que No deus, no machina. Es curioso que en los diálogos al respecto se produce un efecto eco:

    -Necesitamos un Windows Server
    -Vale, compraremos licencias de Windows Server.

    Todo esto sin saber que es un Windows Server, cuanto valen sus licencias, sobre que hierros se va a instalar, ni que otras herramientas hacen falta para poder poner en producción y administrar todos los clientes Windows sin morir en el intento. Dan ganas de decir:

    -Necesitamos un condensador de fluzo.

    A ver que responden. Por supuesto, de licencias de Windows Server no se ha vuelto a decir ni pío.

  • Otra solución que planea sobre nuestros cielos es montar todos los Windows en máquinas virtuales dentro de Linux y redistribuir esas maquinas virtuales cuando haya cambios. De esta forma los usuarios pueden usar sus Windows, les haga falta o no (de igual manera que Isabel la Católica se bañaba una vez al mes, le hiciese falta o no) y si los rompen se reparía copiando la imagen del disco duro. No podrían guardar sus datos en local, pero hacer eso en un ordenador compartido en estos tiempos en que existe Dropbox, Google Drive y demás es un comportamiento un poco dejado que merece ser castigado con perdidas de datos periódicas.

Y este es el estado del frente a día de hoy. Seguiremos informando conforme vayamos construyendo, one more time, la solución a un problema que no hemos creado nosotros.

Salud.

miércoles, 20 de enero de 2016

Debian Jessie: debmirror da warnings del tipo NO_PUBKEY

Bueno, pues ya he migrado el servidor principal del centro a Debian Jessie y cuando lo estaba configurando para que crease y actualizase cada noche mirrors locales de los repositorios mas frecuentes mediante debmirror me he encontrado con que daba avisos del tipo NO_PUBKEY. En principio eso no impide que se cree el mirror, pero como son un poco maniático no me gusta quedarlo así. La solución, contada en el Paso 3 de esta entrada antigua pasa por añadir las claves dentro del directorio /root/.gnupg/... ya que debmirror se ejecuta desde el crontab con el usuario root.

El problema que me he encontrado es que si repetía los pasos dados en dicha entrada había varios repositorios que seguían dando warnings con debmirror. Buscando un poco he encontrado la forma de meter la clave directamente y en un único paso en /root/.gnupg sin que luego se produzcan los warnings.

Imagínemos que el aviso sea NO_PUBKEY CBF8D6FD518E17E1, pues bien, tendríamos que hacer:

# gpg --no-default-keyring --keyring ~/.gnupg/trustedkeys.gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys CBF8D6FD518E17E1

De esta manera se importa la clave gpg de CBF8D6FD518E17E1 directamente a /root/.gnupg/trustedkeys.gpg. Usamos el servidor hkp://keyserver.ubuntu.com:80 para sortear el firewall de la Red Educativa, tal como contamos en su día aquí.

En pocos días seguimos para bingo...a ver si puedo contar ya cosas de las pizarras Galneo, que de momento pintan muuuuuy bien.

martes, 12 de enero de 2016

debmirror deja de funcionar con wheezy-backports

En esta entrada contaba como crear unos mirrors de wheezy-backports y otros repositorios en nuestra red local para permitir una instalación y actualización más rápida de paquetes.

Hoy me he dado cuenta de que hacía al menos 15 días que no se sincronizaba el mirror de wheezy-backports y por tanto tampoco los equipos que se actualizaban desde él, provocando un fallo en pkgsync que acaba interrumpiendo todas las actualizaciones. Lanzando el comando debmirror a mano:
# debmirror -v --getcontent /var/www/mirrors/backports-wheezy/  --timeout=1200 \
--ignore-missing-release --ignore-release-gpg --passive --nosource --rsync-extra=none \
--arch=i386,amd64 --ignore=disks-i386,amd64/ --section=main,contrib,non-free --method=http \
--host=ftp.es.debian.org --dist=wheezy-backports --root=debian
se empezaba a descargar algo pero a los pocos segundos quedaba congelado sine die, sin avanzar nada. Para otros repositorios si que funcionaba debmirror, pero probando para wheezy-backports desde otras redes (para descartar si era problema de mi red) también fallaba.

Después de estar un rato dando vueltas como pollo sin cabeza mi compañero Ricardo me ha dado la solución: añadir el parámetro "--diff none", de tal forma que queda:
# debmirror -v --getcontent /var/www/mirrors/backports-wheezy/  --timeout=1200 \
--ignore-missing-release --ignore-release-gpg --passive --nosource --rsync-extra=none \
--arch=i386,amd64 --ignore=disks-i386,amd64/ --section=main,contrib,non-free --method=http \
--host=ftp.es.debian.org --dist=wheezy-backports --root=debian --diff=none
O modificando el script de creación del mirror, quedando:
#! /bin/sh

debug="$@"
arch=i386,amd64
base=/var/www/mirrors
.....
.....
destdir=$base/backports-wheezy
dist=wheezy-backports
section=main,contrib,non-free
allopt="$debug --timeout=1200 --ignore-missing-release --ignore-release-gpg --passive --nosource --rsync-extra=none --arch=$arch --ignore=disks-$arch/ --section=$section --method=http"
defopt="$allopt  --host=ftp.debian.org --dist=$dist --root=debian --diff=none"
debmirror -v --getcontent $destdir/ $defopt
La causa, según cuenta Ricardo, es que para no se tenga que descargar el Packages entero por pequeñas modificaciones hay repositorios que usan archivos diff, conteniendo sólo los últimos cambios. Este método ha dejado de funcionar bien con debmirror, pero con diff=none le dices que ignore dichos archivos diff. ¡Gracias, Ricardo!.

Lo que voy a echar de menos los mirrors cuando los Windows que nos quiere poner la Junta de Extremadura empiecen a actualizarse de forma masiva en los centros educativos. Será la fiesta del bit. Aunque siempre podemos, como sugirió algún iluminado, desactivar las actualizaciones. Entonces será la superfiesta.

Bueno, pues ahí queda eso.

martes, 5 de enero de 2016

Cargar firmware desde cero a LG Optimus Hub E510 brickeado.

Después de jubilar mi LG Optimus Hub se me ocurrió recuperarlo y remozarlo para usarlo como reproductor de podcasts de Colectivo Burbuja, el Vórtice y otras radios online para cuando salgo a andar. Y si además puedo reutilizar hardware en teoría obsoleto para tener un iPod Touch lonchafinista mejor que mejor.

De esta estupenda colección de ROMs para mi móvil, la que mas me gustaba era la LiteHub: una Gingerbread ligera y pequeña (aunque, como cuento en la aventura interior, no va con la SIM de Vodafone pero ya me da lo mismo). En la carga volví a liarme de mala manera y acabé con el terminal brickeado. No entraba ni en el recovery y no había tampoco fastboot mode.

Carajo, había que instalar el sistema desde cero. Como muchos fabricantes (por ejemplo, Samsung con Kies/Odin o los moviles MTK con MTKDroidTools) en LG hay herramientas particulares para cargar la ROM en un móvil cascado (cosas del libre mercado perfecto: cada tornillo necesita un destornillador). Estas ROM son publicadas por LG en formato kdz y la herramienta se llama KDZ Firmware Updater. Los pasos son:

  • Descargar e instalar los drivers universales LG "LGUnitedMobileDriver_S4981MAN37AP22_ML_WHQL_Ver_3.7.2".
  • Descargar el KDZ_FW_UPD_EN.ZIP de cualquier sitio como éste, descomprimirlo, instalar MSXML y dejarlo listo para ejecutar el KDZ_FW_UPD.
  • Descargar el fichero KDZ correspondiente a nuestro móvil y país desde este repositorio. Hay varias ROM KDZ para LG E510, pero la más adecuada es la V10B_00 de Movistar, ya que es la única que se deja rootear mas adelante. Las otras son mas modernas y están protegidas contra los métodos usuales de rooteo.

Para cargar la ROM entramos en KDZ_FW_UPD y configuramos:

  • TYPE: 3GQCT
  • PHONEMODE: DIAG
  • KDZ FILE: seleccionamos archivo que KDZ que descargamos antes
  • Ponemos el móvil en Emergency Mode: se apaga, se quita la batería un minuto, se pone de nuevo y se pulsa VOL+ y botón de encendido hasta que se enciende con una pantalla donde pone "Emergency Mode". Este es un modo parecido a Fastboot para cargar la ROM KDZ.
  • Lo conectamos al USB del ordenador y dejamos que el Windows lo detecte correctamente.
  • Pulsamos LAUNCH SOFTWARE UPDATE: empieza el baile en el que se muestran varios contadores en el log y durante el cual se puede reiniciar el móvil varias veces. Hay que esperar hasta que los contadores llegan a 0 y se muestra algo así como "Finished".


Una vez acaba, reiniciamos y nos encontramos una flamante ROM de Movistar, que no nos va a durar mucho. Recordemos que hemos elegido esta ROM entre todas las demás porque es la única que se deja rootear de una forma sencilla. Los pasos ahora son:

  • Rootear con UnlockRoot23, según estas instrucciones.
  • Una vez rooteada, ya podemos poner CWM Recovery, lo que permitirá cargar luego cualquier Custom ROM. Para ello descargaremos recovery-clockwork-5.0.2.7-e510.img y flash_image.zip y seguiremos el resto de instrucciones del enlace anterior.
  • Una vez instalado el Recovery, descargamos la ROM LiteHub y la instalamos.

Un problema de todas las ROMs para este móvil es que tiene solo unos miserables 150-170Mb para aplicaciones de usuario, que se llenan enseguida (especialmente con los datos de las Google Apps, que bajan megas y megas no se con que finalidad). Lo que había hecho hasta ahora era instalar Link2SD para mover a mano algunas aplicaciones a la SD, pero no siempre soluciona las cosas y tarde o temprano sale el temido problema de "Memoria casi llena".

Esta vez quería probar otra cosa: instalar INT2EXT+, que usa de forma transparente la partición en formato "ext2/3/4" de la memoria SD para las aplicaciones que instalemos: con eso consigo tener una digna memoria de 900Mb para aplicaciones de una forma automática y sin más dolores de cabeza.

Al arrancar tenemos la ROM ligerita y minimalista, preparada para poder poner mis podcasts y aplicaciones de senderismo. Un par de apuntes más por si quiero explorar esos caminos en el futuro:


Bueno, pues como aventuré las elecciones nos dejarían un panorama divertido. Entre eso y mis puñetas varias con Linux y sus variantes no hay manera de aburrirse.

Salud y aguas revueltas.

martes, 29 de diciembre de 2015

Configuracion de una impresora Multifunción Epson WorkForce Pro WF-8590 en el IES

En esta lluvia de millones que nos atenaza nos han llegado unas impresoras multifunción A3 Epson WorkForce Pro WF-8590 Series que nos vendrán muy bien con la impresión de planos y diseños varios y con la cartelería del centro. El problema es que son de inyección de tinta y esta por ver cuanto cuestan los repuestos y que tal aguantan nuestro verano extremo-y-duro. Ya haré un memorándum el próximo septiembre si sobrevivimos a la flama.

La he configurado para el uso normal sin problemas, pero he tenido algunos contratiempos para hacerla funcionar tal como quiero y paso a relatarlos por si hay que usarlos otra vez.

Drivers para Linux.

Los drivers se descargan como paquete .deb de la página de epson, en concreto estoy usando estos:
# dpkg -l | grep epson
ii  epson-inkjet-printer-escpr            1.6.1-1lsb3.2                     i386         Epson Inkjet Printer Driver (ESC/P-R) for Linux
En cups se da de alta sin problema, apareciendo como Epson WF-8590 (Seiko Epson Corporation LSB 3.2) (color, 2-sided printing).

Un primer problema es que al imprimir desde Linux lo hace con tonos muy tenues, como si estuviese en modo borrador. Eso se soluciona configurando en cups, dentro de las propiedades predeterminadas de la impresora el parámetro "Media Type->Plain papers – high".

Google Cloud Print.

La impresora es compatible con Google Cloud Print, lo que permite asociarla a una cuenta de Gmail e imprimir en ella desde cualquier lugar del mundo y desde la Estación Espacial Internacional habiendo iniciado sesión en dicha cuenta con Google Chrome. Esta opción es muy cómoda para la directiva, que puede mandar imprimir desde casa y encontrarse las cosas impresas al llegar al centro.

En las pruebas preliminares esta opción fallaba: al intentar registrar la impresora me decía que no había conexión y que revisase la configuración de red, pero mi compañero Esteban decía que en su IES la habían hecho funcionar: actualicé el Firmware a la última versión con el programa de Epson para tal fin (en esta ruta está dentro de la opción firmware), me aseguré de que el puerto 5222 estaba abierto en mi red (con http://portquiz.net:5222/ se comprueba en un periquete), .....

Al final el problema estaba en que, preso de la paranoia, había puesto un filtrado IP en la impresora para permitir imprimir solo a determinadas IP del IES. Dicho filtrado IP por lo visto también afecta a Google Cloud Print e imposibilita su uso. Desactivando el filtrado en cuestión se resuelve el problema. Es una lata dejarlo asi pero no hay otro remedio.

Conteo de paginas con tea4cups y pkpgcounter

Como siempre, al ser una impresora de red, me interesa que se cuenten las páginas que se imprimen desde determinados sitios. En las pruebas descubro que pkpgcounter siempre cuenta 1 página, independientemente del tamaño del documento. Estaba claro que no era capaz de procesarlo bien.

Como otras veces, lo primero que hago es capturar el fichero bruto .prn enviado a la impresora mediante el script asociado a tea4cups y me dispongo a analizarlo.

Después de investigar un rato averiguo que el fichero viene en formato ESC/P-R, que es una evolución del formato ESC/P2 tradicional de Epson. Pkpgcounter lo reconoce como ESC/P2 pero al ser un formato diferente no es capaz de contar bien las páginas. Tenía que averiguar cual es la cadena de bytes que hace la separación de páginas.

Afortunadamente, el driver de Epson es GPL, lo cual significa que tenemos el código fuente disponible. Lo descargo del primer lugar donde encuentro los fuentes: la página del paquete en Ubuntu (es la version 1.1.1, un poco antigua, pero no creo que esa parte haya cambiado mucho). Es un fichero epson-inkjet-printer-escpr-1.1.1.targ.gz que descomprimo y tras investigar un rato en los ficheros .c y .h y con un poco de intuición encuentro, que en el fichero ./epson-inkjet-printer-escpr-1.1.1/lib/escpr_cmd.c:

static const ESCPR_UBYTE1 cmd_EndPage[] = {
     0x1B,  'p', 0x01, 0x00, 0x00, 0x00,  'e',  'n',  'd',  'p'};
Por tanto, esta secuencia de 10 bytes son los números mágicos del fin de pagina.

Para que se tengan en cuenta al ejecutar pkpgcounter hay que modificar el fichero /usr/share/pyshared/pkpgpdls/escp2.py, quedando en negrita lo que debo añadir:
.....
....
marker4 = "\f\033@"
        
#  En ESC/P-R el fin de pagina es
#   {0x1B,  'p', 0x01, 0x00, 0x00, 0x00,  'e',  'n',  'd',  'p'}
#  Sacado del codigo fuente fichero escpr_cmd.c
marker5 = "\033p\001\000\000\000endp"
     
pagecount2 = max(data.count(marker2r), data.count(marker2rn))
pagecount3 = data.count(marker3)
pagecount4 = data.count(marker4)
pagecount5 = data.count(marker5)
         
if pagecount2 :    
 return pagecount2
elif pagecount3 > 1 :  
 return pagecount3 – 1
elif pagecount4 :    
 return pagecount4
elif pagecount5>=1:
 return pagecount5
else :
 return int(pagecount1 / 2)
....
....

Y con esto conseguimos que cuente bien este formato. Mandaría el parche al creador de pkpgcounter, pero ya he mandado otro y no me ha dicho nada, lo cual me hace pensar que nadie mantiene ya el programa. Bueno, pues aquí queda.

Compartir la impresora desde CUPS.

Al compartir la impresora desde CUPS con una máquina que hará de servidor de impresión me surgió un problema adicional: si imprimo desde clientes Windows y algunos Linux (tengo varios tipos de Debian, Ubuntu, Mint y luego mi Manjaro), los trabajos se pierden en el limbo y nunca llegan, sin dar ningún error visible.

Los únicos que no se perdían eran los enviados desde aquellos clientes en que la versión del driver era exactamente igual en máquina cliente y servidora. Por supuesto, eso eliminaba de forma fulminante a los Windows como posibles clientes y con ello el control de páginas impresas mediante tea4cups. Había que encontrar una solución.

Tras varias pruebas descubro el truco para evitarlo: dar de alta la impresora en el servidor de impresión con el driver “Local Raw Printer”, que debe ser un driver que envía las cosas tal cual le llegan, sin procesar. De esta manera el fichero de impresión llega ya preparado en ESC/P-R desde el driver del cliente, las páginas son contadas por pkpgcounter y todo es reenviado sin mayor problema a la impresora.

El único problema que tiene esto es intentar imprimir algo en local en la máquina servidora. Al ser el driver “Local Raw Printer” se envía sin procesar y obtenemos esa impresión tan espectacular de folios y folios de lo que los usuarios semiavanzados llaman “código máquina”.

Conteo de impresión a varias copias.

Otro problema que encontré con determinados drivers de Linux es que si enviaba una impresión de varias páginas y varias copias se producía un error muy irritante que sucede a veces: si el documento es de 3 paginas y se hacen 2 copias, el driver envía un documento de 6 páginas (3 x 2) y dice que haga 2 copias. La impresora ignora el parámetro número de copias y todo sale bien, excepto el conteo en tea4cups que cuenta 6x2=12 páginas en lugar de las 6 impresas.

Para evitarlo hay que modificar el script de seguimiento de impresión que es invocado desde tea4cups en los PC donde el driver haga esa pirula, quedando:

# cat /../.../..../ seguimiento_impresion

.....
.....
#Hay que convertir el valor de TEACLIENTHOST en un nombre de equipo.
if [ "$TEACLIENTHOST" == "localhost" -o "$TEACLIENTHOST" == "" ]
then
   equipo=$(hostname -s)
else
   if valid_ip $TEACLIENTHOST
   then
      equipo=$(host $TEACLIENTHOST | cut -d" " -f5 | cut -d"." -f1)
   else
      equipo=$TEACLIENTHOST
   fi
fi

#La impresora VGIM_JEFATURA mete el numero de copias en el conteo de paginas. 
# Un documento de 2 paginas impreso con 3 copias
# se manda con determinados drivers de linux  como "documento de 6 paginas con 3 copias", 
# lo que da un conteo de 18 en lugar de 6. Hay que corregir eso ajustando el $paginas que se ha
# obtenido con pkpgcounter. 
if [ "$TEAPRINTERNAME" == "VGIM_JEFATURA" ]
then
  $paginas = $(( $paginas / $TEACOPIES ))
fi

.....
.....

exit 0

De esta manera, al dividirlo por el número de copias el número de páginas coge su valor correcto.

Y con estas pequeñas recetas ya tenemos nuestra impresora operativa e integrada en la red del centro. Seguiremos informando....

domingo, 27 de diciembre de 2015

La conjura de los necios (II): cuando el río suena, agua lleva (y pulseaudio funciona).


Un problema que sucede frecuentemente en la vida es la sensación de "falsa unanimidad" o al menos "falsa mayoría" en muchos temas, en los que buena parte de aquellos con los que nos relacionamos, o a quienes escuchamos, coinciden con nosotros. No se dejen engañar: eso es un sesgo cognitivo.

Por eso es una costumbre buena para la salud mental escuchar opiniones de terceros y de contrarios, para salir de nuestro pequeño círculo y comparar hasta que punto tenemos razón o no, poniendo a prueba nuestras convicciones.

En todos estos quebrantos sobre la nueva dotación TIC que nos tienen ocupados (La conjura de los necios (I)) nos encontramos que al menos 125 de 160 administradores informáticos opinamos de igual manera (y el resto no se pronuncia en contra) sobre todo este proceso de introducción del software propietario como Caballo de Troya dentro un contrato TIC que se está ejecutando con un caos que ni el ejército de Pancho Villa. Esta mayoría "a la búlgara" hace sospechar a mi espíritu crítico que quizá no tengamos toda la razón....o quizá si la tengamos y que nuestras afirmaciones sean producto del sentido común mas evidente.

Este post que aquí enlazo del blog de Ramón Besonías, coordinador TIC del IES San José de Badajoz (tras este anuncio de reunión), en el que comparte las opiniones de los administradores informáticos además de reclamar también aspectos de su labor me hace pensar que efectivamene tenemos razón. Toda la razón. Gracias por tu apoyo, compañero.

Hay que recordar que la mayor parte de los coordinadores TIC hasta ahora han sido ajenos a todo este proceso, debido seguramente a su aislamiento y dispersión sin herramientas de comunicación de uso masivo y compartido (adicionalmente algunos, como los coordinadores TIC de las CEPA no han sido ni convocados a estas reuniones). Por tanto, el que la postura de un tercero, con la cualificación pertinente para que su opinión sea tenida en cuenta, sea similar a la de nuestro colectivo es un indicio de que vamos por el camino correcto.

Quizá nuestros superiores podrían pensar en el chiste:

Un conductor que circula por la autopista oye una noticia que daban en esos momentos por la radio que decía:
-Atención, se informa que hay un conductor loco por la autopista que circula en sentido contrario, se ruega precaución.
A lo que el conductor en cuestión dice asustado y dando sucesivos volantazos:
-¡Qué coño uno, si son todos!
Y aplicar algo de autocrítica, dejándose de noticias triunfalistas, y tramposas como esta que enlazo.

Feliz Saturnalia y entrada de año, compañeros.

miércoles, 16 de diciembre de 2015

Monitorizando nuestro SAI con nut (Parte 3)

Bueno, salimos del fango de la política, lo dejamos para mas adelante y seguimos con nuestras cosas.

Venimos de aquí y de aquí, donde vimos como controlar nuestro SAI con nut y poder manejar los eventos para enviar notificaciones a través del correo electrónico y ejecutar acciones personalizadas.

En esta entrada vamos a ver como monitorizar el SAI desde un PC donde no está conectado directamente (por ejemplo, desde nuestro PC de trabajo o desde un servidor distinto al que tiene el SAI conectado) para ello usaremos el sistema maestro-esclavo que implementa nut.

1. Configuración del maestro.

El maestro es el PC al que tenemos conectado nuestro SAI con un cable USB/Serie y se encarga de monitorizarlo directamente. En las dos entradas previas vimos como configurarlo en gran medida, pero si queremos que tenga esclavos que se conecten a él hay que modificar algunas cosas. Daremos un rápido repaso:

En /etc/nut/hosts.conf:
........
MONITOR salicru@localhost "SAI Salicru IES Virgen de Guadalupe"
En /etc/nut/nut.conf hay que cambiar el mode (antes estaba en standalone):
.....
MODE=netserver
......
El fichero /etc/nut/ups.conf lo dejamos igual. En /etc/nut/upsd.conf ponemos localhost y la IP de la máquina donde esta conectado el SAI:
LISTEN 127.0.0.1
LISTEN 172.X.Y.Z #IP de la máquina donde esta corriendo el nut.
En /etc/nut/upsd.users debemos incluir un usuario para los clientes/esclavo:
[admin]
password = pwd_admin
allowfrom = localhost local_network
actions = SET
instcmds = ALL

[control]
password = pwd_control
allowfrom = localhost local_network
upsmon master

[clientes]
password = pwd_clientes
upsmon slave
El fichero /etc/nut/upsmon.conf (es el que configura el proceso upsmon que monitoriza el SAI):
MONITOR salicru@localhost 1 control pwd_control master
RUN_AS_USER nut
MINSUPPLIES 1
SHUTDOWNCMD "/root/scripts/apagar_servidores.sh"
POLLFREQ 5
POLLFREQALERT 5
HOSTSYNC 15
DEADTIME 15
POWERDOWNFLAG /etc/killpower

NOTIFYCMD "/sbin/upssched"

NOTIFYMSG ONLINE "UPS: Normal state"
NOTIFYMSG ONBATT "UPS: On battery"
NOTIFYMSG LOWBATT "UPS: Battery low"
NOTIFYMSG FSD "UPS: Starting shutdown"
NOTIFYMSG COMMOK "UPS: Communication restored"
NOTIFYMSG COMMBAD "UPS: Communication lose"
NOTIFYMSG SHUTDOWN "UPS: Shutting down"
NOTIFYMSG REPLBATT "UPS: Replace battery"

NOTIFYFLAG ONLINE SYSLOG+WALL+EXEC
NOTIFYFLAG ONBATT SYSLOG+WALL+EXEC
NOTIFYFLAG LOWBATT SYSLOG+WALL+EXEC
NOTIFYFLAG FSD SYSLOG+WALL+EXEC
NOTIFYFLAG COMMOK SYSLOG+WALL+EXEC
NOTIFYFLAG COMMBAD SYSLOG+WALL+EXEC
NOTIFYFLAG SHUTDOWN SYSLOG+WALL+EXEC
NOTIFYFLAG REPLBATT SYSLOG+WALL+EXEC

RBWARNTIME 43200
NOCOMMWARNTIME 300
FINALDELAY 0

Los ficheros /etc/nut/upssched.conf, /etc/nut/upsset.conf y /etc/nut/upsstats.html quedan igual. Después de modificar todo esto reiniciamos los procesos:

# /etc/init.d/nut-server restart
# /etc/init.d/nut-client restart

2. Configuración del esclavo.

En el esclavo (que puede ser un PC normal desde el que queremos acceder al estado del SAI o bien otro servidor que quiere monitorizar el SAI pero no lo tiene conectado directamente) basta con instalar el paquete nut-client:
# apt-get install nut-client
Veamos ahora los ficheros que hay configurar para el esclavo. El primero es /etc/nut/nut.conf:
.....
MODE=netclient
......
Siguiente, /etc/nut/upsmon.conf:
MONITOR salicru@172.X.Y.Z 1 clientes pwd_clientes slave
MINSUPPLIES 1
SHUTDOWNCMD "/sbin/shutdown -h +0"
POLLFREQ 5
POLLFREQALERT 5
HOSTSYNC 15
DEADTIME 15
POWERDOWNFLAG /etc/killpower
RBWARNTIME 43200
NOCOMMWARNTIME 300
FINALDELAY 5

El fichero /etc/nut/upssched.conf no lo tocamos a no ser que queramos actuar ante los distintos eventos, en ese caso configurariamos upsmon.conf y upssched.conf como se hizo en la primera parte de esta serie de artículos. El resto de ficheros tampoco los tocamos.

Ahora reiniciamos el servicio:
# /etc/init.d/nut-client restart
Y preguntamos al SAI en el servidor remoto "Ola, ke ase?":
# upsc salicru@172.X.Y.Z
Si todo está bien nos contestará con:
battery.charge: 100
battery.voltage: 27.60
battery.voltage.high: 26.00
battery.voltage.low: 20.80
battery.voltage.nominal: 24.0
device.type: ups
driver.name: blazer_usb
driver.parameter.bus: 004
.....
.....

Si no funciona siempre podemos ejecutar a mano:
# upsmon -D 
que arranca el cliente nut en modo debug, lo cual nos muestra los posibles errores por pantalla.

3. Usando en Debian Wheezy knutclient.

Otra forma interesante de monitorizar el SAI que usa Paco, mi compañero del IES García Téllez, es con el cliente gráfico knutclient, que ejecuta un programa en el systray del escritorio de tu PC y con un clic de ratón te muestra el estado del SAI.

El paquete no existe para Debian, pero podemos bajar la versión knutclient-1.0.4-2.mga2.i586.rpm de Mageia en este enlace y luego convertirla en un paquete .deb con el comando alien de Debian, instalando después el paquete creado:.

# wget ftp://fr2.rpmfind.net/linux/mageia/distrib/2/i586/media/core/release/knutclient-1.0.4-2.mga2.i586.rpm
....
# alien knutclient-1.0.4-2.mga2.i586.rpm
....
# dpkg -i knutclient_1.0.4-3_i386.deb

Esta versión es totalmente compatible con nuestro Debian Wheezy, aunque quizá para versiones mas modernas de Debian habría que coger también una versión mas moderna del paquete. El contenido del paquete es:

/.
/usr
/usr/share
/usr/share/applications
/usr/share/applications/kde4
/usr/share/applications/kde4/knutclient.desktop
/usr/share/icons
/usr/share/icons/locolor
/usr/share/icons/locolor/16x16
/usr/share/icons/locolor/16x16/apps
/usr/share/icons/locolor/16x16/apps/knutclient.png
/usr/share/icons/locolor/32x32
/usr/share/icons/locolor/32x32/apps
/usr/share/icons/locolor/32x32/apps/knutclient.png
/usr/share/icons/hicolor
/usr/share/icons/hicolor/22x22
/usr/share/icons/hicolor/22x22/apps
/usr/share/icons/hicolor/22x22/apps/knutclient.png
/usr/share/icons/hicolor/16x16
/usr/share/icons/hicolor/16x16/apps
/usr/share/icons/hicolor/16x16/apps/knutclient.png
/usr/share/icons/hicolor/48x48
/usr/share/icons/hicolor/48x48/apps
/usr/share/icons/hicolor/48x48/apps/knutclient.png
/usr/share/icons/hicolor/32x32
/usr/share/icons/hicolor/32x32/apps
/usr/share/icons/hicolor/32x32/apps/knutclient.png
/usr/share/locale
/usr/share/locale/pt_BR
/usr/share/locale/pt_BR/LC_MESSAGES
/usr/share/locale/pt_BR/LC_MESSAGES/knutclient.mo
/usr/share/locale/ru
/usr/share/locale/ru/LC_MESSAGES
/usr/share/locale/ru/LC_MESSAGES/knutclient.mo
/usr/share/locale/uk
/usr/share/locale/uk/LC_MESSAGES
/usr/share/locale/uk/LC_MESSAGES/knutclient.mo
/usr/share/locale/de
/usr/share/locale/de/LC_MESSAGES
/usr/share/locale/de/LC_MESSAGES/knutclient.mo
/usr/share/locale/fr
/usr/share/locale/fr/LC_MESSAGES
/usr/share/locale/fr/LC_MESSAGES/knutclient.mo
/usr/share/locale/pl
/usr/share/locale/pl/LC_MESSAGES
/usr/share/locale/pl/LC_MESSAGES/knutclient.mo
/usr/share/locale/es
/usr/share/locale/es/LC_MESSAGES
/usr/share/locale/es/LC_MESSAGES/knutclient.mo
/usr/share/locale/cs
/usr/share/locale/cs/LC_MESSAGES
/usr/share/locale/cs/LC_MESSAGES/knutclient.mo
/usr/share/locale/it
/usr/share/locale/it/LC_MESSAGES
/usr/share/locale/it/LC_MESSAGES/knutclient.mo
/usr/share/doc
/usr/share/doc/HTML
/usr/share/doc/HTML/cs
/usr/share/doc/HTML/cs/knutclient
/usr/share/doc/HTML/cs/knutclient/mkicker-cs.png
/usr/share/doc/HTML/cs/knutclient/knutclient-cs.png
/usr/share/doc/HTML/cs/knutclient/variables-cs.png
/usr/share/doc/HTML/cs/knutclient/index.docbook.gz
/usr/share/doc/HTML/cs/knutclient/psetting-cs.png
/usr/share/doc/HTML/cs/knutclient/msetting-cs.png
/usr/share/doc/HTML/cs/knutclient/index.cache.bz2
/usr/share/doc/HTML/cs/knutclient/fsetting-cs.png
/usr/share/doc/HTML/cs/knutclient/new-cs.png
/usr/share/doc/HTML/cs/knutclient/ksetting-cs.png
/usr/share/doc/HTML/cs/knutclient/tkicker-cs.png
/usr/share/doc/HTML/cs/knutclient/usetting-cs.png
/usr/share/doc/HTML/cs/knutclient/asetting-cs.png
/usr/share/doc/HTML/en
/usr/share/doc/HTML/en/knutclient
/usr/share/doc/HTML/en/knutclient/asetting-en.png
/usr/share/doc/HTML/en/knutclient/knutclient-en.png
/usr/share/doc/HTML/en/knutclient/index.docbook.gz
/usr/share/doc/HTML/en/knutclient/variables-en.png
/usr/share/doc/HTML/en/knutclient/fsetting-en.png
/usr/share/doc/HTML/en/knutclient/index.cache.bz2
/usr/share/doc/HTML/en/knutclient/mkicker-en.png
/usr/share/doc/HTML/en/knutclient/ksetting-en.png
/usr/share/doc/HTML/en/knutclient/psetting-en.png
/usr/share/doc/HTML/en/knutclient/msetting-en.png
/usr/share/doc/HTML/en/knutclient/new-en.png
/usr/share/doc/HTML/en/knutclient/usetting-en.png
/usr/share/doc/HTML/en/knutclient/tkicker-en.png
/usr/share/doc/knutclient
/usr/share/doc/knutclient/README
/usr/share/doc/knutclient/ChangeLog.gz
/usr/share/doc/knutclient/AUTHORS
/usr/share/doc/knutclient/changelog.Debian.gz
/usr/share/doc/knutclient/copyright
/usr/share/apps
/usr/share/apps/knutclient
/usr/share/apps/knutclient/knutclientui.rc
/usr/share/apps/knutclient/knutclient.notifyrc
/usr/share/apps/knutclient/pics
/usr/share/apps/knutclient/pics/knc_conn.png
/usr/share/apps/knutclient/pics/knc_batt.png
/usr/share/apps/knutclient/pics/knc_ups.png
/usr/share/apps/knutclient/pics/knc_mpref.png
/usr/share/apps/knutclient/pics/knc_dock.png
/usr/share/apps/knutclient/pics/knc_panel.png
/usr/share/apps/knutclient/pics/knc_upses.png
/usr/share/apps/knutclient/pics/knc_mset.png
/usr/share/apps/knutclient/pics/knc_error.png
/usr/share/apps/knutclient/pics/knc_main.png
/usr/share/apps/knutclient/pics/knc_analog.png
/usr/bin
/usr/bin/knutclient
/usr/share/doc/HTML/cs/knutclient/common
/usr/share/doc/HTML/en/knutclient/common
Para que se arranque automaticamente al iniciar sesión habría que copiar /usr/share/applications/kde4/knutclient.desktop en /etc/xdg/autostart/knutclient.desktop. Durante las pruebas de configuración lo mejor es arrancarlo a mano desde terminal tecleando "knutclient". Al ejecutarla se minimiza al systray, en la parte derecha del panel:


Pulsando sobre ella con el botón derecho aparece el menú:


Elegimos "Opciones" para configurar:


Y damos de alta nuestro SAI (basta con dar dirección del SAI-ip o nombre de host-, nombre, usuario y contraseña, tal como hicimos en el apartado 2 en upsmon.conf):


Una vez configurado, pulsando sobre el icono en el systray con el botón izquierdo aparecerá el cuadro de mandos con los indicadores:
La configuración se hace mediante el entorno gráfico, pero se guarda en un fichero que quedaría mas o menos así:
# cat ~/.kde/share/config/knutclientrc 
APanelBackGroundColor=192,192,192
ActiveUps=Salicru
AnalogErrorColor=255,0,0
...............
...............
Width 1440=978

[UPS 0]
Delay=5000
Name=Salicru
Password=pwd_cliente
Port=3493
SavePassword=true
UpsAddress=172.X.Y.Z
UpsName=salicru
UserName=cliente
...............
...............
Var 9=7

Si no nos funciona la conexión desde knutclient, la forma mas sencilla de revisar todo es configurar el cliente como en el apartado 2, con nut-client y una vez funcione, meter la configuración que ya hemos probado en knutclient.

4. Bonus track: comandos útiles y curiosos.

Veamos varios comandos y trucos que pueden venir para manejar el nut y probarlo.

El primero es como generar eventos para verificar que funciona el log, el envío de correos e incluso el apagado. Si hacemos
# upssched
Error: UPSNAME and NOTIFYTYPE must be set.
This program should only be run from upsmon.
Nos da un error diciendo que no va, pero si lo hacemos así:
# export UPSNAME="salicru@localhost"
# export NOTIFYTYPE="ONBATT"
# upssched
Se genera el evento ONBATT que será procesado por el script upssched-cmd como si el SAI se hubiera puesto en modo batería realmente.

El segundo es como dar ordenes inmediatas al SAI:
# upscmd -l salicru
Instant commands supported on UPS [salicru]:

beeper.toggle - Toggle the UPS beeper
load.off - Turn off the load immediately
load.on - Turn on the load immediately
shutdown.return - Turn off the load and return when power is back
shutdown.stayoff - Turn off the load and remain off
shutdown.stop - Stop a shutdown in progress
test.battery.start - Start a battery test
test.battery.start.deep - Start a deep battery test
test.battery.start.quick - Start a quick battery test
test.battery.stop - Stop the battery test
Por ejemplo, con:
# upscmd salicru@localhost beeper.toggle
Desactivamos el molesto beeper (pitido) si está sonando.

El tercero es como simular una orden de apagado inmediata (fsd=forced shutdown):
# upsmon -c fsd
Hay varios comandos más de todo tipo, estos son solo un repasito de lo que me ha resultado mas interesante.

5. Bonus track 2: apagado de los servidores desde nut.

Creo que la última cosa que queda pendiente es el apagado de los servidores desde nut cuando la batería está ya tiritando. Hay dos maneras:
  • La primera es al ejecutarse el comando definido en upsmon.conf mediante SHUTDOWNCMD. Se supone que dicho comando se ejecuta mas o menos cuando salta el evento LOWBATT, pero en mis pruebas no hay manera de hacer que salte automáticamente dicho evento (ni de definir un umbral de carga para que salte), quizá porque el driver del SAI no interpreta bien el dato de la carga de la batería.
  • La segunda es con el método de usar en upssched.conf un TIMER -de los minutos que estimemos oportunos- que llame al script de manejo de eventos con "ups-on-battery-shutdown". Esto hará que cuando el sistema lleve tirando de batería X minutos se llame a dicho script, que a su vez llama a otro script que denominé en anteriores entradas "apagar_servidores.sh", que se encarga de hacer shutdown en los servidores. El problema encontrado aquí es que upssched-cmd se ejecuta como usuario "nut" y por tanto, no puede hacer un shutdown así por las buenas donde nos plazca.
Como se ve, ninguno de los dos métodos funciona por lo que mis máquinas no se apagan de forma ordenada si se agota la batería, algo muy lamentable. ¿Como solucionarlo?. Cuando lo sepa lo cuento, ya que:


Continuamos pronto, ya con el R78 mas debilitado si hubiere suerte tras las próximas elecciones.



miércoles, 9 de diciembre de 2015

La conjura de los necios (I): cuando Microsoft entra por la puerta, el software libre salta por la ventana.

En los últimos meses ha habido bastante agitación en nuestro colectivo de administradores informáticos de los IES, IESO y CPR de la red de centros públicos de la Junta de Extremadura. La causa son dos problemas independientes pero interrelacionados:

El primero es la total ausencia de comunicación con la jefatura del Servicio de Tecnologías de la Información y la Comunicación, del que dependemos directamente para el desempeño de nuestras funciones. No es de recibo que dicha estructura nos haya ignorado de forma reiterada durante años, sin ningún tipo de comunicación y menos aún de feedback. Eso ha provocado los siguientes problemas:

  • Años después muchos usuarios todavía no tienen claras cuales son nuestras funciones, lo cual es normal que pase con el personal informático pero no de forma tan exagerada como es nuestro caso, lo que da lugar tanto a anécdotas divertidas como a malentendidos.
  • Nunca se nos ha tenido en cuenta a la hora de la toma de decisiones en nuestra faceta de técnicos, minusvalorando nuestra formación como Ingenieros Técnicos en Informática e Ingenieros en Informática.
  • Nunca se nos ha tenido en cuenta a la hora de la toma de decisiones en nuestra faceta de personal de primera línea. Estamos en la base de la pirámide del soporte a los centros y tener en cuenta nuestra opinión, simplemente por la experiencia que da estar en el frente, antes de implantar algunas soluciones (tomada en despachos lejanos y ajenos a la realidad) hubiera ahorrado mucho dinero y quebrantos a la Administración Educativa.

De todas maneras, esto son disputas internas que han de resolverse también internamente, aunque su existencia haya motivado la aparición del problema más grave.

El segundo problema quiebra los principios que han fundado la política en materia de TIC de Extremadura en los últimos 13 años, según esta secuencia de hechos:

  1. El anterior gobierno de la Junta de Extremadura (PP) dejó como herencia una licitación por importe de 38 millones de euros (recibidos de fondos europeos y de Red.es) en la que se incluía el pago de licencias para la introducción de forma generalizada del software propietario (principalmente Microsoft y Adobe) en la red de centros públicos.
  2. Como al parecer el nuevo gobierno no tenía interés en enmendar la licitación y nuestro Servicio la redactó y la convocó tal cual estaba diseñada desde un principio, nuestro colectivo, que no había sido consultado para nada en los detalles técnicos de la los pliegos y como conocedores de primera mano de la realidad de los centros educativos, se movió: se publicó una carta abierta de protesta, se hicieron entrevistas en radio y se consiguió visibilidad en los medios de comunicación.
  3. Debido seguramente al pánico que sienten los políticos a aparecer así en los medios de comunicación, se convocó una reunión en julio de 2015 a la que asistimos miembros de mi colectivo y de varios mas: profesorado TIC, directores de centros educativos, personal de nuestro Servicio y varios altos cargos del gobierno del PSOE.
  4. En dicha reunión el sentir mayoritario era volver a la situación anterior, con apoyo total al software libre, aunque la Jefatura de Servicio (tanto el Jefe de Servicio como sus asesores) defendían la introducción del software propietario en igualdad de condiciones en base a una encuesta realizada hace años a los docentes (la cual, curiosamente, la inmensa mayoría de los docentes consultados por mí no recuerda haber hecho), encuesta de la que no tenemos datos brutos y solo conclusiones (lo cual es una ofensa mayúscula para un defensor a ultranza de la transparencia como es mi caso) y que esas conclusiones apuntan al disparate de que si se da una oportunidad al software propietario, las TIC serán mas usadas por el profesorado.
  5. Durante la reunión, después de oír a todas las partes, los altos cargos reafirmaron su apuesta por el software libre y al finalizar se consensuó que se volvía al sistema anterior: prioridad absoluta del software libre y se dejaba al software propietario solo para casos debidamente justificados. Se acordó no paralizar la licitación en marcha ya que los plazos se agotaban, pero no se daría uso a las licencias de software propietario adquiridas. En pocos días se emitieron esperanzadoras notas de prensa al respecto.
  6. Una vez se ha resuelto la licitación (sobre cuyos claroscuros hablaré en otro momento) y los centros han empezado a recibir el material asignado, nos hemos llevado la sorpresa de que lo comprometido se ha obviado por completo: los dispositivos vienen con arranque dual (Windows-Ubuntu) activado y no tenemos instrucción alguna de como manejar esta situación. Nadie responde a nuestras preguntas.
  7. Nuestras quejas, tanto en foros internos como en medios públicos (1, 2) y nuestros intentos de nuevos contactos con la Administración Educativa que hay por encima de la Jefatura de Servicio no han tenido éxito y lo más que hemos conseguido es una convocatoria de reunión con la Jefatura de Servicio en enero de 2016 (ya hemos tenido varias convocatorias de reunión no celebradas) en la que sospechamos se aplicará una política de hechos consumados y se nos comunicará que esto son lentejas...
  8. Mientras tanto el PSOE quizá seguirá manteniendo un discurso cuando no gobierna ("apoyamos el software libre") y unas acciones y hechos totalmente contrarios cuando gobierna ("es que ..."), como bien avisan ahora sus oponentes políticos.
  9. Y finalmente mis compañeros administradores de los centros seguirán sacando el trabajo adelante, con las escasas herramientas y formación que nos dan, y aplicando mucha solidaridad y trabajo colaborativo. Como dice el Cantar del Mio Cid "¡Que buen vasallo si hubiese un buen Señor!".

Mis conclusiones:

  • Pensar que por implantar software propietario, contraviniendo la legislación y Estatuto de Autonomía propios, se va a incrementar el uso de las TIC en el sistema educativo es muestra de no tener ni la menor idea de cual es la causa de que una parte del colectivo docente no use las TIC en el aula.
  • Meter software propietario como opcional al software libre es dinamitar el uso del software libre, que no se usará por simple pereza.
  • Como ya está mas que probado, el software propietario te lleva a un mercado cautivo del que es muy difícil salir. Un paso en esa dirección puede atarte durante años .

Y hasta aquí puedo leer....por ahora.

miércoles, 2 de diciembre de 2015

Una modesta propuesta sobre el montaje de pizarras digitales

A estas alturas del baile llevamos ya experimentadas varias soluciones de implantación de pizarras digitales en nuestras aulas. Las mas extendidas (las SmartBoard y Galneo) nos han obligado a adaptar el aula a las limitaciones del cableado de la pizarra. Me explico:

  • En las SmartBoard 480 el cable USB es de datos y alimentación, mientras que el PC que la controla está en la mesa del profesor. Hace falta un cable USB activo de no más de 5 metros que obliga al PC a estar como máximo a 5m de la pizarra, lo que provoca cables tirantes y problemas de señal inestable en cuanto este se afloja un poco alguna de la conexiones.
  • En las Galneo tenemos el mismo problema con el cableado, pero se adopta la idea de dejar el PC debajo de la pizarra en una caja que sobresale hasta 30cm de la pared y que parece hecha aposta para quebrar rótulas, convirtiendo "ergonomía" en una palabra utópica. Del PC salen cables de VGA, red y usb para teclado/ratón/pendrive que van canalizados hasta el puesto del profesor

En resumidas cuentas, el diseño ha optado por adaptar el aula al dueto PC-pizarra, que deben estar separadas por un máximo de 5 metros de cable (menos en línea recta) en lugar que sean PC y pizarra los que adapten su ubicación a la morfología del aula, como sería lo razonable. Me recuerda esta bonita historia:

Un señor acudió un sastre y le entregó una pieza de fino cachemir a fin de que le confeccionara un traje. Le tomó las medidas el maestro y unas semanas después lo llamó por teléfono a su casa para avisarle que el traje estaba listo. Se lo probó el señor. El traje era un desastre: las perneras del pantalón le llegaban apenas al tobillo; una manga de la chaqueta le colgaba casi hasta tocar el suelo, en tanto que la otra ni siquiera alcanzaba a cubrirle el codo. "Oiga, maestro -le dice- este traje está mal hecho. Mire qué mal me queda". "El traje está perfecto, caballero -contesta el ruin tijera-. El problema es de postura. Mire: levante usted el brazo derecho hacia adelante. Muy bien. Ahora encoja el izquierdo y llévelo hacia atrás. Perfecto. Ahora quiébrese usted por la cintura y doble las piernas abriéndolas un poco. Excelente. ¿Lo ve? Así las mangas de la chaqueta alcanzan su debida dimensión, y las perneras del pantalón le cubren ya lo necesario".

No reclamó ya más el cliente, pues era hombre apocado, y procuraba siempre evitar las discusiones. Salió, pues, de la sastrería caminando en la postura que el sastre le había indicado: un brazo estirado hacia arriba y adelante; el otro doblado hacia atrás; el cuerpo encorvado, y con las piernas torcidas. Comparado con él Quasimodo estaba más derecho que una vela. Así, todo deforme y contrahecho, iba por la calle el lacerado cuando lo vieron dos sujetos que pasaban. Le dice uno al otro, compasivo: "Pobre infeliz. Mira qué jodido está". "Sí -concede el otro-. Pero qué buen sastre tiene"

Entonces, yo me pregunto si no se puede enfocar el problema de esta manera que voy a proponer. Primero hablemos del hardware:

  • El PC en su sitio, en la mesa del profesor.
  • La pizarra donde mejor quede en el aula, sea cual sea la distancia que la separe del PC.
  • Junto o tras la pizarra una Raspberry Pi o cualquier miniordenador alimentado por un enchufe normal de corriente y que por su puerto USB se conecta a la pizarra con un cable corto que le da alimentación eléctrica y le permite comunicarse con ella.
  • La Raspberry Pi y el PC están conectados por un cable ethernet debidamente canalizado, que puede tener decenas de metros de largo e ir por sitios donde sea poco llamativo y/o molesto.


En cuanto al software, podría haber dos soluciones:

  • Solución A: usando usb-over-ip instalando el server en la Raspberry Pi para compartir la conexión USB con el pc mediante una conexión IP. El PC remoto tendría instalados el cliente usb-over-ip y los drivers, detectando la pizarra como si estuviese conectada a un puerto USB real propiamente suyo. Este sistema ya lo implementé por mi cuenta de forma bastante satisfactoria reutilizando un router con OpenWrt, un aparato mucho menos versátil que una Raspberry.
  • Solución B: la Raspberry Pi tendría instalado el driver de la pizarra, que tras procesar la señal que llega obtiene unas coordenadas X-Y y un evento de botones de ratón. Esos datos se comparte via TCP/IP con el PC. Si hay que hacer algún pre-procesado de la señal (por ejemplo la triangulación de señal de las cámaras de la SmartBoard 480 para determinar la posición X e Y, realizada por el ejecutable binario nwfermi_daemon) se hace en la propia Raspberry, liberando de esta tarea al PC del profesor.

    ¿Como llega la información de coordenadas y botones al PC?: pues como se hace en cualquier herramienta de "ratón remoto", Synergy por ejemplo o la miríada de ellas que hay en en Google Play que convierten un móvil/tablet Android en un touchpad que controla remotamente el PC: hay un programa servidor, que se ejecuta en la Raspberry y un programa cliente en el PC del profesor, que conectan por un socket TCP/IP y se transmiten la información. El programa cliente utiliza cualquiera de las múltiples herramientas que hay (por ejemplo ésta) para emular el movimiento del ratón.

    Un enfoque mas trabajado y bonito sería implementar un driver para el PC, con un frontend con apariencia de dispositivo HID/ratón que se muestra al sistema como un dispositivo /dev/XXXX y un backend que conecta via TCP/IP con la Raspberry Pi para leer las coordenadas y estado de los botones del servidor que se ejecutaría en la misma. Parece rimbombante pero no es muy difícil de hacer si se cuenta con el tiempo para ello.

Bueno, pues eso es todo: una modesta, barata y sencilla propuesta para montajes futuros y que pueden aplicarse también a montajes presentes donde queramos romper la cadena inelástica que obliga a tener muy próximos pizarra y PC, con grandes problemas derivados de tan absurda limitación.

Fin de impresión.

lunes, 23 de noviembre de 2015

Expediente X(org)

Dado que la administración de sistemas es pariente lejana del vudú, a veces pasan cosas muy misteriosas en nuestras máquinas. Hay aplicaciones que no funcionan como debieran mientras que en otros PC no dan problemas. Voy a contar 3 casos que me han tocado de cerca:
  • En las LibreOffice, al ir escribiendo un documento de texto se quedaban en blanco determinadas partes de la pantalla, siendo imposible ver lo escrito.
  • El pseudo-driver de las pizarras Interwrite, el Device Manager (hecho en Java, toma moreno), no arrancaba en un PC y por tanto no se mostraba el icono del driver en el panel. Lanzando el LinuxLauncher.sh a mano desde un terminal de las X acababa dando una excepción y un error del tipo:
    
    The error was 'BadMatch (invalid parameter attributes)'.
     (Details: serial 253 error_code 8 request_code 73 minor_code 0)
     (Note to programmers: normally, X errors are reported asynchronously;
      that is, you will receive the error a while after causing it.
      To debug your program, run it with the --sync command line
      option to change this behavior. You can then get a meaningful
      backtrace from your debugger if you break on the gdk_x_error() function.)
    
  • En el software Notebook de las pizarras Smartboard hay una funcionalidad llamada Screen Shade que simula una cortinilla que puedes mover y tapar parte de la imagen (como en los chistes "se baja el telón...") desde los 4 laterales. Al usarlo no funcionaba y no tapaba nada al correr/descorrer las cortinas.

Todo estos expedientes X, que parecen problemas de la aplicación, son realmente problema de la versión o configuración del driver de las X que usamos (es decir, son expedientes X.Org). Hay una manera rápida y segura de confirmarlo: no usando dicho driver y repitiendo la acción, ¿cómo "no usamos dicho driver"?. Bueno, podríamos modificar /etc/X11/xorg.conf para cargar el driver Vesa y reiniciar las X para hacer la prueba, pero no hace falta ser tan drásticos. Hay un par de maneras más sencillas:

  • Para probarlo con una aplicación concreta (problema anterior de las LibreOffice): desde otro PC entrar con
    # ssh -X usuario@ip-pc-problematico
    
    Y una vez aquí lanzamos la aplicación desde línea de comandos y probamos a intentar repetir el problema. En el caso de LibreOffice ya no se hacían "invisibles" los caracteres escritos.
    La solución que encontraron mis compañeros fue cambiar el driver usado de nouveau a nvidia.
  • Para probarlo con el escritorio completo (problema anterior del Device Manager de Interwrite o del Screen Shade de Smart Notebook) lo mas rápido es usar xrdp en el PC que da el problema:
    # apt-get install xrdp
    
    y conectar mediante rdesktop a él remotamente desde otro:
    # apt-get install rdesktop
    # rdesktop ip-pc-problematico
    
    Y una vez hemos hecho login en el escritorio remoto vemos que el problema ya no sucede (ni el de Interwrite ni el de Smartboard).
Aquí vemos, dentro de una conexión xrdp, el Device Manager ejecutándose en la parte derecha del panel:
En este caso la solución que encontré fue cambiar el xorg.conf para que la aceleración pasase de ser EXA a SNA.

Y aquí el Notebook con el telón a medio descorrer:
En este caso no he encontrado todavía la solución, pero estoy en ello :-).

Con esto nos queda claro que haciendo la conexión con ssh -X o rdesktop, que no usan el driver X de la máquina destino para los gráficos, no existe ninguno de los problemas descritos. El problema está por tanto en el driver X o en su configuración.

A partir de aquí habría que investigar si procede cambiar el driver (actualizando o instalando la versión propietaria del mismo) o bien generar un xorg.conf y retocar sus esotéricos parámetros (como siempre, a ciegas y sin tener ni idea de lo que estamos haciendo). Con eso tendremos el Expediente X(org) resuelto.


Hasta pronto.....