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

martes, 25 de febrero de 2025

OpenWRT: unir todos los puertos de red bajo el mismo bridge.

Tenemos por los centros muchos routers DIR‑860L sobrantes de las antiguas pizarras digitales. Ya he dedicado varios articulos a estos router porque que me parecen bastante interesantes.

Lo primero que suelo hacer es quitarles el sistema DD-WRT que traen de serie y poner un OpenWRT que es mucho más versatil y parecido a un Linux.

Estos router traen 5 puertos GigaEthernet. 4 de ellos están en un mismo bridge, llamado LAN, y el otro puerto está aparte y es el puerto WAN del router, lo que permite que por defecto el router interconecte 2 redes cableadas distintas, en distintas VLANs, y enrute el tráfico entre ambas.

Pero puede ser que no queramos eso, sino que los 5 puertos ethernet estén en la misma red. Eso convierte el router en un miniswitch de 5 puertos GigaEthernet, el cual nos puede venir bien en algunas estancias del centro. Para unir los 5 puertos una vez hemos cargado OpenWRT los pasos son sencillos:

Editamos /etc/config/network para que quede asi:
config interface 'loopback'
	option ifname 'lo'
	option proto 'static'
	option ipaddr '127.0.0.1'
	option netmask '255.0.0.0'

config globals 'globals'
	option ula_prefix 'fdda:86a9:b1ad::/48'

config interface 'lan'
	option force_link '1'
	option macaddr '9a:45:4a:fb:74:c1'
	option type 'bridge'
	option proto 'dhcp'
	option ip6assign '60'
	option _orig_ifname 'eth0.1 radio0.network1 radio1.network1'
	option _orig_bridge 'true'
	option ifname 'eth0.1 eth0.2'

config switch
	option name 'switch0'
	option reset '1'
	option enable_vlan '1'

config switch_vlan
	option device 'switch0'
	option vlan '1'
	option ports '0 1 2 3 4 6t'
	option vid '1'  
Comentarios:
  • La macaddr habrá que cambiarla para poner la tuya.
  • Vease que todo se mete en la misma VLAN, la otra VLAN que tenía el router desaparece.
  • En ports metemos todos los puertos dentro del bridge, de manera que están en la misma red y no hay que enrutar el tráfico entre ellos.
Para hacer esto me he basado en este hilo de Reddit.

Bueno, pues con esto podemos reaprovechar mejor esos router ociosos que nos dejaron las pizarras Siatic.

回头见!

viernes, 14 de febrero de 2025

Paquete hp-health para servidores HP con Debian modernos.

A los que tenemos servidores HP el paquete hp-health viene muy bien para monitorizar (por ejemplo con monit) distintos parámetros físicos, como la temperatura, los ventiladores o el estado de las fuentes de alimentación redudantes que trae.

El paquete mas actualizado que ofrece HP para Debian en https://downloads.linux.hpe.com/SDR/repo/mcp/pool/non-free/ es hp-health_10.80-1874.10_amd64.deb, de 2019.

Si lo intentamos instalar sobre Debian 11 o superior con "dpkg -i health_10.80-1874.10_amd64.deb" nos da problemas de dependencias por librerías obsoletas. Muchas veces, cuando pasa esto la explicación es que las versiones o nombres de las librerias vinculadas están puestas a piñon y si pudieramos editar el .deb y cambiar esas dependencias por versiones mas modernas el paquete se instalaría sin problema. Vamos a ello:
# wget https://downloads.linux.hpe.com/SDR/repo/mcp/pool/non-free/hp-health_10.80-1874.10_amd64.deb
# dpkg-deb -R hp-health_10.80-1874.10_amd64.deb hp-health  
# nano hp-health/DEBIAN/control
En este fichero se guardan las dependencias. Tenemos que editar la linea "Version: XXX" para poner una versión mayor, por ejemplo "Version: 10.81" y la linea "Depends: XX" para poner las versiones actuales de las librerías que nos han dado error al intentar instalar el paquete. En mi caso, para instalarlo sobre Debian 12 lo debemos dejar así:
Depends: libc6 (>= 2.14), binutils, dmidecode, pciutils, libc6-i386 | lib32gcc-s1
Simplemente, en este caso cambiamos "libc6-i686 | lib32gcc1" por "libc6-i386 | lib32gcc-s1", su equivalente en Debian 12. Una vez editado el fichero de control reempaquetamos todo en un nuevo .deb:
# dpkg -b hp-health hp-health_10.81_amd64.deb 
# dpkg -i hp-health_10.81_amd64.deb 
Y con esto se instala sin problemas en nuestro Debian. Ya tenemos el paquete disponible para otra temporada.

