Nuevo Punto Switcher para Linux: xswitcher

La interrupción del soporte de xneur me causó un poco de sufrimiento en los últimos seis meses (con la llegada de OpenSUSE 15.1 en mis escritorios: cuando xneur está activado, las ventanas pierden el foco y parpadean de manera divertida con el teclado) .

"Ah, maldición, comencé a escribir de nuevo en el diseño incorrecto", es obsceno en mi trabajo a menudo. Y no agrega positivo.


Al mismo tiempo, yo (como ingeniero de diseño) puedo articular claramente lo que quiero. Y quería (primero de Punto Switcher, y luego, gracias a Windows Vista, finalmente replantar en Linux, desde xneur) exactamente uno. Al darse cuenta de que la basura en la pantalla tiene un diseño incorrecto (esto generalmente ocurre al final de escribir una nueva palabra), pise "Pausa / Pausa". Y consigue lo que imprimí.

Por el momento, el producto tiene una relación funcionalidad / complejidad óptima (desde el punto de vista de mí). Es hora de compartir.

TL.DR


Continuará todo tipo de detalles técnicos, así que primero, un enlace "táctil" para los impacientes.

El siguiente comportamiento está actualmente codificado:

  • “Pausa / pausa”: retrocede la última palabra, cambia el diseño en la ventana activa (entre 0 y 1) y vuelve a escribir.
  • Ctrl izquierdo sin nada: alterna el diseño en la ventana activa (entre 0 y 1).
  • "Desplazamiento a la izquierda sin nada": activa el diseño 0 en la ventana activa.
  • "Desplazamiento a la derecha sin nada": activa el diseño No. 1 en la ventana activa.

De ahora en adelante, planeo personalizar el comportamiento. Sin comentarios, no es interesante (estoy contento con eso de todos modos). Creo que en Habré habrá un porcentaje suficiente de audiencia con problemas similares.

NB desde en la versión actual, el keylogger está atornillado a "/ dev / input /", xswitcher debe ejecutarse con derechos de root:

chown root:root xswitcher
chmod +xs xswitcher

Tenga en cuenta: el propietario del archivo con suid debe ser root, como quién es el propietario es suid y activará el inicio.

Los paranoicos (no soy la excepción) pueden clonarse desde GIT y ensamblarse en el acto. Como eso:

go get "github.com/micmonay/keybd_event"
go get "github.com/gvalkov/golang-evdev"

### X11 headers for OpenSUSE/deb-based
zypper install libX11-devel libXmu-devel
apt-get install libx11-dev libxmu-dev

cd "x switcher/src/"
go build -o xswitcher -ldflags "-s -w" --tags static_all src/*.go

Inicio automático agregar al gusto (dependiendo de DE).

Funciona, "no pida gachas" (≈30 segundos de CPU por día, ≈12 MB en RSS).

Detalles


Ahora para los detalles.

Todo el repositorio se dedicó originalmente a mi proyecto favorito, y comenzar otro es demasiado vago. Entonces, todo está apilado (solo en carpetas) y cubierto con AGPL ("patente al revés").

El código xswitcher está escrito en golang, con una mínima salpicadura de C. Se supone que este enfoque supondrá el menor esfuerzo (hasta ahora). Manteniendo la capacidad de conectar los desaparecidos a través de cgo.

Se presenta el texto del comentario, de dónde fue prestado y por qué. Porque el código xneur "no me inspiró", loloswitcher tomó como punto de partida .

El uso de "/ dev / input /" tiene sus ventajas (todo es visible, incluida la tecla presionada con repetición automática) y las desventajas. Los contras son:

  • La repetición automática (eventos con código "2") no se correlaciona con la repetición con X.
  • No puede ver la entrada a través de las interfaces X11 (por ejemplo, VNC funciona).
  • Necesito una raíz

Alternativamente, puede suscribirse a eventos X a través de "XSelectExtensionEvent ()". Puedes echar un vistazo al código xinput . Para ir, no encontré nada parecido, y la implementación del borrador dio cien líneas de código C de una vez. Hasta ahora reservado.

La conclusión "hacia atrás" hasta ahora se ha hecho atornillando el teclado virtual. Gracias al autor keybd_event, pero hay una abstracción de alto nivel y habrá que rehacerla aún más. Por ejemplo, tengo la tecla Win correcta, selecciona la tercera fila. Y solo se vuelve a transmitir el Win izquierdo.

Errores conocidos


  • No sabemos nada sobre la entrada "compuesta" (ejemplo: ½). No es necesario en este momento.
  • Reproducimos incorrectamente el Win correcto. En mi caso, rompe la disposición de los acentos.
  • No hay un análisis claro de la entrada. En cambio, hay varias funciones: Comparar (), CtrlSequence (), RepeatSequence (), SpaceSequence (). graciasnsmcanpara atención: arreglado en el código aquí. Con una cierta probabilidad, puede atrapar errores al reemplazar.
    En este lugar no sé "cómo" y me complacerá cualquier sugerencia.
  • (Oh, horror) uso competitivo de canales (keyboardEvents, mouseEvents).

Conclusión


El código es el procedimiento más simple. Y estúpido como yo. Por lo tanto, me estoy consolando con la esperanza de que casi cualquier técnico pueda terminar lo que quiere. Y este producto debido a esto no desaparecerá sin soporte como la mayoría solo por diversión.

Buena suerte

All Articles