Archivo de la categoría: Tutoriales

Oneliner: Para «teclear» un texto copiado gracias a xdotool

Soy muy fan de los scripts oneliner (link a la wikipedia en ingles). Porque es como en las películas cuando un hacker pulsa un botón y se dispara todo tipo cosas por la pantalla, es como la leche condensada.

Hace años conocí también xdotool que es un herramienta para simular ratón y teclado desde terminal, me encanto porque es poderosa.

Pues hace unos días me fallaba el keepass para copiar&pegar un password para usarlo para abrir otro keepass, y como era el típico password invocación a Satán pasaba de estar un  rato escribiendo.

Y para teclear algo del portapapales es tan simple:

sleep 5; xdotool type -- "$(xclip -o -selection clipboard)"

OJO: que creo que con wayland xdotool no funciona.

Como convertir una imagen base64 de muchos megas directamente sin pasar por un editor de texto

Alguna vez pasa que inspeccionando llamadas del navegador ves que te viene una imagen en vez de en binario, te viene como un chorrón de caracteres en base64 y antes lo que hacía era hacer un html tonto con un tag de imagen y copiar y pegar en un vim (porque con otros editores era imposible) y esperar minutos a que eso se llenara de caracteres, era un sufrimiento y me daba pena por el vim.

Pero pensando, «jo si tengo el base64 de la imagen en el portapapeles….con el comando xclip de GNU/Linux seguro que puedo pipearlo para convertirlo directamente»….y efectivamente, se puede hacer y tarda microsegundos.

xclip -selection clipboard -o | base64 -d > imagen.png

Es que xclip es muy grande, es de esos comandos tontos que no recuerdas que están ahí pero que ayudan un montón.

Deshabilitar un touchpad roto o muy sensible en un portátil sin botón especial de deshabilitar touchpad (con GNU/Linux of course)

Querido/a lector/a no se si os ha pasado que algunas veces por curro u ocio tienes un portátil sin botón especial (de esos de FN + ) para deshabilitar el touchpad y te sucede 1 o 2 cosas o ambas a la vez de que el mamón de el:

  • o al mínimo roce con «el jamoncillo del dedo gordo» mientras escribe hace un click o te mueve el ratón
  • o con la vibración de escribir por estar roto hace cosas raras

Hago una pausa para hacer eco de mi descubrimiento, «el jamoncillo del dedo gordo» se llama Eminencia tenar .

Pues no hay cosa que genere mas odio e invoque mas demonios cuando te falla una tecla del teclado o un ratón no hace click algunas veces….bueno quizá cuando te falla un mando de videoconsola y encima estas jugando contra un amigo y le dices «oye he perdido porque me falla el mando» y encima te vacila y no te cree.

Y también hay otro sentimiento peor, el pozo de tristeza e impotencia de cuando te falla un mando de una videoconsola antigua/vieja/retro y sabes que ya no puedes volver a tenerla bien, porque o ya no venden piezas (ojala avance la impresión 3D para evitar eso) o porque los asquerosos de los especuladores te venden un mando roñoso de esa consola vieja a precio de piso en Madrid.

Bueno volviendo al tema no tienes suerte con el portátil y no tiene el botón, pero por contra tienes suerte de ser inteligente y usar GNU/Linux.

Pues hay varias maneras de deshabilitar temporalmente ese cabroncete de touchpad, elige tu camino:

Simulando la pulsación de la tecla fantasma de toggle touchpad

  1. Necesitas la maravillosa herramienta xdotool que simula el teclado y el ratón (ideal para jugadores de mmorpg que quieren dormir pero quieren farmear).
    sudo apt install xdotool
  2. Y después tienes que buscar cual keycode numérico  es la tecla que no tienes de «toggle touchpad», spoiler 199 (creo que casi siempre).
    $ xmodmap -pke | grep -i touch
    
    keycode 199 = XF86TouchpadToggle NoSymbol XF86TouchpadToggle
    
    keycode 200 = XF86TouchpadOn NoSymbol XF86TouchpadOn
    
    keycode 201 = XF86TouchpadOff NoSymbol XF86TouchpadOff
  3. Simular la pulsación de la tecla, que puede ser con el número o con la constante de X11.
    xdotool key XF86TouchpadToggle

    o

    xdotool key 199