viernes, 7 de febrero de 2025

Mirror para los repositorios de paquetes de Ubuntu 22.

Siempre me gusta hacer un mirror local de los repositorios de paquetes más frecuentes, ya que esto garantiza que mis equipos se actualizarán dentro de la red local sin depender de servicios ni conexiones externas. Ya traté esto en este articulo de hace 10 años, cuando trabajabamos con Debian. Ahora voy a contar como montarlo en Ubuntu 22.

Antaño usamos la utilidad debmirror. Las cosas han cambiado y ahora usaremos una herramienta más sencilla, apt-mirror. Primero instalamos el paquete en el servidor donde vamos a crear el repositorio mirror de paquetes:
# apt-get install apt-mirror
En /etc/apt/mirror.list metemos la lista de repositorios a clonar. Este configuración, a diferencia de la antigua debmirror, tiene un formato similar a los sources.list habituales de Debian/Ubuntu:
############# config ##################
#
# set base_path    /var/spool/apt-mirror
#
# set mirror_path  /mirror
# set skel_path    /skel
# set var_path     /var
# set cleanscript /clean.sh
# set defaultarch  >running host architecture<
# set postmirror_script /postmirror.sh
# set run_postmirror 0

set cleanscript /clean.sh
set defaultarch amd64  #Solo amd64
set nthreads     20
set _tilde 0
#set limit_rate 1000k 

############# end config ##############

#------------------------------------------------------------------------------#
#                            OFFICIAL UBUNTU REPOS                             #
#------------------------------------------------------------------------------#

deb-amd64 http://es.archive.ubuntu.com/ubuntu/ jammy main restricted universe multiverse
deb-amd64 http://es.archive.ubuntu.com/ubuntu/ jammy-updates main restricted universe multiverse
deb-amd64 http://es.archive.ubuntu.com/ubuntu/ jammy-backports main restricted universe multiverse
deb-amd64 http://security.ubuntu.com/ubuntu jammy-security main restricted universe multiverse

#######################
# REPOS DE LA SECCION #
#######################

deb-amd64 http://desarrollo.educarex.es/solointranet/ubuntu/jammy/ jammy linex
deb-amd64 http://linex.educarex.es/ubuntu/jammy/ jammy linex

###### 3rd Party Binary Repos

deb-amd64 http://dl.google.com/linux/earth/deb/ stable main

clean http://es.archive.ubuntu.com/ubuntu
clean http://desarrollo.educarex.es/solointranet/ubuntu
clean http://linex.educarex.es/ubuntu
clean http://desarrollo.educarex.es/es.archive.ubuntu.com/ubuntu
En el fichero anterior configuramos la clonación de los repos de Ubuntu Jammy, el repositorio interno de nuestra red (desarrollo.educarex.es y linex.educarex.es) y el repositorio de Google Earth. Solo clono los paquetes amd64, ya que la versión i386 de los paquetes tiene un uso marginal, ocupa mucho y no tengo suficiente espacio de disco para clonar dicha parte.

