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

lunes, 30 de noviembre de 2020

Cacharreo (IV): sustituir la fuente de alimentación de los altavoces de las pizarras Smart

Nuestras pizarras Smart 480 tienen estos altavoces tan majos:

Ya tienen varios años y van sufriendo bajas. La pieza que suele fallar es la fuente de alimentación, ubicada tras la pizarra y quemada en alguna subida de tensión:

Es una fuente de 18V y 3A, bastante rarita de encontrar, modelo GPE602-180300D que solo aparece en ebay USA a precio desorbitado. Además el conector de la clavija de alimentación tiene un diámetro un poco particular (algún día tendremos que hablar sobre este tema). Las fuentes mas parecidas que pude encontrar son las de los miniportátiles, de las cuales tenemos una burrada de ellas. Por ejemplo la de los miniportatiles APD:

Son 19V y 2.1A. En cuanto al voltaje la diferencia entre 18V y 19V normalmente no importa, lo que no podemos es meter 24V o 36V, ya que eso quemaría los altavoces. Por otro lados están los amperios: aqui podemos pasarnos tres pueblos sin problema ya que los altavoces cogen lo que necesitan y lo demás se ignora. El problema es que no es fácil encontrar fuentes de 3A, lo típico que tengamos 2.1A, como nos pasa ahora. Por enchufar esta fuente no se van a quemar los altavoces, el único problema sería que no diese la suficiente potencia para alimentar los mismos y no se encendiesen.

El otro problema es la clavija: la que tiene la fuente APD no entra en los altavoces, es más pequeña. Podemos cortar el cable de ambas fuentes, original y la del portátil, e intercambiar los extremos finales empalmando (ojo al empalmar, hay que respetar la polaridad + y -), pero hay una solución menos destructiva que solo nos haría cortar el cable de la fuente original (que, recordemos, está ya perdida). Para montajes eléctrónicos tengo estos conectores comprados en Amazon:

Tienen un tamaño estándar y la clavija del portátil APD entra perfectamente en el conector hembra. Así que corto el final del cable de la fuente de alimentación original de los altavoces y lo conecto a las clemas de la clavija (insisto: ojo con la polaridad. En mi caso el cable con la linea discontinua blanca es el positivo y el otro, sin linea alguna, es el negativo, pero no siempre es así. Lo mejor es ayudarse de un multímetro para no meter la pata):

A continuación, lo conecto a la fuente del miniportátil APD quedando todo:

De esta manera evitamos cortar el cable de la fuente APD, sería simplemente conectarla a este alargador y enchufarlo al altavoz.

Bueno, pues hecha conexión verifico que funciona y los altavoces van sin problema, pero tengo que comentar varias cosas muy importantes:

  • Probé con varias fuentes de otros portátiles similares (MSI, INVES) y no funcionaron. No daban suficiente potencia en amperios.
  • La causa del problema anterior es que muchas fuentes de alimentación tienen un circuito de seguridad que hace que se desconecten si les pedimos demasiada potencia. Evidentemente, la fuente APD no tiene este circuito y está trabajando por encima de su potencia sin apagarse.
  • ¿Es esto peligroso?: bueno, relativamente. Tengo montajes de este tipo alimentando aparatos eléctricos como una sierra caladora y no he tenido ningún problema. En el peor de los casos lo que podría suceder es que se quemase la propia fuente de alimentación por el sobreesfuerzo exigido.
  • ¿Funciona?: si. Llevo ya mas de 2 meses con el montaje y no hay problema. Me consta que hay compañeros con el mismo montaje hace años sin mayor problema. El único fallo previsible es que se acorte la vida de la fuente y haya que poner otra. No importa, total, tengo decenas.

Pues nada, taluec!

domingo, 29 de noviembre de 2020

Pasar a PDF el contenido de un blog de Blogger.

Tras 266 entradas he pensado que es un buen momento de hacer un backup de los datos del blog y tenerlos en una versión offline y legible.

Blogger tiene una función de backup, que genera un XML monstruoso, con una combinación de HTMLy XML para hacerlo visible en un navegador web, pero en un formato muy poco estructurado y que no incluye las imágenes. De todas maneras no es mala práctica bajar de vez en cuando este XML para tener una salvaguarda por si acaso.

Buscando en Internet, hay servicios online que te permiten convertir tu blog en un documento PDF o DOC, como BlogBooker, pero son de pago. Tienen un modo demo en que te permiten convertir varias entradas y la verdad es que quedan bastante bien.

Yo voy a intentar hacer algo mas modesto, pero que me salga gratis. Lo primero es descargar el XML del que hablamos antes, ya que ahí están todos los posts realizados al blog. La idea es extraer la URL de todas las entradas y convertirlas una a una en PDF.

1. Encontrar la URL de cada artículo del blog.

La URL de cada entrada del blog está dentro del galimatías del XML, probando y probando he logrado extraerlas todas con esta expresion regular de grep:
# grep -Eoi "'https://2tazasdelinux[^']+html'" blog-11-21-2020.xml
....
'https://2tazasdelinux.blogspot.com/2019/02/configuracion-e-impresion-con-impresora.html'
'https://2tazasdelinux.blogspot.com/2020/05/otra-herramienta-de-control-remoto.html'
'https://2tazasdelinux.blogspot.com/2020/05/otra-herramienta-de-control-remoto.html'
'https://2tazasdelinux.blogspot.com/2018/01/poner-las-aplicaciones-de-manjaro-en.html'
'https://2tazasdelinux.blogspot.com/2016/04/recopilar-mediante-puppet-de-forma.html'
....
Luego los ordenamos y eliminamos repetidos con:
#  grep -Eoi "'https://2tazasdelinux[^']+html'" blog-11-21-2020.xml | sort | uniq
2. Convertir una URL en un PDF claro y legible.

Con esto ya tenemos las URL de todas las entradas del blog. Ahora hay que iterar sobre ellas y convertirlas a PDF. Para ello usaremos wkhtmltopdf. El problema de convertirlas a PDF es que las páginas web son bastante barrocas entre cabeceras, pies, menús laterales, ventanas emergentes de aviso de cookies (maldigo desde aquí al que tuvo esa ocurrencia). Por ejemplo:
# wkhtmltopdf 'https://2tazasdelinux.blogspot.com/2020/11/usando-polkit-para-permitir-o.html' out.pdf
Genera un documento pdf como este:




La información está, pero es muy poco legible. Hay varios problemas que resolver:
  • El fondo del blog molesta visualmente: se puede quitar ejecutando wkhtmltopdf con la opción --no-background.
  • El texto no ocupa todo el ancho de la página: habría que modificar el diseño del blog para aumentar el ancho.
  • Los menús y paneles de la parte derecha de la página también molestan y deben ser ocultados.
  • El aviso de las cookies y la barra de navegacion superior también deberían desaparecer.
Para aumentar el ancho de la página y quitar los menús y paneles de la parte derecha hay que modificar el diseño del blog. Esto es muy personal, ya que cada uno tiene el tema de blog que le sale de las narices. En mi caso tengo el Simple Pale un poquitín personalizado. Antes de nada se aconseja hacer un backup del tema del blog, cosa que también se explica en el enlace que hemos pasado al principio del mensaje. Una vez hecho vamos a meternos a retocar el tema. Mostraré donde he tocado para despejar el mío:

Pinchando en Personalizar iríamos luego a Ajustar ancho y Diseño.
Ponemos el diseño en una sola columna:
Luego aumentando el ancho a 1200, nos quedaría:
Así queda bastante mas despejado. Todos los paneles laterales se han ido al final de la página y seguirían saliendo. Podríamos eliminar esos paneles sacándolos del diseño, pero veremos ahora otro sistema para ocultarlos.

Al hacer la captura nos aparece la ventanita de las cookies y la barra de navegacion superior. Eso no se puede quitar tocando el tema del blog, pero wkhtmltopdf permite ocultarlo por otra vía: el parámetro "--user-style-sheet estilo.css", que nos permite modificar los estilos de la página original antes de hacer la captura. Usando el siguiente fichero estilo.css nos libramos de ambas ventanitas y de todo lo que hay en el pie de la pagina (los antiguos paneles del lado derecho):
# cat estilo.css 
#cookieChoiceInfo { display: none; visibility: hidden; }
#b-navbar { display: none; visibility: hidden; }
#footer-1 { display: none; visibility: hidden; }
#footer-2-1 { display: none; visibility: hidden; }
#footer-2-2 { display: none; visibility: hidden; }
#footer-3 { display: none; visibility: hidden; }
Como vemos, seleccionamos diferentes elementos de estilo y los ocultamos. Evidentemente, hay que saber un poco de CSS para esto, pero no es complicado. Mirando en el diseño del Tema, podemos saber el nombre de muchos los elementos indeseables:

Para encontrar algún elemento rebelde (por ejemplo, la ventanita de las cookies), usando el Inspector de Página de Firefox es sencillo saber el nombre o clase CSS del objeto a ocultar (en nuestro caso son "#cookieChoiceInfo" y "#b-navbar".

Una vez afinado, lanzamos el wkhtmltopdf:
# wkhtmltopdf --no-background --user-style-sheet estilo.css 'http://2tazasdelinux.blogspot.com/2020/11/libro-digital-de-oxford-en-verde.html' out.pdf
Como se puede observar, esto tiene mucha mejor pinta:
Como ejemplo, aquí se puede descargar el fichero pdf resultante.

Bueno, pues el resto es pan comido: iterar sobre la lista de URL obtenidas en la primera parte y generar un pdf para cada una.
# cat blog-to-pdf 
#!/bin/bash

url="https://2tazasdelinux.blogspot.com/"
long=${#url}
backup="blog-11-21-2020.xml" # Backup XML del blog descargado desde Blogger

for url_entrada in $(grep -Eoi "'${url}[^']+html'" $backup | sort | uniq | tail -4)
do
  #A partir de la URL formamos un nombre legible para el fichero .pdf
  url_entrada=${url_entrada:1:-1} #Quitamos las comillas simples, dan problemas con wkhtmltopdf
  name=${url_entrada%.html}
  name=${name:$long}
  name=$(echo ${name}.pdf | tr '/' '-')
  echo "Descargando $url_entrada a $name"
  wkhtmltopdf --no-background --user-style-sheet estilo.css $url_entrada $name
done
exit 0
Pues con esto en un rato tenemos nuestro blog listo en PDF fáciles de leer. No olvidemos dejar el Tema del blog otra vez en orden al acabar la descarga de todos los artículos.

Out!

jueves, 26 de noviembre de 2020

Cambio automático de clave de wifi en punto de acceso OpenWrt.

El objetivo de esta entrada es configurar un punto de acceso que encenderá y apagará la red wifi a determinadas horas y que cada cierto tiempo cambiará automáticamente la clave. Todo se hará desde un ordenador externo que conectará por ssh con el OpenWRT del punto de acceso y ejecutará los comandos.

Lo primero es un script que calcule una nueva clave y la guarde en el fichero /root/scripts/wifi/clavewifi.txt.
# cat /root/scripts/generaClaveWifi.sh 
#!/bin/bash

claveletra=$(cat /dev/urandom | tr -dc abcdefghjklmnpqrstuvwxy | fold -w 2 | head -n 1)
clavenumero=$(cat /dev/urandom | tr -dc 0123456789 | fold -w 2 | head -n 1)
clave=$claveletra$clavenumero$claveletra$clavenumero
echo $clave > /root/scripts/wifi/clavewifi.txt
exit 0
La clave tiene el formato siguiente: 2 letras minúsculas y 2 dígitos, repetidos 2 veces. Por ejempo: "hx45hx45". El script es fácil de adaptar para cualquier otra combinación que deseemos.

Ahora el script que cambia la clave:
# cat /root/scripts/ponClaveWifi.sh 
#!/bin/bash

clave=$(cat /root/scripts/wifi/clavewifi.txt)
clave_router="claveopenwrt"
ssid="MI_WIFI"
security="WPA"
ip_openwrt="192.168.X.Y"
interface="1" #En mi caso la wifi está en el Interface 1.
comando="uci set wireless.@wifi-iface[$interface].key=$clave ; uci commit wireless ; wifi"
sshpass  -p $clave_router ssh -o StrictHostKeyChecking=no root@$ip_openwrt "$comando" > /dev/null 2>&1

qrencode -o /root/scripts/wifi.png "WIFI:S:${ssid};T:${security};P:${clave};;"

convert /root/scripts/wifi.png -background "black" -gravity south -extent 450x350  /root/scripts/wifi-canvas.png > /dev/null 2>&1
convert -pointsize 35 -fill white -draw "text 60,100 \"SSID: $ssid\" text 60,160 \"CLAVE: $clave\"" /root/scripts/wifi-canvas.png /root/scripts/wifi-key.png > /dev/null 2>&1
id_googledrive=1jMw8ixuAaR2RONW6IDmxii7nBdg4eJfZ
gdrive update $id_googledrive wifi-key.png > /dev/null 2>&1

exit 0
El script conecta con el punto de acceso mediante sshpass y ejecuta la secuencia de comands que cambian la clave, que son:
uci set wireless.@wifi-iface[$interface].key=$clave ; uci commit wireless ; wifi
El número con el $interface wifi a manejar lo determinamos previamente ejecutando a mano "uci show wireless", que muestra todas las interfaces que hay en nuestro router (lo normal es que haya dos, una emitiendo a 5Ghz y otra a 2.4Ghz).

Posteriormente creamos una imagen mediante qrencode que incluye un código QR conteniendo los datos de la wifi (ssid/contraseña) y añadimos mediante convert un texto con el SSID y la clave. El resultado es:



Esta imagen final contenida en el fichero wifi-key.png podemos difundirla de diversas maneras: publicarla en un servidor web, enviarla por correo a las cuentas interesadas o, como hago yo en el script anterior, subirla a Google Drive como fichero compartido. Previamente he compartido el enlace al fichero wifi-key.png con los usuarios que podrán consultar la clave.

Para subirla a Google Drive usamos el comando gdrive update, que sube y actualiza un fichero ya existente. El paso previo es subir la imagen a mano y compartirla. Eso nos dará un "id" que identifica el fichero y ese es el "id_googledrive" que usaremos en el script para posteriores actualizaciones.

Otros scrips que necesitamos son los que apagan y encienden la red wifi:
# cat /root/scripts/apagaWifi.sh 
#!/bin/bash
clave_router="claveopenwrt"
ip_openwrt="192.168.X.Y"
interface="1" #En mi caso la wifi está en el Interface 1.
comando="uci set wireless.@wifi-iface[$interface].disabled=1 ; uci commit wireless ; wifi"
sshpass  -p $clave_router ssh -o StrictHostKeyChecking=no root@$ip_openwrt "$comando"> /dev/null 2>&1

exit 0
Y:
# cat /root/scripts/enciendeWifi.sh 
#!/bin/bash
clave_router="claveopenwrt"
ip_openwrt="192.168.X.Y"
interface="1" #En mi caso la wifi está en el Interface 1.
comando="uci set wireless.@wifi-iface[$interface].disabled=0 ; uci commit wireless ; wifi"
sshpass  -p $clave_router ssh -o StrictHostKeyChecking=no root@$ip_openwrt "$comando" > /dev/null 2>&1

exit 0
Una vez tenemos los scripts, solo nos hace falta un cron para ejecutar las acciones de apagado, encendido y cambio de clave, en función de nuestras necesidades:
# cat /etc/cron.d/puntowifi
#Gestión de wifis . Se enciende por la mañana y se apaga por la noche. La clave cambia 5 veces al día.
00 24  * * *        root /root/scripts/wifi/apagaWifi.sh
30 11  * * *      root /root/scripts/wifi/enciendeWifi.sh
20 11,15,18,20,22  * * *      root /root/scripts/wifi/generaClaveWifi.sh  
22 11,15,18,20,22  * * *      root  /root/scripts/wifi/ponClaveWifi.sh 
Y con esto tenemos automatizado todo el proceso de cambio y difusión de la wifi. Así tendremos restringidos los accesos de una forma razonablemente sencilla.

Bueno, pues para hacer todo esto me he basado en esta entrada de blog, donde además viene muy bien explicado como hacerlo todo en el propio router OpenWRT, en lugar de usando una máquina externa como hemos explicado aquí.

Out!

Los camaradas chinos han lanzado esta semana la sonda Chang'e 5 que recogerá y traerá muestras de la Luna para fin de año:
Desde los años 70 no se hacía esto. Como vemos una vez más los chinos siguen avanzando hacia adelante mientras otros se dedican a dar vueltas sobre su estupidez.

martes, 17 de noviembre de 2020

Instalar OpenWrt en los puntos de acceso DLink DIR-860L

En todos los centros tenemos puntos de acceso DLink DIR-860L Modelo B1 que están siendo retirados al instalar las nuevas redes wifi. Originalmente vienen con el sistema operativo DD-WRT, que hasta ahora nos ha funcionado aceptablemente bien para el uso que les hemos dado.

El problema de DD-WRT es que es poco flexible, mientras que OpenWrt es mucho mas versátil: permite añadir y quitar paquetes de software, almacenar configuraciones y scripts fácilmente y tiene una comunidad de soporte enorme detrás.

Para cargar un nuevo firmware hay que poner el router en modo Recovery. Esto se hace apagando el router, presionando con un clip sobre el interruptor de reset que hay escondido en la base del mismo y encendiendo de nuevo el aparato. Tras 10-20 segundos el led de encendido comienza a parpadear. Soltamos el interruptor de reset.

Si abrimos el navegador y vamos a la dirección http://192.168.0.1 veremos esto:
Simplemente habria que seleccionar el fichero con el nuevo firmware, hacer Upload y esperar unos minutos a que se cargue y arranque.

¿Que firmwares OpenWrt podemos cargar? Veamos:

  • La primera opción es coger la última versión. En el momento de escribir esto era la 19.07.4. El problema es que una vez instalado he tenido problemas con la tarjeta wifi: se detectaba pero no funcionaba. Probando con otros firmwares mas antiguos como el 18.X o el 17.X no he tenido tampoco éxito. El fichero con el firmware estará en una ruta similar a esta:
    https://downloads.openwrt.org/releases/17.01.0/targets/ramips/mt7621/lede-17.01.0-r3205-59508e3-ramips-mt7621-dir-860l-b1-squashfs-factory.bin
  • Buscando en Internet encontré este post donde hay un desarrollo propio de imágenes para nuestro punto de acceso. Son imágenes que funcionan, pero están bastante cargadas de software y no son compatibles con los repositorios de paquetes oficiales, por lo que no es fácil instalar software adicional. No acababa de convencerme.
  • Encontré referencias a que las últimas versiones no van muy bien con la wifi, pero afortunadamente la 15.05.1 si que era plenamente operativa. Recomendamos pues descargar e instalar esta versión.


Una vez cargado el nuevo firmware, accedemos al interface web de configuración LuCI en la URL http://192.168.1.1. El primer paso definir una contraseña de root, para que se active la posibilidad de entrar por ssh en el dispositivo y realizar las siguientes configuraciones mediante líneas de comando o mediante LuCI, a nuestra elección.

Ya con OpenWRT cargado, ¿qué podemos hacer con los chismes?. Bueno, ideas:
  • Montar un punto wifi independiente para alguna cosa concreta. Es lo que se llama Routed AP.
  • Conectar el DLink con una red wifi preexistente y proporcionar conexión de red cableada desde alli. Es lo que se llama Routed Client.
  • Montar un repetidor wifi: no he probado si funciona.
  • Con una cámara USB montar una cámara IP.
  • Montar un sistema de USB sobre IP para conectar dispostivos USB remotos.
  • Montar un NAS pinchando un disco externo en el puerto USB.
  • Usarlo como dispositivo interpuesto físicamente para monitorizar el tráfico de red en algún punto que nos interese.
  • Con una tarjeta de sonido USB, usarlos como altavoces remotos para sistemas de hilo músical o megafonía.
  • .....
Vamos, que usos interesantes hay de sobra. Lo que nos falta es tiempo. Out!


Esto ya va siendo normal, pero no por ello menos emocionante: la cápsula Resilience de SpaceX se ha acoplado esta madrugada a la Estación Espacial Internacional. El anterior viaje en agosto fue un test, hoy era el primer vuelo regular con 4 cosmonautas:

Es curioso que apenas haya sido mencionado en las noticias, pero es a la vez un consuelo pensar que para los medios tradicionales los viajes de SpaceX son ya rutina. Esa es la idea: algún día los viajes a Marte en las sucesoras de las Falcon y Starship también serán rutina.

viernes, 13 de noviembre de 2020

Trabajando con polkit cuando los ficheros .pkla dejan de funcionar.

Usando polkit podemos permitir o prohibir a los usuarios determinadas acciones de configuración de partes del sistema.

Por ejemplo, para permitir a los usuarios del grupo "netdev" modificar conexiones wifi sin necesidad de contraseña de root distribuimos por puppet este fichero:
# cat /etc/polkit-1/localauthority.conf.d/10-org-freedesktop-network-manager-settings.pkla
[Allow group netdev create wireless connection for all users]
Identity=unix-group:netdev
Action=org.freedesktop.network-manager-settings.system.modify
ResultAny=no
ResultInactive=no
ResultActive=yes
Otro ejemplo, para impedir a los usuarios regulares reiniciar/suspender/apagar las máquinas de los espacios comunes usamos estas reglas:
# cat /etc/polkit-1/localauthority/50-local.d/disable-poweroff.pkla                                                             
[Disable power-off (logind)]
Identity=unix-user:*
Action=org.freedesktop.login1.power-off
ResultActive=no
ResultInactive=no
ResultAny=no

[Disable power-off when others are logged in (logind)]
Identity=unix-user:*
Action=org.freedesktop.login1.power-off-multiple-sessions
ResultActive=no
ResultInactive=no
ResultAny=no

# cat /etc/polkit-1/localauthority/50-local.d/disable-reboot.pkla                                                              
[Disable reboot (logind)]
Identity=unix-user:*
Action=org.freedesktop.login1.reboot
ResultActive=no
ResultInactive=no
ResultAny=no

[Disable reboot when others are logged in (logind)]
Identity=unix-user:*
Action=org.freedesktop.login1.reboot-multiple-sessions
ResultActive=no
ResultInactive

# cat /etc/polkit-1/localauthority/50-local.d/disable-suspend.pkla
[Disable suspend (logind)]
Identity=unix-user:*
Action=org.freedesktop.login1.suspend
ResultActive=no
ResultInactive=no
ResultAny=no

[Disable suspend when others are logged in (logind)]
Identity=unix-user:*
Action=org.freedesktop.login1.suspend-multiple-sessions
ResultActive=no
ResultInactive=no
ResultAny=no
Como vemos, todo consiste en meter un fichero .pkla en la ruta /etc/polkit-1/localauthority/50-local.d.

Hace poco, preparando unas máquinas con un Linux mas moderno (Manjaro LXDE 20) que el que usamos normalmente (Ubuntu 18 LTS) me he encontrado con que los ficheros .pkla son ignorados. Al parecer hasta polkit 0.105 funcionan, pero luego dejan de usarse y yo estaba trabajando con polkit 0.112. Como mas pronto que tarde tendremos este problema al subir de versión nuestro Ubuntu, mejor dejarlo ya anotado aquí para resolverlo cuando se nos presente.

Se trataba de tocar los permisos sobre org.freedesktop.NetworkManager.settings.modify.system, que son los referentes a modifcar conexiones de red del sistema. Veamos los permisos actuales usando el comando pkaction:
# pkaction -v -a org.freedesktop.NetworkManager.settings.modify.system
implicit any:      auth_admin_keep
implicit inactive: auth_admin_keep
implicit active:   auth_admin_keep
Están con el valor "auth_admin_keep", que significa que se pedirán permisos de root al realizar la acción org.freedesktop.NetworkManager.settings.modify.system. Mi intención es ponerlos todos a "no", ¿como se hace ahora que no hay ficheros pkla?. Pues hay dos vías:
  1. Modificar en el fichero /usr/share/polkit-1/actions/org.freedesktop.NetworkManager.policy el nodo org.freedesktop.NetworkManager.settings.modify.system:
        ....
        ....
        <defaults>
          <allow_any>no</allow_any>
          <allow_inactive>no</allow_inactive>
          <allow_active>no</allow_active>
        </defaults>
        ....
        ....
    
  2. O bien, dejar el fichero anterior sin tocar y escribir una regla en JavaScript tal como cuentan aquí:
    # cat /etc/polkit-1/rules.d/00-networkmanager.rules 
    polkit.addRule(function(action, subject) {
    if (action.id == "org.freedesktop.NetworkManager.settings.modify.system")
    {
        polkit.log("NetworkManager.settings.modify.system: rule called");
        return polkit.Result.NO;
    }
    });
    
    Otro ejemplo, para impedir la suspensión del equipo sería así:
    # cat /etc/polkit-1/rules.d/01-suspend.rules 
    polkit.addRule(function(action, subject) {
    if (action.id == "org.freedesktop.login1.suspend") {
        polkit.log("login1.suspend: rule called");
        return polkit.Result.NO;
    }
    });
    
    polkit.addRule(function(action, subject) {
    if (action.id == "org.freedesktop.login1.suspend-multiple-sessions")
    {
        polkit.log("login1.suspend-multiple-sessions: rule called");
        return polkit.Result.NO;
    }
    });
    
El segundo método me gusta más porque el fichero /usr/share/polkit-1/actions/org.freedesktop.NetworkManager.policy podría ser machacado en alguna actualización, mientras que las reglas son ficheros que creamos nosotros y no se borrarán.

martes, 10 de noviembre de 2020

Actualizar ROM en Tablet Techcomputer F101/L108MR

Ya hemos hablado antes sobre estas Tablets que nos enviaron para la biblioteca del IES: Un extraño fallo que tenían estos dispositivos era que en cada reinicio la MAC de su tarjeta wifi cambiaba. Como para la nueva wifi que tenemos en los IES necesitamos MACs controladas, la empresa distribuidora nos hizo llegar un firmware nuevo que dejaba la MAC fija para siempre jamás.

Para cargar este firmware hay que poner en modo Download (una especie de modo Fastboot cutre) la tablet y ejecutar un programa de actualización. Hay dos maneras de ir a Download:
  • Arrancamos pulsando [subir volumen] + encendido durante unos segundos. Soltamos el botón de encendido y después el de [subir volumen]. Hace falta maña para lograrlo.
  • Conectar un cable USB, entrar en "adb shell" y hacer "reboot bootloader" tal como contamos aquí. Mucho más sencillo.
Verificamos que estamos en modo Download conectando la Tablet con un cable USB al PC, haciendo lsusb y viendo que la Tablet se detecta con el id 2207:330d:
# lsusb
...
2207:330d Fuzhou Rockchip Electronics Company USB Composite Device
...
Una vez en modo Download envíamos la nueva imagen con el comando correspondiente:
# chmod +x upgrade_tool 
# ./upgrade_tool uf update.img
Support Type:RK3326	FW Ver:8.1.00	FW Time:2019-11-19 10:15:30
Loader ver:1.07	Loader Time:2019-11-19 10:00:02
Loading firmware...
Upgrade firmware ...... ok.
Los ficheros upgrade_tool y update.img nos los ha proporcionado el fabricante. Existen al parecer formas alternativas de hacer la actualización usando Windows y/o una tarjeta microSD, pero la verdad es que ni me he molestado en mirarlo.

Una vez hemos actualizado, se reinicia el Tablet y hay que configurarlo de nuevo tal como explicamos en el primer enlace de esta entrada. Se recomienda vivamente usar scrcpy para configurar todo desde el nuestro PC comodamente como si fuese una conexión por VNC al escritorio de la tablet, tal como explicamos en el segundo enlace de esta entrada.

Una vez configurado todo, si necesitamos la MAC de la tarjeta wifi la podemos sacar entrando por "adb shell" (tras activar la depuración USB) y haciendo:
# ip address show  
Con esto ya tenemos la Tablet actualizada y lista para trabajar con la nueva wifi.

Out!

lunes, 2 de noviembre de 2020

Libro digital de Oxford en verde fostorito.

Los libros digitales de Oxford siguen dando pequeños problemas, casi siempre debidos a que usa la tecnología Macromedia Flash que finalmente morirá a finales de 2020. Algo bueno tenía que tener este año.

El problema que me han notificado ahora es en los contenidos de Oxford Key To Bachillerato. Al llegar una parte de cuestionarios del libro digital de repente el texto se muestra en verde fosforito en lugar de en negro. En la proyección del cañón de vídeo resulta bastante difícil de leer.



Tras varias pruebas, verificamos que solo nos sucede en los Infolabs, ordenadores con tarjeta gráfica nVidia GeForce GT 730 y el driver propietario siguiente:
ii  nvidia-driver-390                             390.138-0ubuntu0.18.04.1 
En el resto de máquinas que no tienen esa combinacion tarjeta gráfica+driver no hay problema. Como prueba adicional verifico que usando la tarjeta VGA Intel Corporation HD Graphics 530 que tienen estos mismos ordenadores el problema desaparece.

Para empezar he probado con una versión mas antigua del driver y que aún está en los repositorios: la 390.48 en lugar de 390.118. Quitamos el driver nvidia 390.118 y todos los paquetes satélites y hacemos:
# apt-get install nvidia-driver-390=390.48-0ubuntu3
Reinicio y verifico que sigue fallando. Definitivamente es un problema del driver nvidia-390. Podríamos intentar jugar con los parámetros del driver nvidia de Xorg como ya hice en otra ocasión para un problema similar, pero no tenía tiempo para experimentos y liarme en un proceso de prueba/error.

Solución de grano grueso: desinstalar por completo el driver propietario nvidia y todos sus paquetes.
# apt-get remove --purge nvidia-driver-390
# apt-get autoremove
Esto provoca que al reiniciar se cargie el driver libre nouveau y con él desaparece el problema sin que se vea afectado nada más (ni siquiera los scripts que tenemos con xrandr para optimizar la visualización en pantalla-cañón de vídeo). Se supone que el driver nvidia esta más optimizado, pero desde luego nuestros usuarios no lo notan mucho. Por tanto, como solución al problema nos quedamos con nouveau.
Dejo el espacio y vuelvo a lo terrenal. En este vídeo del canal de Pablo Fuentes (puede oírse sin imagen, yo lo he hecho mientras cocinaba) nos hablan de la aplicación Radar COVID y de la importancia de tenerla todo el mundo instalada:



Es de imbéciles haber estado meses quejándose de que no había aplicación para España y ahora que está funcional y es segura no instalarla en el móvil. Ahora que viene lo peor es muy necesario su uso.

miércoles, 21 de octubre de 2020

Cuelgues en el arranque de Google Chrome

Por algún motivo desconocido nos sucede que el Google Chrome se queda a veces colgado en el arranque sin abrirse y aunque matemos todos los procesos "chrome" y empecemos de nuevo, vuelve a suceder una y otra vez.

Las sospechas se dirigen a un cierre abrupto de la sesión con Chrome abierto que ha dejado algo corrupto en su configuración o archivos temporales. También podría tener que ver que nuestros usuarios muchas veces inician sesión en distintas máquinas con un mismo home (ya que este reside en el servidor NFS) y eso provoca que compartan la configuración varias versiones de Chrome. Esta sospecha está sostenida en este problema se da más en unos usuarios que en otros.

Sabemos que hay algo mal en el perfil del usuario, pero no hemos encontrado que es. No nos queda otra que tirar de brocha gorda y borrar toda la configuración, haciendo antes backup de los marcadores pero eliminando todo lo demás. El script base es cortesía de mi compañero Julio, que es el que se ha currado el trabajo:
# cat cleanChrome.sh
#!/bin/bash
killall -9 chrome
cp  $HOME/.config/google-chrome/Default/Bookmarks /tmp/Bookmarks
rm -Rf $HOME/.cache/google-chrome
rm -Rf $HOME/.config/google-chrome
mkdir -p $HOME/.config/google-chrome/Default
cp -f /tmp/Bookmarks $HOME/.config/google-chrome/Default/Bookmarks
zenity --width 350 --info --text "Finalizado. Borrada configuración del google-chrome. Ahora puedes abrirlo."
exit 0
Con poner este script en todas las máquinas y un fichero .desktop que lo lance en el escritorio de los usuarios, tendremos una vía de salida para cuando el problema se presente, al menos mientras no encontremos una solución mas quirúrgica para eliminar aquello que provoca el cuelgue.


Hace unas horas la mision OSIRIS-REx le ha dado un piquito al asteroide Bennu y pronto estará de vuelta con las muestras: No es la primera vez que pasa esto, pero cualquier aterrizaje en un cuerpo alienígina es una proeza a tener en cuenta. Esperemos que entre las muestras no venga protomolécula.

viernes, 16 de octubre de 2020

De donde no hay no se puede sacar.

Un problema recurrente que tenemos es que algunos usuarios siguen intentado que hagamos funcionar equipos muy obsoletos con la web moderna. Por hacer una prueba real y escribir este post he cogido un portátil MSI L1350D de los que nos llegaron en 2010. Le he metido un Windows XP Home, que es un sistema operativo de 2001 que me garantiza que por si solo no va a asfixiar el ordenador. He actualizado además el XP y todos su drivers a la última versión.

Es decir vamos usar un sistema operativo de hace 19 años en un hardware de hace 10 años (que por tanto puede moverlo de sobra) para visitar la web que se usa actualmente en los centros educativos. A ver que pasa.
El ordenador tiene una CPU Intel Atom N455 (un único núcleo) con 2GB de RAM. Como vemos con el sistema recién cargado todo es bastante ligerito. Abrimos el navegador Firefox 52.9.0 ESR (el último que se publicó para Windows XP 32bits, en 2017). He probado con otros navegadores y todos dan problemas de uno u otro tipo.
Vemos que la carga de CPU está también contenida y hay memoria de sobra. Vamos a abrir el gmail, que es una de las herramientas mas usadas. Vemos que la cosa se desmadra:
Ćomo se ve, lo que sufre es la CPU. La memoria se mantiene bastante libre. Si abrimos Google Docs de nuevo se ven los picos de CPU:
Resumiendo: cualquier operación sobre aplicaciones Google (Correo, Docs, Classroom,... vamos, lo mas usado a día de hoy en los centros) con el navegador lleva la CPU por encima del 90% (con Meet no he probado porque ni siquiera es compatible con navegadores tan antiguos). El sistema no parece necesitar mas memoria para esto y no creo que el disco duro tampoco haga de cuello de botella. Es el procesador de hace 10 años el que no puede con Firefox en una web actual. Es curioso comprobar que teniendo la CPU al 90%, si ejecutamos Paint este se abre a toda velocidad mientras el navegador se asfixia. Evidentemente, no hay posibilidad de aumentar la potencia de esa CPU ni añadir núcleos.

Todo esto está probado con el navegador Firefox 52. Por ver si con un navegador más antiguo pudiera funcionar, he probado con el Firefox 30 (año 2014), pero Gmail directamente me dice que no es compatible. Con el Firefox 40 (año 2015) se abre Gmail pero en modo Vista Básica HTML, avisando de que actualice el navegador. Con este Firefox 40 podemos entrar en Google Drive, pero el uso de CPU está siempre entre 50% y 100%.

Conclusión: no hay manera humana de corregir eso. Cualquier móvil de gama baja tiene mas núcleos y velocidad de CPU que nuestro Atom. No tiene sentido que nos pidan una y otra vez cada año acelerar estas máquinas. Y aún asi las muy puñeteras siguen funcionando sin fallo, dando la impresión de que siguen operativas para un uso normal, desde luego han salido buenas.


Ayer un usuario de Reddit publicó una linda foto de la ISS en tránsito con la Luna en cuarto creciente:
Me acordé de esta otra, de un tránsito con Marte al fondo:
Y esta otra del 2009, con el transbordador Discovery acoplado a ella:
Podemos decir que están borrosas, pero es que están tomadas desde la Tierra, con ópticas modestas y por aficionados con un pulso de cirujano en un breve tiempo, ya que la IIS cruza el cielo de Este a Oeste en unos 5 minutos. Vamos, que no es un objeto precisamente estático. De ahi la proeza y la belleza de las imágenes.

jueves, 15 de octubre de 2020

Subir el volumen de archivos de vídeo

De vez en cuando me vienen con que una película tiene un volumen muy bajo y aunque se pongan todos los controles y mandos de volumen al máximo siguen sin oirse bien. El VLC tiene una funcionalidad escondida para aumentar el volumen más de lo normal, pero no confío mucho en que los usuarios lo apliquen.

La solución ideal es procesar la pelicula con ffmpeg para aumentar el volumen. El comando sería el siguiente:
#  ffmpeg -i Pelicula.mkv -af volume=4.000000 -vcodec copy Pelicula-Volumen-Alto.mkv
Lo que hacemos es aplicar un filtro que multiplique por 4 el volumen de archivo de vídeo. Luego borramos el archivo original y renombramos el recien creado. x4 es un buen valor, pero podemos subir más si no es suficiente, aunque nunca debemos perder de vista la posibilidad de que el audio se distorsione con tanta subida.