Xorg/X11 (wayland NPI) deshabilitando temporalmente

  1. Primero listar todos input que tienes enganchados al GNU/Linux.
    $ xinput 
    
    ⎡ Virtual core pointer id=2 [master pointer (3)]
    
    ⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
    
    ⎜ ↳ MSNB0001:00 04F3:314A Mouse id=11 [slave pointer (2)]
    
    ⎜ ↳ Logitech USB Optical Mouse id=10 [slave pointer (2)]
    
    ⎜ ↳ MSNB0001:00 04F3:314A Touchpad id=12 [slave pointer (2)]
    
    ⎜ ↳ ETPS/2 Elantech Touchpad id=16 [slave pointer (2)]
    
    ⎣ Virtual core keyboard id=3 [master keyboard (2)]
    
    ↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
    
    ↳ Video Bus id=6 [slave keyboard (3)]
    
    ↳ Video Bus id=7 [slave keyboard (3)]
    
    ↳ Power Button id=8 [slave keyboard (3)]
    
    ↳ Sleep Button id=9 [slave keyboard (3)]
    
    ↳ Intel HID events id=13 [slave keyboard (3)]
    
    ↳ Intel HID 5 button array id=14 [slave keyboard (3)]
    
    ↳ AT Translated Set 2 keyboard id=15 [slave keyboard (3)]
    
    ↳ MSI WMI hotkeys id=17 [slave keyboard (3)]
    
    ↳ DELL Dell QuietKey Keyboard id=18 [slave keyboard (3)]
    
    ↳ WH-1000XM3 (AVRCP) id=19 [slave keyboard (3)]
  2. Y algunas veces tienes varios touchpad….pues prueba a ver cual es «verdadero», a deshabilitarlo:
    $ xinput disable 12
  3. Y para habilitarlo así:
    $ xinput enable 12

Y así consigues no sufrir cuando tienes un portátil así de cansino.

Teclado de portátil se queda pulsada una tecla, solución en Linux amputar la tecla gangrenada

En el portátil del curro que lo que me fastidia es que no es una marca mala, es un Thinkpad (de los e ahora) me esta fallando el teclado no funcionan las teclas flecha abajo y la de suprimir.

Pero el problemón es que al azar se activa la tecla supr sin tocarla ni nada y se queda activa, haciendo destrozos considerables cuando estoy programando.

Así que mientras conseguimos arreglarlo y no físicamente, voy a buscar la solución software, que es muy parecida a amputar una pierna gangrenada.

Lo espectacular de GNU/Linux es que puedes hacer y deshacer cosas que serían impensables de poder hacer en el sistema desoperativo de las ventanas o de la manzana.

Voy a crear una regla para hwdb para deshabilitar la tecla…muerto el perro se acabo la rabia.

Lo primero es encontrar el teclado:

$ cat /proc/bus/input/devices | grep -i keyboard -B2 -A10

I: Bus=0011 Vendor=0001 Product=0001 Version=ab83
N: Name="AT Translated Set 2 keyboard"
P: Phys=isa0060/serio0/input0
S: Sysfs=/devices/platform/i8042/serio0/input/input4
U: Uniq=
H: Handlers=sysrq kbd event4 leds 
B: PROP=0
B: EV=120013
B: KEY=402000000 3803078f800d001 feffffdfffefffff fffffffffffffffe
B: MSC=10
B: LED=7

--

I: Bus=0003 Vendor=413c Product=2106 Version=0110
N: Name="DELL Dell QuietKey Keyboard"
P: Phys=usb-0000:04:00.3-2.2/input0
S: Sysfs=/devices/pci0000:00/0000:00:08.1/0000:04:00.3/usb1/1-2/1-2.2/1-2.2:1.0/0003:413C:2106.0002/input/input10
U: Uniq=
H: Handlers=sysrq kbd event9 leds 
B: PROP=0
B: EV=120013
B: KEY=1000000000007 ff9f207ac14057ff febeffdfffefffff fffffffffffffffe
B: MSC=10
B: LED=7

Listando ese fichero sale todo lo que esta enganchado al sistema operativo, pero he filtrado a teclado, me sale el externo y el del portátil.

De ahí tienes que buscar el event<num> que sea tu teclado, esta en el campo Handlers, en mi caso es el event4.