Todo se descargará en var/spool/apt-mirror/mirror. Para poder hacer uso del repositorio clonado en nuestra red hay que instalar apache2 y hacer que /var/www/html/ubuntu apunte a /var/spool/apt-mirror/mirror:
# ln -sf /var/spool/apt-mirror/mirror /var/www/html/ubuntu
Para que los repositorios se clonen diariamente creamos los ficheros /etc/cron.d/apt-mirror y /etc/cron.d/apt-mirror-die:
# cat /etc/cron.d/apt-mirror
# Regular cron jobs for the apt-mirror package
00 22	* * *	apt-mirror	rm -f /var/spool/apt-mirror/var/apt-mirror.lock; /usr/bin/apt-mirror > /var/spool/apt-mirror/var/cron.log
# cat /etc/cron.d/apt-mirror-die 
# Matar el proceso apt-mirror
00 01	* * *	root	/usr/bin/killall -9 apt-mirror
A las 22:00 se lanza apt-mirror y tres horas después se corta. Por supuesto podemos cambiar estas horas para ajustar a nuestro caso. Harán falta varios días para bajar todos los repositorios completos, ya que el total son 670GB, repartidos así:
# du -sh *
5,4G	desarrollo.educarex.es
111M	dl.google.com
389G	es.archive.ubuntu.com
574M	linex.educarex.es
275G	security.ubuntu.com
Si tenemos prisa siempre podemos forzar la actualización a mano o lanzar el siguiente comando para ver si está todo ya bajado:
# apt-mirror
Una vez tenemos los repositorios clonados hay que distribuir a nuestros clientes unos ficheros *.list que apunten al mirror local en lugar de a los repositorios externos a la red. Tendriamos este /etc/apt/sources.list:
#Arquitectura amd64 tira del repositorio local
deb [arch=amd64] http://servidor-mirror/ubuntu/es.archive.ubuntu.com/ubuntu/ jammy main restricted universe multiverse
deb [arch=amd64] http://servidor-mirror/ubuntu/es.archive.ubuntu.com/ubuntu/ jammy-updates main restricted universe multiverse
deb [arch=amd64] http://servidor-mirror/ubuntu/es.archive.ubuntu.com/ubuntu/ jammy-backports main restricted universe multiverse
deb [arch=amd64] http://servidor-mirror/ubuntu/security.ubuntu.com/ubuntu/   jammy-security main restricted universe multiverse

#Arquitectura i386 tira de repositorios en Internet
deb [arch=i386] http://es.archive.ubuntu.com/ubuntu jammy main restricted universe multiverse
deb [arch=i386] http://es.archive.ubuntu.com/ubuntu jammy-updates main restricted universe multiverse
deb [arch=i386] http://es.archive.ubuntu.com/ubuntu jammy-backports main restricted universe multiverse
deb [arch=i386] http://security.ubuntu.com/ubuntu   jammy-security main restricted universe multiverse
Fichero /etc/apt/sources.list.d/repoXubuntuLinex.list:
#Repositorio Linex Desarrollo 
deb [arch=amd64] http://servidor-mirror/ubuntu/desarrollo.educarex.es/solointranet/ubuntu/jammy jammy linex
deb [arch=i386]  http://desarrollo.educarex.es/solointranet/ubuntu/jammy/ jammy linex

#Repositorio Linex para Ubuntu
deb [arch=amd64] http://servidor-mirror/ubuntu/linex.educarex.es/ubuntu/jammy jammy linex
deb [arch=i386]  http://linex.educarex.es/ubuntu/jammy/ jammy linex
Fichero /etc/apt/sources.list.d/google.list:
#Google Earth
deb [ arch=amd64 ] http://servidor-mirror/ubuntu/dl.google.com/linux/earth/deb/  stable main 
En los ficheros anteriores cambiamos "servidor-mirror" por el nombre o ip de nuestro mirror local. Lo más cómodo es distribuir estos tres ficheros *.list mediante una tarea puppet y una vez hecho esto hacer "apt-get update" en los clientes para que sincronicen con los mirrors locales.

Y ya está, una vez completado veremos que los apt-get y pkgsync van bastante más rápidos y apenas saturan nuestra salida a Internet.

domingo, 26 de enero de 2025

Chequear y reparar el sistema de ficheros Linux en el arranque.

Por algún motivo los ordenador AIO que nos han mandado a los centros educativos tienen ciertos problemas con el disco SSD. Con mas frecuencia de la esperade te encuentras con que en el arranque ha encontrado que el sistema de ficheros está corrupto y se parado en el prompt del initramfs para que hagas un chequeo y reparación de disco.

