769 - ¿Stream Deck por 15€? Configurando un Macro Pad en Linux con Rust

769 - ¿Stream Deck por 15€? Configurando un Macro Pad en Linux con Rust

Configura un mini teclado de 3 teclas y rueda en Linux. Aprende a mapear hardware barato con Rust, reglas udev y el nuevo demonio kboard. ¡Optimiza!

1:25
-3:15

La verdad es que a pesar de que tengo un teclado mecánico fantástico, del que ya he hablado en alguna ocasión, no puedo resistirme a probar tontunerías. En concreto, en esta ocasión he probado un mini teclado con rueda. Un mini teclado absurdo, cuya utilidad todavía no tengo muy clara. La primera vez que ví estos teclados pensé en que sería un sustituto del Stream Deck de elgato, pero barato, muy barato… pero la verdad es que no es ni mucho menos así. También he visto que hay alternativas, pero mucho mas económicas, aunque el problema será si esto terminará funcionando en Linux. Esto tengo que estudiarlo. De cualquier forma, el chisme que he comprado vale unos 16 euros, y a este precio es imbatible, y me va a dar mis dos o tres buenas horas de entretenimiento.

¿Stream Deck por 15€? Configurando un Macro Pad en Linux con Rust

El primer problema es la configuración

Como no podía ser de otra forma, este chisme viene para configurarlo en Windows. Tengo que decir, que mi primera intención fue hacerlo con el equipo de mi mujer. Sin embargo, la muy bandida, tiene protegido su equipo con PIN, y aunque podía haber estado intentando averiguarlo, me dio mucha pereza, así que he tirado de Gemini para obtener información.

Lo primero ha sido ejecutar lsusb este fue el resultado,

 Bus 001 Device 011: ID 1189:8890 Acer Communications & Multimedia

Aunque aparezca como Acer Communications & Multimedia, ese es un ID fantasma muy común en los microcontroladores económicos.

Ese ID 1189:8890 es la firma típica de los teclados que utilizan el chip CH552 (o una variante de la familia WCH). Los fabricantes suelen tomar prestado el Vendor ID de Acer para evitar registrar uno propio.

Al ser un chip CH552, tenemos un dispositivo que es básicamente un lienzo en blanco que podemos configurar como queramos. Es decir, le podemos asignar a cada una de las teclas y a la rueda, el código que queramos. Por ejemplo, podemos decirle que la primera tecla es F20.

ch57x-keyboard-tool

Existe una joya en Rust llamada ch57x-keyboard-tool que te va a permitir configurar este teclado de forma sencilla. Simplemente le tienes que pasar un archivo en formato yaml como el que te indico a continuación,

orientation: normal

rows: 1
columns: 3
knobs: 1

layers:
  - buttons:
      - ["f13", "f14", "f15"]
    knobs:
      - ccw: "f16"
        press: "f17"
        cw: "f18"

Lo que he hecho es asignar las teclas f13 a f18 que no se encuentran en mi teclado y así, seguro que no voy a tener ningún problema. Las teclas F13 a F24, existen en el estándar, pero casi ningún teclado físico las tiene.

Si lo quieres utilizar sin ganar derechos de administrador, tienes que añadir la siguiente regla 50-usb-macrokeyboard.rules,

SUBSYSTEM=="usb", ATTR{idVendor}=="1189", ATTR{idProduct}=="8890", TAG+="uaccess"

Y recargar las reglas con,

sudo udevadm control --reload-rules
sudo udevadm trigger

Niri, GNOME y otros

A partir de aquí ya puedes configurar cualquier comando a las teclas F13 a F18 utilizando la herramienta de atajos de teclado de tu entorno de escritorio favorito. En mi caso, utilizo Niri con Dank Material Shell, pero también funciona perfectamente en GNOME, y entiendo que con cualquier otra environment de escritorio.

Sin embargo, yo he querido ir un paso mas allá, y quería hacer una sencilla herramienta que me permitiera trabajar directamente con el dispositivo, sin necesidad de pasar por el entorno de escritorio. Y es aquí donde entra en juego la herramienta que he desarrollado kboard.

kboard

Como sabes que me gusta meterme en fregados, he implementado una sencilla herramienta en Rust llamada kboard que me permite asignar acciones a las teclas y a la rueda. La idea es que pueda asignar acciones como subir volumen, bajar volumen, siguiente pista, anterior pista, etcétera.

En concreto, solo lo tengo para subir y bajar volumen, y para la pista de entrada, la de salida y los cortes. Aunque esto de los cortes lo tengo que corregir para que sea exactamente lo que busco.

Tienes el código fuente en GitHub. Pero si no te quieres calentar la cabeza, simplemente descarga el binario precompilado desde la sección de Releases. Lo pones en ~/.local/bin, le pones de nombre kboard y listo.

A continuación la configuración que estoy utilizando en ~/.config/kboard/config.yaml,

# Ejemplo de configuracion: pares codigo -> comando a ejecutar
# keys y wheel son mapas donde la clave es el código (entero)

keys:
  106: "mpv /data/atareao.es/podcasts/recursos/entrada.mp3"
  105: "mpv /data/atareao.es/podcasts/recursos/salida_corta.mp3"
  104: "mpv /data/atareao.es/podcasts/recursos/transicion.mp3"
  109: "amixer -q sset Master 5%+"
  107: "amixer -q sset Master 5%-"

wheel:
  109: "amixer -q sset Master 5%+"
  107: "amixer -q sset Master 5%-"

Y por último un servicio de systemd para que se inicie automáticamente con el sistema. El archivo ~/.config/systemd/user/kboard.service,

[Unit]
Description=Servicio de control para Macro Teclado Sinloon (atareao)
After=graphical-session.target

[Service]
ExecStart=%h/.local/bin/kboard
Restart=always
RestartSec=3
Environment=DISPLAY=:0
Environment=XAUTHORITY=%h/.Xauthority

[Install]
WantedBy=graphical-session.target

Recuerda habilitar el servicio con,

systemctl enable --user kboard.service
systemctl start --user kboard.service

Puedes ver fácilmente el log utilizando,

journalctl --user -u kboard.service -f

Si modificas la configuración, solo tienes que reiniciar el servicio,

systemctl restart --user kboard.service

Imaginación al poder

A partir de aquí, la imaginación es el límite. Puedes asignar a las teclas y a la rueda cualquier acción que se te ocurra. Por ejemplo, podrías asignar a las teclas acciones de control para tu reproductor multimedia favorito, o para controlar presentaciones, o incluso para ejecutar scripts personalizados que realicen tareas específicas en tu sistema.


Más información,

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *