Entorno con dificultades
Los principales aspectos que se deben tener para lograr una solución de software son terquedad y capricho. La terquedad para pensar que se puede probar una nueva posibilidad y el capricho para no aceptar resultados parecidos o que cumplan con un cierto porcentaje de satisfacción. Estas necesidades insatisfechas son muy comunes en la personalización de software libre ya que sus desarrolladores son comunidades de colaboradores que establecen parámetros para los lanzamientos de las versiones. Entonces ocurre que el entusiasmo de todos los interesados produzcan versiones con grandes omisiones, por ejemplo faltantes de paginas man o info e incluso con bugs o errores conocidos pendientes de solución. No es mi intención juzgar a las versiones inmaduras de software, ya que muchas veces derivan al poco tiempo en grandes genialidades. Es solo un comentario introductorio para los que están acostumbrados al uso de aplicaciones comerciales.
Para entrar en contexto les indico las versiones de la base principal del escritorio peronista:
- [peronista@archlinux ~]$ pacman -Qi wayland wayvnc sway | grep -e Versión -e Nombre
- Nombre : wayland
- Versión : 1.23.1-2
- Nombre : wayvnc
- Versión : 0.9.1-1
- Nombre : sway
- Versión : 1:1.11-1
Es decir que es un entorno de escritorio con componentes de vanguardia, pero no quiere decir que se cumplan todos los requisitos para ser un escritorio completo según las normas de freedesktop.org. Dichas normas son muy importantes para crear un sistema operativo genérico que ser utilizado por usuarios finales, pero no es nuestro caso.
En este caso, me di cuenta que no es lo mismo un escritorio de desarrollo de software, que otro orientado a la producción de documentos. Para publicar explicaciones como esta, es muy difícil hacerlo sin la entrañable Ñ. Uno se las puede arreglar sin acentos porque el corrector ortográfico de Firefox los detecta y es posible indicar la opción correcta con el menú contextual. Pero en el caso de las ñalabras, es a veces imposible que el corrector vincule a “niandu” con ñandú, entonces lo único es copiar y pegar. Salvo que nos pongamos a trabajar en una solución.
Aislando el problema: ¿teclado, Wayland, Sway o WayVNC?
Nos proponemos dar una solución a la configuración regional del entorno de escritorio peronista, pero ¿como interactúa el teclado desde el cliente vnc hasta las aplicaciones wayland? El diagrama en bloques de la figura 1 nos aclara que mediante la red tcp el protocolo vnc le transfiere indirectamente a Sway por cualquier evento del teclado, porque WayVNC responde según su configuración.

Entonces, seria posible realizar un cambio de configuración del teclado detectado automáticamente por WayVNC. El problema es que los cambios de configuración de este servicio, se leen al recargarse en la memoria Ram.
Recordemos de la entrada anterior que WayVNC esta configurado como un servicio de usuario peronista y que es una ventaja para reiniciar este servicio en caso de incidencias re red, o detenciones imprevistas de WayVNC porque ocurren “memory leaks” que, seguramente estan pendientes de ser solucionados por los desarrolladores.
Podríamos seguir con la misma linea de pensamiento y establecer unas configuraciones ingeniosas para poder salvar la autodeteccion del layout del teclado de sesgadas opciones. Por lo tanto si queremos que el teclado en WayVNC sea detectado según nuestras necesidades, sera necesario que el cliente vnc envíe de alguna codificación de señal que indique cual es el layout actualmente seteado en el teclado del cliente. Sera una cuestión la implementación de la señal del lado del cliente vnc porque esta fuera de nuestro alcance modificar el código de RealVNC, TigerVNC y otros clientes vnc de código cerrado. Seria mucho mas conveniente que del lado del servidor reconozca tabulando los dispositivos con sus correspondientes layout de cada uno, es una estrategia mas complicada pero se mantiene la estandarización del protocolo. Dicha estrategia llamaremos “kblay_cli_detector”.
Proceso de depuración del teclado WayVNC en wmenu
Comenzamos con el requisito previo de la configuración regional del sistema operativo esta completa. La implementación de kblay_cli_detector es realizable de manera modular ya que es posible identificar etapas que se secuenciaran para lograr los resultados.
- Detección de errores de procesamiento del teclado
- Identificar el dispositivo del cliente
- Obtención del correcto layout
- Modificación de la configuración de WayVNC
- Reinicio de WayVNC sin que se cierren los demás procesos, aunque el cliente vnc se cierra.
- El usuario debe volver a conectarse al server con el cliente vnc
Esta secuencia se ira perfeccionando, el sistema se puede implementar de una manera básica desarrollando las secuencias 4,5 y 6 si obtenemos el correcto layout mediante un widget. Ya veremos mas adelante los detalles del widget y la secuencia 3.
Lo mas importante es implementar el cambio de configuración de WayVNC con un solo comando para que pueda ser activado con la respuesta de un evento. Por lo tanto ese comando sera un script bash con la capacidad de edición de los archivos de configuración de WayVNC “/usr/lib/systemd/user/wayvnc.service” y “$HOME/.config/wayvnc/config” y lo llamaremos “_kblay_wayvnc_toggle”. No hay inconvenientes en editar archivos dentro de “$HOME/.config/” porque son del espacio del usuario, pero no es conveniente editar archivos fuera de “$HOME” porque son originales de los repositorios oficiales.
La siguiente exposición ingeniosa presenta una solución a la secuencia 4, 5 y 6 y ademas proveerá un acceso al widget predeterminado de Sway, el minimalista y elegantemente eficaz Wmenu.
Ingenio 1: WayVNC al servicio de usuario peronista
Otro drop-in es la solución con la ventaja que sobrescribe al servicio de usuario wayvnc, entonce es posible crearlo dentro del ambiente de usuario:
- ##Comando para crear el directorio drop-in
[peronista@vps-4099842-x:~]$ mkdir -p .config/systemd/user/wayvnc.service.d/
- ##Crea el archivo bash
[peronista@vps-4099842-x:~]$ nano .config/systemd/user/wayvnc.service.d/
override.conf- [Service]
- ExecStart=
- ExecStart=/usr/bin/wayvnc -k es
Este drop-in sobrescribe ExecStart y le agrega el parámetro -k es porque le indica a WayVNC que el keyboard layout, pero ademas, dentro del espacio de usuario. En este punto, si reiniciamos el servicio de usuario wayvnc ya funciona la tecla ñ, pero en todos los dispositivos clientes. Si necesitamos reactivar el layout en ingles debemos continuar.
Ingenio 2: El famoso script “_kblay_wayvnc_toggle”
Dicho script es un mediador de la gestión del teclado detectado por WayVNC, entonces con un solo llamado a ejecución es posible cambiar el layout detectado. En el siguiente diagrama en bloque se describe como el cliente vnc que accede al server, interactúa con WayVNC y este servicio interpreta los eventos del teclado enviados por el protocolo según la configuración guardada. Dicha configuración puede ser editada en cualquier momento por _kblay_wayvnc_toggle y reinicia la conexión desconectando al cliente volviendo a aceptar el nuevo ingreso inmediatamente.

Se implementa el script que interactúa con el drop-in del usuario peronista del apartado anterior. Funciona cuando se solicita, lee y filtra el valor del parámetro -k de la linea Exec de overrite.conf. Luego la lógica genera el nuevo valor del parámetro -k y guarda los cambios. Por ultimo reinicia el servicio de usuario wayvnc.service para aplicar los cambios.
Ingenio 3: Proceso de depuración del teclado WayVNC
El desarrollo de script es un bash que tiene la capacidad de interactuar con los archivos de usuario peronista, entonces lee y escribe el archivo “$HOME/.config/systemd/user/wayvnc.service.d/override.conf” y ademas genera un log de depuración escribiendo al archivo “$HOME/wayvnc_toggle_layout.log” El código 1 muestra la lógica de _kblay_wayvnc_toggle.
#!/bin/bash
- #Archivo bash script: “$HOME/bin/_kblay_wayvnc_toggle
- #Define la ruta al archivo override de wayvnc
- OVERRIDE_CONF=”$HOME/.config/systemd/user/wayvnc.service.d/override.conf”
- echo “Detectando: Archivo de override de wayvnc …”
- LOG_FILE=”$HOME/wayvnc_toggle_layout.log” # Archivo para los logs del script
- #Redirigir stdout y stderr al archivo de log
- if [ ! -f “$LOG_FILE” ]; then
- cat /dev/null > “$LOG_FILE”
- fi
- exec &> “$LOG_FILE”
- echo “==========================================”
- echo “Script iniciado en $(date)”
- echo “PATH: $PATH” # Para ver si hereda el PATH correctamente
- #Verifica si el archivo override existe
- if [ ! -f “$OVERRIDE_CONF” ]; then
- echo “Error: Archivo de override de wayvnc no encontrado en $OVERRIDE_CONF” >&2
- notify-send “wayvnc Layout” “Error: Override file not found!” –urgency=critical
- exit 1
- fi
- #Lee la línea ExecStart actual para determinar el layout
- CURRENT_EXECSTART=$(grep “ExecStart=.*wayvnc” “$OVERRIDE_CONF” | head -n 1)
- echo “Línea ExecStart actual: $CURRENT_EXECSTART”
- #Determina el layout actual (buscando “-k es” o “-k us”)
- if [[ “$CURRENT_EXECSTART” == “-k es” ]]; then
- CURRENT_LAYOUT=”es”
- NEW_LAYOUT=”us”
- elif [[ “$CURRENT_EXECSTART” == “-k us” ]]; then
- CURRENT_LAYOUT=”us”
- NEW_LAYOUT=”es”
- else
- echo “Advertencia: Layout actual no reconocido. Asumiendo ‘es’ y cambiando a ‘us’.” >&2
- CURRENT_LAYOUT=”desconocido”
- NEW_LAYOUT=”us” # O podrías poner “es” si ese es tu layout preferido por defecto
- fi
- echo “Cambiando wayvnc keyboard layout de ‘$CURRENT_LAYOUT’ a ‘$NEW_LAYOUT’…”
- {
- echo “[Service]”
- echo “ExecStart=”
- echo “ExecStart=/usr/bin/wayvnc -k $NEW_LAYOUT”
- } > “$OVERRIDE_CONF.tmp” # Escribe a un archivo temporal
- mv “$OVERRIDE_CONF.tmp” “$OVERRIDE_CONF” # Mueve el archivo temporal sobre el original
- #Recargar systemd y reiniciar wayvnc
- echo “Recargando systemd y reiniciando wayvnc.service…”
- systemctl –user daemon-reload
- SYSTEMCTL_STATUS=$? # Captura el estado de salida de daemon-reload
- echo “systemctl –user daemon-reload status: $SYSTEMCTL_STATUS”
- if [ $SYSTEMCTL_STATUS -eq 0 ]; then
- systemctl –user restart wayvnc.service
- SYSTEMCTL_STATUS=$? # Captura el estado de salida de restart
- echo “systemctl –user restart wayvnc.service status: $SYSTEMCTL_STATUS”
- else
- echo “Error en systemctl –user daemon-reload, no se reiniciará wayvnc.”
- notify-send “wayvnc Layout” “Error al recargar systemd daemon.” –urgency=critical
- exit 1
- fi
- if [ $SYSTEMCTL_STATUS -eq 0 ]; then
- echo “¡Cambio a ‘$NEW_LAYOUT’ y reinicio de wayvnc exitoso!”
- notify-send “wayvnc Layout” “Cambiado a: $NEW_LAYOUT”
- else
- echo “Error al reiniciar wayvnc.service. Verifique los logs de systemd.”
- notify-send “wayvnc Layout” “Error al cambiar a: $NEW_LAYOUT” –urgency=critical
- fi
- echo “Script finalizado en $(date)”
- echo “==========================================”
Código 1: Detalle del código fuente del script _kblay_wayvnc_toggle
Las dependencias del script son noify-tools y mako, completan la depuración del script en caso de fallas. Donde dice “notify-send” implementan notificaciones de escritorio para Wayland, se instalan y se configuran con este comando, solamente se solicitara el password tal cual se muestra en codigo 2.
[peronista@vps-4099842-x:~]$ sudo pacman -S mako && echo "exec mako &" >> .config/sway/config
[peronista@vps-4099842-x:~]$ chmod +x ~/bin/_kblay_wayvnc_toggle
Código 2: Instalación y configuración de las notificaciones de escritorio Mako en Archlinux.
Después es necesario reiniciar el sistema para recargar la configuración de Sway. Entonces ya es posible ejecutar el comando y que se reinicie WayVNC. En la figura 4 se muestra que luego de .reiniciar la conexión aparece la notificación mako del cambio de layout del teclado. En esta version del script cada vez que se ejecuta alterna es a us y así sucesivamente.

Ingenio 4: Incluyendo accesos al widget predeterminado de Sway
El comando de l usuario peronista quedara integrado a Sway mediante el widget minimalista de escritorio Wmenu. Al ser un descendiente directo de Dmenu del escritorio I3, se accede con la combinación de teclas command-d o win-d, y aparece la barra de menu con la entrada de texto para filtrar las aplicaciones a medida que se escribe.
[peronista@vps-4099842-x:~]$ echo "export PATH=\"$HOME/bin:$PATH\"" >> .profile
[peronista@vps-4099842-x:~]$ echo "export PATH=\"$HOME/bin:$PATH\"" >> .bashrc
[peronista@vps-4099842-x:~]$
sudo ln -s /home/peronista/bin/_kblay_wayvnc_toggle /usr/local/bin/kblay_wayvnc_toggle
Código 2: Instalación y configuración de las notificaciones de escritorio Mako en Archlinux.
Es opcional crear un archivo para otros lanzadores de aplicaciones, pero le da un toque de profesionalismo. Para crear dicho archivo lanzador, se crea el archivo ~/.local/share/applications/wayvnc-toggle.desktop
y se escribe el contenido mostrado en codigo 3.
[Desktop Entry]
Name=WayVNC Toggle Layout
Comment=Cambia el layout del teclado de WayVNC y reinicia el servicio
Exec=/usr/local/bin/kblay_wayvnc_toggle
Terminal=false
Type=Application
Categories=System;Utility;
Código 3: Contenido de wayvnc-toggle.desktop.
Genial, ahora lo úrico que queda es hacer la prueba si Wmenu de Sway detecta a enlace simbólico “kblay_wayvnc_toggle”, es muy simple: accedemos a la barra de Wmenu con la combinación de teclas command-d o win-d, luego en el lado izquierdo del widget, se comienza a escribir el comando deseado. Cuando aparece en las opciones de la derecha de la barra, se oprime return o enter y listo. En la figura 4, se muestra la secuencia de imágenes de Wmenu detectando a kblay_wayvnc_toggle,

Conclusión: El Triunfo de la Persistencia y el Análisis
Este viaje de depuración, marcado por la terquedad para no aceptar un “no” por respuesta y el capricho por una solución completa, nos ha enseñado valiosas lecciones sobre la personalización en entornos de software libre como Sway en Wayland. Lo que inicialmente parecía un simple problema de un script “invisible” en wmenu
, se descompuso en una serie de desafíos interconectados, cada uno revelando una capa más profunda del ecosistema Linux.
Aprendimos la vital importancia de la variable de entorno $PATH
y cómo su correcta configuración (especialmente a través de systemd --user/environment.d
) es fundamental para que los procesos de nuestra sesión Wayland hereden el entorno esperado. Descubrimos que, aunque los archivos .desktop
son esenciales para la integración visual de aplicaciones, a veces no son suficientes cuando un lanzador como wmenu
tiene particularidades en su mecanismo de detección.
Finalmente, la solución más elegante y efectiva para este caso específico fue tan sencilla como crear un enlace simbólico de nuestro script en una ruta estándar del sistema (/usr/local/bin
). Esta pequeña acción “normalizó” nuestro script ante los ojos de wmenu
, permitiendo que fuera detectado y lanzado sin problemas.
El resultado es un escritorio Sway no solo a la vanguardia tecnológica, sino también perfectamente adaptado a nuestras necesidades de producción, donde la querida “ñ” ya no es una dificultad, sino una pulsación de tecla fluida. Este caso es un claro ejemplo de cómo la perseverancia y un enfoque metódico de depuración pueden transformar una frustración en una característica potente y personalizada, adaptando el hardware estandarizado a nuestro favor y demostrando el verdadero poder del software libre.
Referencias:
- Sway: Sway User’s Manual
- WayVNC: wayvnc – A VNC server for wlroots based Wayland compositors. – Ubuntu Manpage (Puedes enlazar al manpage ya que el repositorio de GitHub de
any1/wayvnc
es su fuente principal y no tiene una documentación web aparte tan concisa como estaman page
). - systemd.exec: systemd.exec(5) – jessie – Debian Manpages
- systemd.environment-generator: systemd.environment-generator(7) – Linux manual page – Michael Kerrisk
- wmenu: wMenu – GitHub Pages (Este es el que parece más directamente relacionado con la funcionalidad del menú. También existe un repositorio en
github.com/dixonwille/wmenu
, pero parece ser una implementación diferente en Go.) - Bash: Bash Reference Manual – GNU
- notify-send: notify-send(1) – Arch Linux manual pages
- Mako: mako notifications stay “burnt in” until screen/region updates otherwise · Issue #6914 · swaywm/sway – GitHub (Este enlace es a un hilo de issues que menciona
mako
. Si encuentras una página principal o repositorio más directo para Mako, podrías usarlo. Sino, este muestra su contexto de uso con Sway.) - Arch Linux Wiki: Main page (Español) – ArchWiki – Arch Linux
No Responses