Es una lata tener que ir a hacer ese chequeo a mano cada vez que pasa, así que vendría bien que se hiciese de forma autómatica. La buena noticia es que se puede. Solo hay que editar /etc/default/grub y modificar la línea:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash fsck.mode=force fsck.repair=yes"
Con fsck.mode=force fsck.repair=yes le decimos que haga chequeo de disco y, si procede, lo repare. Para aplicar esta configuración tenemos que hacer además un:
# update-grub
El pero de esto es que el arranque se ralentiza un poco (en los AIO apenas se nota porque tienen un disco rápido y solo se suelen encender de forma automática una vez al día). La ventaja es que nos ahorramos esos molestos viajes a escribir un fscs y darle a enter.

viernes, 24 de enero de 2025

Evitar el aviso "Google Chrome no está actualizado"

El Google Chrome siempre quiere estar actualizado. Tan pronto como la versión es un poco antigua te presenta en la parte superior derecha el mensaje de que no está actualizado y necesita una actualizacion ya mismo. Si estamos en un entorno donde las actualizaciones están controladas y escalonadas eso provoca que muchas veces ese mensaje esté presente en el navegador.

Por algún motivo eso parece provocar una profunda zozobra en algunos usuarios, hasta el punto de que intentan insistentemente tener el navegador actualizado al último byte. Si además no tienen los permisos para actualizarlo eso genera una cierta frustración que acaban intentando contagiar al sysadmin.

Una buena opción para evitar esto consiste en hacer que Chrome no muestre tal mensaje y deje de dar la vara con que debería estar actualizado. Lo ideal seria que hubiese un fichero de configuración para regular esto, pero parece ser que no se le ha ocurrido a nadie en Google. Afortunadamente se puede anular el mensaje usando un parámetro en el comando que invoca a Chrome:
# google-chrome-stable --simulate-outdated-no-au='Tue, 31 Dec 2099 23:59:59 GMT' 
Con esto decimos que hasta el 2099 no se preocupe por las actualizaciones. Como los usuarios no lanzan Chrome desde la linea de comandos lo adecuado sería editar /usr/share/applications/google-chrome.desktop (y en general todos los google-chrome.desktop que tengamos en los escritorios y en cualquier otro lado) y cambiar dentro esta línea:
Exec=/usr/bin/google-chrome-stable --simulate-outdated-no-au='Tue, 31 Dec 2099 23:59:59 GMT' %U
Tras eso habria que ejecutar un "update-desktop-database".

En resumen: ojos que no ven, corazón que no siente.

jueves, 23 de enero de 2025

Obtener los parámetros de uso de un disco duro en Linux

Cuando queremos saber el estado de uso y salud de un disco duro en Windows podemos usar herramientas como CrystalDiskInfo. No solo vale para discos internos, también funciona normalmente para discos conectados mediante USB ya que la mayoría de los chipsets que convierten SATA a USB permite enviar información de uso al PC.

Por supuesto, en Linux tenemos nuestra propia solución. La mas simple es usar el programa smartctl del paquete smartmontools.
# smartctl --all /dev/sdb 
smartctl 7.4 2023-08-01 r5530 [x86_64-linux-6.8.0-39-generic] (local build)
Copyright (C) 2002-23, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Model Family:     Seagate Barracuda 7200.14 (AF)
Device Model:     ST2000DM001-1ER164
.....
.....
SMART Attributes Data Structure revision number: 10
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x002f   102   099   006    Pre-fail  Always       -       4651736
  3 Spin_Up_Time            0x0023   097   095   000    Pre-fail  Always       -       0
  4 Start_Stop_Count        0x0032   094   094   020    Old_age   Always       -       6262
  5 Reallocated_Sector_Ct   0x0033   100   100   010    Pre-fail  Always       -       0
  7 Seek_Error_Rate         0x002f   076   060   030    Pre-fail  Always       -       46075685
  9 Power_On_Hours          0x0032   097   097   000    Old_age   Always       -       3270
 10 Spin_Retry_Count        0x0033   100   100   097    Pre-fail  Always       -       0
 12 Power_Cycle_Count       0x0032   094   094   020    Old_age   Always       -       6260
......
En un interfaz de consola nos muestra los mismos parámetros que CrystalDiskInfo. De todos estos datos los mas significativos son:
9 Power_On_Hours          0x0032   097   097   000    Old_age   Always       -       3270
12 Power_Cycle_Count       0x0032   094   094   020    Old_age   Always       -       6260
Siendo los mas importantes Power_On_Hours (las horas de uso del disco duro, 3270 horas en este caso) y Power_Cycle_Count (el número de arranques que ha tenido, 6262 en este caso).

De regalo también tenemos una versión gráfica que permite además realizar tests de discos. Se llama gsmartmontools (aviso: debe ejecutarse con permisos de superusuario para funcionar). He aquí una captura:


El interfaz es bastante mas espartano que el de CrystalDiskInfo y no muestra imágenes de waifus, pero la información que da es igual de válida.

domingo, 19 de enero de 2025

Convertir una impresora USB en una impresora de red mediante OpenWRT

Cuando tenemos una impresora USB y queremos compartirla en una red podemos hacer lo típico: conectarla a un PC y compartirla desde allí, pero queda mas profesional y glamouroso convertirla en una impresora de red con su IP propia sin tener que depender de un PC de usuario que puede estar apagado o encendido.

Para ello sólo necesitamos un punto de acceso wifi o router wifi casero que cuente con un puerto USB y tenga OpenWRT instalado. Ese tema lo hemos tratado largo y tendido en el blog y hay mucha documentación en Internet al respecto.

Una vez configurado el dispositivo OpenWRT debemos conectarlo a la red local con una dirección IP fija, esto dependerá de cada caso y puede hacerse via ethernet o como cliente de la red wifi. Es también un tema visto anteriormente en el bloq en esta entrada y esta otra entrada.

En mi caso conecto el OpenWRT a una red wifi, ya que donde quiero poner la impresora no hay puntos de red cercanos. La configuración seria algo así como:
# cat /etc/config/wireless 

config wifi-device 'radio0'
	option type 'mac80211'
	option hwmode '11g'
	option path 'pci0000:00/0000:00:00.0/0000:01:00.0/bcma0:1'
	option disabled '0'
	option country 'ES'

config wifi-iface 'wifinet0'
	option ssid 'NOMBRE_RED'
	option device 'radio0'
	option mode 'sta'
	option key 'PASSWORD_RED'
	option network 'wwan'
	option encryption 'psk2'
La red cableada la dejo con una IP fija por mi propia tranquilidad, aunque no la voy a usar para nada:
# cat /etc/config/network 

config interface 'loopback'
	option ifname 'lo'
	option proto 'static'
	option ipaddr '127.0.0.1'
	option netmask '255.0.0.0'

config globals 'globals'
	option ula_prefix 'fda2:68de:6428::/48'

config interface 'lan'
	option type 'bridge'
	option ifname 'eth0.1'
	option proto 'static'
	option ipaddr '192.168.2.1'
	option netmask '255.255.255.0'
	option ip6assign '60'

config switch
	option name 'switch0'
	option reset '1'
	option enable_vlan '1'

config switch_vlan
	option device 'switch0'
	option vlan '1'
	option ports '0 1 2 3 8t'

config interface 'wan'
	option proto 'dhcp'

config interface 'wwan'
	option proto 'dhcp'
Hecho esto, instalo los paquetes de OpenWRT necesarios para compartir la impresora USB:
# opkg update
# opkg install kmod-usb-printer
# opkg install p910nd luci-app-p910nd
# opkg install usbutils
A continuación pincho la impresora USB en el router y verifico que ha sido detectada con:
# lsusb
Si todo ha ido bien, debe haber creado en /dev un dispositivo para la impresora:
# ls /dev/usb/lp*
/dev/usb/lp0
Bien, nuestra impresora es /dev/usb/lp0. A continuación configuramos el servico p919nd, que es el encargado de compartir nuestra impresora USB por la red local.
# cat /etc/config/p910nd 

config p910nd
	option device '/dev/usb/lp0'
	option runas_root '0'
	option mdns '0'
	option mdns_ty 'My Printer Manufacturer/Model'
	option mdns_note 'Basement'
	option enabled '1'
	option port '0'
	option bidirectional '1'
Puntualizaciones:
  • En algunos modelos de impresora el parámetro bidirectional debe valer 0. No hay regla, es cuestión de prueba y error.
  • Cambiar device según el nombre del dispositivo detectado en /dev/usb/...
  • El port con valor 0 hará que la impresora escuche en el puerto TCP 9100. Puede tener los valores 0, 1 y 2 (9100, 9101 y 9102), compartiendo en 3 puestos distintos hasta tres impresoras.
  • Los parámetros mdns tienen que ver con el protocolo Bonjour y yo no los uso. Si te gusta usar esos protocolos tan vociferantes tienes mas información al respecto en este enlace.

Hemos dicho que el servivio p910nd escuchará en el puerto 9100, pero no hay que olvidar abrirlo en el firewall de OpenWRT:
# cat /etc/config/firewall 
...
...
...
#Allow attached network printer
config 'rule'
        option name 'p910nd'
        option 'src' 'lan wan'
        option 'proto' 'tcp'
        option 'dest_port' '9100'
        option 'target' 'ACCEPT'