Instalas evetest que vigila los eventos de sistema y te va dar el valor MSC_SCAN de la tecla suprimir o la que quieras matar.

sudo evtest /dev/input/event4

Yo la cace o pesque mientras estaba escribiendo esto:

Event: time 1747226204.341909, -------------- SYN_REPORT ------------
Event: time 1747226204.345745, type 4 (EV_MSC), code 4 (MSC_SCAN), value 0d
Event: time 1747226204.345745, type 1 (EV_KEY), code 13 (KEY_EQUAL), value 0
Event: time 1747226204.345745, -------------- SYN_REPORT ------------
Event: time 1747226204.351976, type 4 (EV_MSC), code 4 (MSC_SCAN), value d3
Event: time 1747226204.351976, type 1 (EV_KEY), code 111 (KEY_DELETE), value 1
Event: time 1747226204.351976, -------------- SYN_REPORT ------------
Event: time 1747226204.596393, type 4 (EV_MSC), code 4 (MSC_SCAN), value d3
Event: time 1747226204.596393, type 1 (EV_KEY), code 111 (KEY_DELETE), value 2
Event: time 1747226204.596393, -------------- SYN_REPORT ------------
Event: time 1747226204.626565, type 4 (EV_MSC), code 4 (MSC_SCAN), value d3
Event: time 1747226204.626565, type 1 (EV_KEY), code 111 (KEY_DELETE), value 2
Event: time 1747226204.626565, -------------- SYN_REPORT ------------

Es d3

También necesitas el MODALIAS que hay varias alternativas para sacarlo.

O usando:

sudo udevadm info /dev/input/eventX
O usando:

sudo udevadm info --attribute-walk --name=/dev/input/event4

Pero a mi no me ha salido el dichoso MODALIAS.

Así que gracias a la doc de Arch (todos los linuxeros independientemente de nuestra distro favorita debemos reconocer el trabajo de la comunidad de Arch) he encontrado otra manera.

$ cat /sys/devices/platform/i8042/serio0/modalias 
serio:ty06pr00id00ex00

El path lo sacas de Sysfs del hacer el cat /proc/bus/input/devices anterior.

Cómo es al azar mi caso, dejo la ventana ahí pacientemetne a ver si pesca o caza la tecla fantasma de suprimir.

Añadir la tecla a una regla de hwdb.

sudo nano /etc/udev/hwdb.d/11-deshabilitar-supr-tecla.hwdb

Y añades las lineas (ojo con el espacio en blanco de KEYBOARD):

evdev:<modalias>
 KEYBOARD_KEY_<MSC_SCAN>=reserved

En mi caso:

evdev:serio:ty06pr00id00ex00
 KEYBOARD_KEY_d3=reserved

Activarlo (puede ser reiniciando) o con el siguiente par de comandos:

sudo systemd-hwdb update
sudo udevadm trigger /dev/input/event4

Y a disfrutar con tu portátil con la tecla gangrenada amputada.

Nota: algunas veces el modalias esta mal por alguna razón que desconozco. Hay otra forma de sacarlo:

sudo udevadm test /sys/class/input/event4 2>&1 | grep modalias
Y saldrá mucha mierda, entre toda veras lineas como:

event4: hwdb modalias key: "input:b0011v0001p0001eAB83-e0,1,4,11,14,k71,72,73,74,75,76,77,79,7A,7B,7C,7D,7E,7F,80,8C,8E,8F,9B,9C,9D,9E,9F,A3,A4,A5,A6,AC,AD,B7,B8,B9,D9,E2,ram4,l0,1,2,sfw"

Pues el modalias es el input con todo el churro y en donde el guion se mete el * (que no se si es para casar todos lo que hay separados por comas).

input:b0011v0001p0001eAB83-*

Extra: También puedes remapear (como en los videojuegos) una tecla pocha por otra, es de la misma manera pero añadiendo una segunda fila (recuerda el espacio en blanco:

KEYBOARD_KEY_4d=z

Donde el 4d es la tecla que quieres usar para la sustitución y el z es la tecla.

DNI Electrónico en GNU/Linux (Linux Mint 22.1)

El DNI electrónico (link a la wikipedia) cuando funciona es una delicia, pero hacerlo funcionar es lo todavía tiene muchos roces, aunque no muchos…y espero que los funcionarios según salgan versiones años siguientes siga al menos funcionando como ahora o mejorando (porque el autofirma…que no tenga opción de zoom y sea purito asqueroso 💩 Java es como frotarte los cojones con un rayador de quesos.

Y como me a tocado formatear el ordenador y volver a ponerle un GNU/Linux, desde hace años uso Debian para uso personal y para profesional Linux Mint. Y en este caso es el portátil del curro pues eso Linux Mint.

Y cierto es que hay muchos tutoriales por internet de muy buena gente bloguera y linuxera explicandolo, pero aquí me lo dejo un poco como autonotas para mi yo del futuro y para el que pase.

¿Para que se usa el DNI electrónico?

  • Para firmar documentos (PDFs del curro y papeles legales que piden los funcionarios).
  • Acceder a las web públicas.

(jo tiene casi 50 años la peli de las 12 pruebas de Asterix y que bien retrata el papeleo legal con los funcionarios)

Instalar DNI Electrónico

Primero a ver si funciona el lector DNI electrónicos USB, raro a estas alturas de la película pero bueno fabricantes gilipollas que venden productos rotos (que no funcione en GNU/Linux es igual a roto) hay.

Yo uso un el comando diff pipeando lsb y en 10 segundos de espera otro lsb, no se son muchos segundos pero como las clavijas USB tienen un estado cuantico mejor tener tiempo.

diff -u <(lsusb) <(sleep 10; lsusb)

Instalar PKCS#11

Descargándolo de la web de la policía

Antiguamente para instalar un paquete deb eran dos pasos usar el dpkg y después resolver las dependencias, pero desde hace años se puede hacer directamente con apt.

$ sudo apt install ./libpkcs11-dnie_1.6.8_amd64.deb --fix-broken

En teoría ya esta instalado y en firefox se vera, si vas a Ajustes y buscas certificados debe aparecer.

Allí tienes que añadir un nuevo dispositivo dando al botón de Cargar, yo le pongo de nombre DNIE y el fichero es:

/usr/lib/libpkcs11-dnie.so

Entonces si le das a Iniciar Sesión, te pedida la clave que metiste en la maquina de las oficinas del DNI en la Policía. Si todo va bien se iniciará la sesión. Si fallas 3 veces, te va tocar volver a la oficina a desbloquear el DNI.

Para probarlo lo mejor ir a la Carpeta Ciudadana y ver si puedes entrar.

Y o te pide la clave o si ya has iniciado sesión saldrá un mensaje de aviso parecido a este.

Firmar documentos

Bueno ahora lo del Java asqueroso  .

Hay que descargarlo desde Autofirma, te va dar un zip que dentro esta el paquete debian. Para instalarlo:

$ sudo apt install ./AutoFirma_1_8_3.deb –fix-broken

Ojo que te tumba el firefox….supongo para enganchar el autofirma al firefox. Y mucho paquete debian pero no pide java11 de dependencias, así que se instala y si clickas en el menú en el icono de Autofirma se queda un rato rascando y se cierra. Así que instalar Autofirma:

$ sudo apt install openjdk-11-jre

Y ya esta debería funcionar:

Eliges Continuar DNIe y pruebas a firmar cualquier PDF.

Y esta.

Spectrum: ¿Por qué RANDOMIZE USR para cargar código máquina? (parte 4)

Realmente el típico:

10 RANDOMIZE USR 666

Es un hack similar al usar la cucaracha en una play1 o el boot cd del reno rudolf de Dreamcast. Porque el Basic de los Spectrum no tenían una instrucción especifica para cambiar de lenguaje o ejecutar código maquina.

Pero lo curioso de el RANDOMIZE USR o el cargador en Basic inicial que tenía esta instrucción. Es que se usaba en todos los juegos comerciales (compilados/escritos en binario o código máquina).

¿Y por qué RANDOMIZE USR? Pues en las news de spectrum (jo que viejo me siento) alguien lo pregunto hace casi veinte años.

La respuesta corta es que es la manera menos peligrosa de ejecutar código maquina porque no cambia registros de CPU ni de memoria.

Y la respuesta larga, es lo mismo pero explicando que RANDOMIZE es la instrucción para iniciar el generador de números aleatorios de los spectrum. Y espera un número que viene en USR pos_mem es la forma de llamar al código maquina en esa posición. El RANDOMIZE espera que algún día le devuelva algún número pero nunca ocurre.

¿Y por qué no se usa directamente USR pos_mem? Pues la respuesta es simple, porque no se puede en el Basic del Spectrum y hay que engañarlo usando otro comando que podría hasta ser PRINT .

Como escribir caracteres y emoji usando su código hexadecimal

Pequeño vídeo grabado con VokoScreenNG y usando «los subtítulos» de teclas pulsadas de ScreenKey.

Básicamente es pulsar a la vez las tres teclas ctrl may u donde es la tecla Control izquierda o derecha la que te apetezca, y mayúsculas o shift (no confundir con la tecla Bloq mayús) izquierdo o derecho también y después escribir el código hexadecimal.

Después te sale una letra u subrayada. Y puedes ir despacito  escribiendo el código hexadecimal y finalizas con un intro/enter…al contrario que con windows98 y msdos que tenías que escribirlo rápido y era con la tecla Alt o AltGr (no recuerdo) e incluso puedes borrar los números hexadecimales (recordar del 0 al f) mal metidos. O incluso borrar (también con la tecla esc la u subrayada para volver al estado normal del teclado.

Si una imagen vale por mil palabras un vídeo por 30fps x 1000 palabras x tiempo, pues eso el vídeo:

Rescatando artículos: Juego online educativo sobre css grid

Estoy recuperando los artículos interesantes que publique en cierta red social laboral privativa, los escribía ahí para dar el contenido que le falta…porque hasta los cojones de artículos de couching y neoliberales que salen.

Grid Garden

Rescatando artículos: Como convertir un puñado de imágenes en un pdf

Estoy recuperando los artículos interesantes que publique en cierta red social laboral privativa, los escribía ahí para dar el contenido que le falta…porque hasta los cojones de artículos de couching y neoliberales que salen.

Para probar las #diapositivas del Likedin gracias a / y la herramienta de código abierto (jo desde hace años uso el fractal para cuando necesito imágenes de prueba pero tiene mas formas de generar imágenes) me he creado un «#pdf de diapos» con los siguientes comandos:

convert -size 800×600 plasma:fractal fractal.png

convert -size 800×600 xc: +noise Random tele.desintonizada.png

convert -size 800×600 plasma:fractal -blur 0x2 -swirl 180 -shave 20×20 fractal.spiral.png

convert -size 800×600 pattern:hexagons wargame.png

convert -size 800×600 pattern:checkerboard -auto-level +level-colors black,red ajedrez.png

convert $(ls *.png -1 | tr «\n» » «) diapositivas.pdf

Ahora a ver si funciona el linkedin…

Rescatando artículos: Usando jq para sacar canciones de Rainwave

Estoy recuperando los artículos interesantes que publique en cierta red social laboral privativa, los escribía ahí para dar el contenido que le falta…porque hasta los cojones de artículos de couching y neoliberales que salen.

Un poquito de #mañanero para activar neuronas cual #cafeína digital en este lunes.

Motivación: tener el título completo de la canción sonando en la subestación de la mítica radio online https://rainwave.cc/chiptune.

Pues gracias a , a jq y #watch en / se puede hacer en #onelinecommand .

Primero el comando y después la explicación:

command=»http https://rainwave.cc/api4/info?sid=4 | jq ‘.sched_current.songs[0].title + \» (\» + ([.sched_current.songs[0].artists[].name] | join(\»,\»)) + \»)\»‘»; watch -t -c -n 5 eval $command

El comando esta en dos partes, primero la creación de la linea que va ejecutar el watch.

El watch, se ejecuta cada 5 segundos y le quitamos título y le damos color (aunque sea innecesario en este caso).

La linea que va ejecutar el watch es:
Con httpie y gracias a que usa #Django con tiene un #API bastante sencillo, le pido un de la info de la estación de Chiptune (que tiene id=4).
Ese json lo «pipeo» a un jq que hago una concatenación de strings para dar formato al texto del título, lo primero es sacar el título de la canción con .sched_current.songs[0].title que siempre es la primera (la 0) en el array de canciones.

Y después algo mas complejo aplico un join a un a un array de los nombres de autores/as de esa canción que me creo en vivo con [.sched_current.songs[0].artists[].name] .

Y ya esta.