Una vez definido todo, reiniciamos los servicios:
# /etc/init.d/firewall restart
# /etc/init.d/p910nd restart
Y verificamos que el proceso p910nd está corriendo:
# ps w | grep 910
1282 p910nd     936 S    {p910nd} /usr/sbin/p9100d -d -b -f /dev/usb/lp0 0
Ya en plan maniático plus, tampoco está de más verificar desde un PC de la red (repito: un PC distinto al router con el que estamos trabajando) que el puerto 9100 está abierto en el openwrt:
# nc -zv ip-router 9100
Connection to ip-router 9100 port [tcp/*] succeeded!
Con esto ya tenemos todo, solo faltaría configurar la impresora en los clientes que vayan a usarla. En este enlace se explica en detalle como hacerlo para Windows y OSX/Linux. Yo por mi parte como uso Linux simplemente añado esto a /etc/cups/printers.conf:
<Printer HP-ML1210>
PrinterId 488303
UUID urn:uuid:8a19c7aa-3365-356a-70cd-736155c2fcfc
Info 
Location 
MakeModel Samsung ML-1210 Foomatic/gdi (recommended)
DeviceURI socket://ip-router:9100
State Idle
StateTime 1737140264
ConfigTime 1737134460
Type 8392708
Accepting Yes
Shared No
JobSheets none none
QuotaPeriod 0
PageLimit 0
KLimit 0
OpPolicy default
ErrorPolicy retry-job
</Printer>
Cada cual deberá cambiar la ip-router y el Modelo/Driver de impresora según sea su caso. Usar CUPS para añadir la impresora en lugar de editar mano el printers.conf siempre es una buena idea.

再见,同志!

viernes, 8 de noviembre de 2024

Baterías genéricas para HP x360 310 G2

Nuestros ordenadores "HP x360 310 G2" llevan ya muchos años con nosotros y las báterías modelo HV03XL que tienen están empezando a fallar. De momento se pueden encontrar baterías genéricas sobre 35-40€ (usualmente de marca Voltistar) y originales de HP por mas de 80€.

Después de comprar e instalar varias baterías genéricas sin tener problemas de repente me encontré con que en algunos portátiles no se reconocían. Al ponerlas el equipo se encendía pero no lograba arrancar, se quedaba colgado sin avanzar en los mensajes de arranque de la BIOS. Después de dar muchas vueltas comprobé la versión de la BIOS y me di cuenta de que tengo portátiles con BIOS F35 y otros con BIOS F57A. Los que tienen esta última BIOS no admiten baterías genéricas. Una vez más, HP ha hecho de las suyas y ha puesto un firmware que rechaza productos no certificados por ellos simplemente porque son así de malvados.

Bueno, pues la solución es hacer un downgrade de la BIOS, desde F57A a F35. Y aquí surgen nuevos problemas:
  1. En la web de HP la BIOS mas antigua que puede descargarse fácilmente la F54A. Esa BIOS también rechaza baterías genéricas.
  2. Anteriormente, HP tenía un sitio FTP donde podías buscar software antiguo (ftp.hp.com/pub/softpaq/). Este sitio ya no está disponible usando protoclo FTP desde hace unos años y es imposible hacer una búsqueda sobre él.
  3. El software de actualización de las BIOS de HP no permite hacer downgrade de BIOS. No podemos instalar BIOS anteriores a la que ya tenemos.
Contra HP rendirse no es una opción. Tras preguntar en los foros de soporte de HP, gestionados por voluntarios, me dan la pista que me permite llegar hasta el firmware F48 (y luego F44, aunque no descarto encontrar algun día la F35). Las rutas son: La descarga se hace cambiando el .html final por .exe. Es un fichero descomprimible que tiene las BIOS y el software. La BIOS para nuestra máquina está en el fichero 08074.bin.

El siguiente problema es como hacer el downgrade de la BIOS en los equipos que tienen F57A. Esto lo cuentan aquí: https://www.bios-mods.com/forum/showthread.php?tid=40777. Enlazan una versión "adaptada" del software de HP que si permite escribir BIOS anteriores a la actual, saltando la restricción de HP.

He juntado aquí todo: https://drive.google.com/file/d/1RNHaK0esv-Xz_2dpepKwLQ6NZnoW_FvF. Ahi está el fichero InsydeFlash625 y el fichero con la bios F48 (08074.fd, que es el 08074.bin comentado antes con la extensión cambiada). Las instrucciones son:
  1. En el portátil donde queremos cambiar la BIOS, arrancamos con Windows y con un usuario administrador descargamos el fichero anterior y lo descomprimimos.
  2. Ejecuta el fichero HPFlashWinx64.exe. Paciencia, se toma su tiempo. Verás como te avisa de que vas a bajar la BIOS a la F48. Sigue los pasos y asegurate de que el portátil está conectado a la corriente y que no se va a interrumpir el proceso.
  3. La escritura de la BIOS se hace en parte en Windows, luego el portátil se apaga y al encenderlo a mano se realiza la segunda fase de actualización.
Una vez comprobado que tenemos la BIOS F48(o F44 en su caso) ponemos la batería genérica y podremos comprobar que ya funciona. Chuparos esa HdeP.

sábado, 21 de septiembre de 2024

Script de conexión VNC con los PC de usuarios.

Lo prometido es deuda ;-). Este es el script que tengo en todas las máquinas de los usuarios para levantar un servidor VNC a demanda y poder conectar remotamente. El único requisito es tener instalado el paquete x11vnc:
# cat /usr/bin/run_vnc 
#!/bin/bash
rm -rf /root/.vnc
x11vnc -xkb -noxrecord -noxfixes -noxdamage -display :0 -auth /var/run/lightdm/root/:0 -usepw
exit 0
Cuando quiero entrar en una sesión de usuario lo que hago es conectar con:
# ssh -X root@maquina
Una vez conectado ejecutamos run_vnc, que nos pedirá definir una contraseña de conexión 2 veces y se quedará esperando conexiones entrante. En otro terminal, desde nuestra máquina lanzamos un cliente vnc, por ejemplo "vinagre", con:
# vinagre maquina
Nos pedirá la contraseña que definimos antes y ya está... conectamos al escritorio que haya abierto en la máquina en ese momento, pudiendo verlo e interactuar con él. Estoo causa un cierto desconcierto a los usuarios ("el ratón se mueve solo") pero nos evita un paseo para solucionar o probar cosas sencillas.

¿Por qué no tengo el servidor vnc corriendo en cada máquina de forma permanente? Pues porque tampoco lo uso tanto y no creo que sea buena idea tener esa puerta entreabierta por si hay fisgones en la red.

Hasta pronto y recuerden no confundir 不知道 con 爱很大.

jueves, 30 de mayo de 2024

Espejar pantallas con xrandr y no morir en en intento.

A la hora de espejar la pantalla principal en una pantalla secundaria de un aula es corriente coger un script que ya espeja pantallas en otro sitio y plantarlo en el aula pensando que por arte de computer magic va a funcionar. Pues no, el script hay que adaptarlo y lo que traemos de otro sitio solo sirve de plantilla.

Para saber cómo adaptarlo hay que ejecutar xrandr sin parámetros y asi poder anotar como se llaman las salidas de vídeo en ese entorno concreto y cuales resoluciones soporta cada una. Hay una regla muy básica para ejecutar xrandr:


Recuerda: xrandr no se ejecuta NUNCA como root. Nada de conectar por ssh al equipo en cuestión, ni entrar en consola de texto desde el escritorio, ni hacer sudo, ni ninguna otra ocurrencia.

La única manera de ejecutar xrandr y que nos de un resultado correcto y fiable es ir físicamente al ordenador, iniciar sesión con un usuario normal, abrir un terminal en el escritorio y teclear "xrandr" seguido de enter. Fácil, ¿no? Si al teclear xrandr te sale "Cant open display" o algo similar es porque has desobedecido y no has hecho caso de la sugerencia de Doña Decibelia, la serenísima señora de la foto.

Una buena salida de xrandr seria por ejemplo:
Screen 0: minimum 320 x 200, current 1920 x 1080, maximum 8192 x 8192
VGA-1 connected primary 1024x768+0+0 (normal left inverted right x axis y axis) 0mm x 0mm
   1024x768      60.00*
   800x600       60.32    56.25  
   848x480       60.00  
   640x480       59.94  
DP-1 disconnected (normal left inverted right x axis y axis)
HDMI-1 disconnected (normal left inverted right x axis y axis)
DP-2 disconnected (normal left inverted right x axis y axis)
HDMI-2 connected 1024x768+0+0 (normal left inverted right x axis y axis) 0mm x 0mm
   1280x800      59.81 +  84.88    74.93  
   1920x1080     60.00*   50.00    59.94    30.00    24.00    29.97    23.98  
Aqui se ven dos salidas activas; VGA-1 y HDMI-2, junto con la gama de resoluciones que soportan. Nosotros tenemos que determinar cual salida es la principal y cual es la secundaria entre ambas salidas y cuales resoluciones de las que soportan queremos elegir para trabajar. Con esos 4 datos ya tenemos para sustituir XXXX, YYYY, AAAA y BBBB en el script que nos sirve de plantilla general, el cual sería:
# cat /usr/local/bin/resolucion_espejar
#!/bin/bash
test -e  $HOME/.config/xfce4/xfconf/xfce-perchannel-xml/displays.xml  &&  rm  $HOME/.config/xfce4/xfconf/xfce-perchannel-xml/displays.xml
PRINCIPAL=XXXX
SECUNDARIO=YYYY
RESOLUCION_PRINCIPAL=AAAA
RESOLUCION_SECUNDARIO=BBBB
xrandr --output $PRINCIPAL --mode $RESOLUCION_PRINCIPAL --pos 0x0 --rotate normal --output $SECUNDARIO --mode $RESOLUCION_SECUNDARIO --pos 0x0 --rotate normal --same-as $PRINCIPAL --scale-from $RESOLUCION_PRINCIPAL
exit 0
Para el ejemplo anterior, unos buenos valores tomados del resultado del xrandr-sin-parámetros™ seíian:
# cat /usr/local/bin/resolucion_espejar
........
PRINCIPAL="VGA-1"
SECUNDARIO="HDMI-2"
RESOLUCION_PRINCIPAL="1024x768"
RESOLUCION_SECUNDARIO="1920x1080"
........
Y ya está, nada más. Probamos ese script desde terminal a ver si espeja bien ambas pantallas y si lo hace lo metemos para que se ejecute en el inicio de sesión desde /etc/xdg/autostart con un fichero .desktop. Sobre este tema ya hay muchos ejemplos en otras entradas del blog, busca por xrandr y encontrarás.

再见,同志们!