Nou analògic de Punto Switcher per a Linux: xswitcher

El final del suport xneur m'ha causat cert patiment durant els últims sis mesos. (amb l'arribada d'OpenSUSE 15.1 als meus ordinadors de sobretaula: amb xneur habilitat, les finestres perden el focus i parpellegen de manera divertida amb l'entrada del teclat).

"Oh, maleït, vaig començar a escriure amb un disseny equivocat de nou": a la meva feina això passa amb indecents sovint. I no afegeix res de positiu.

Nou analògic de Punto Switcher per a Linux: xswitcher
Al mateix temps, jo (com a enginyer de disseny) puc formular clarament el que vull. Però jo volia (primer des de Punto Switcher, i després, gràcies a Windows Vista, finalment canviar a Linux, des de xneur) exactament una cosa. Després d'haver adonat que les escombraries de la pantalla estan en un disseny incorrecte (això sol passar al final d'escriure una paraula nova), trepitgeu "Pausa/Pausa". I aconsegueix el que vas imprimir.

De moment, el producte té la relació òptima (des del meu punt de vista) funcionalitat/complexitat. És hora de compartir.

TL.DR

Més endavant hi haurà tota mena de detalls tècnics, així que primer... enllaç "tocar" per als impacients.

Actualment el comportament següent està codificat:

  • "Pausa/Pausa": fa retrocedir l'última paraula, canvia el disseny a la finestra activa (entre 0 i 1) i torna a marcar.
  • "Ctrl esquerre sense res": canvia el disseny a la finestra activa (entre 0 i 1).
  • "Majús esquerra sense res": activa el disseny núm. 0 a la finestra activa.
  • "Majús dret sense res": activa el disseny núm. 1 a la finestra activa.

A partir d'ara tinc previst personalitzar el comportament. Sense comentaris, no és interessant (de totes maneres estic bé). Crec que a Habré hi haurà un percentatge suficient d'audiència amb problemes similars.

NB Perquè a la versió actual, el keylogger s'adjunta a "/dev/input/", xswitcher s'ha de llançar amb drets d'arrel:

chown root:root xswitcher
chmod +xs xswitcher

Recordeu: El propietari del fitxer amb suid ha de ser root, perquè qui sigui el propietari es convertirà en suid a l'inici.

Els paranoics (no sóc una excepció) es poden clonar GIT i muntar in situ. Així:

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

Afegiu l'inici automàtic al gust (segons DE).

Funciona, "no demana farinetes" (≈30 segons de CPU al dia, ≈12 MB en RSS).

Detalls

Ara, els detalls.

Tot el repositori es va dedicar originalment al meu projecte de mascota, i em fa mandra començar-ne un altre. Així, tot està amuntegat (només en carpetes) i cobert per AGPL ("patent inversa").

El codi xswitcher està escrit en golang, amb unes inclusions mínimes de C. Se suposa que aquest enfocament comportarà el menor esforç (fins ara ho ha fet). Tot mantenint la capacitat de connectar el que falta mitjançant cgo.

El text conté comentaris sobre d'on va ser manllevat i per què. Perquè el codi xneur “no em va inspirar”, el vaig prendre com a punt de partida loloswitcher.

L'ús de "/dev/input/" té tant els seus avantatges (tot és visible, inclosa la tecla de repetició automàtica premuda) i els seus desavantatges. Els desavantatges són:

  • La repetició automàtica (esdeveniments amb el codi "2") no es correlaciona amb la repetició amb x.
  • L'entrada a través de les interfícies X11 no és visible (així és com funciona VNC, per exemple).
  • Necessita arrel.

D'altra banda, és possible subscriure's a X esdeveniments mitjançant "XSelectExtensionEvent()". Podeu mirar-hi codi xinput. No vaig trobar res com això per anar, i la implementació aproximada va prendre de seguida un centenar de línies de codi C. Deixeu-ho de banda de moment.

Actualment, la sortida "inversa" es fa cargolant el teclat virtual. Gràcies a l'autor de keybd_event, però l'abstracció és massa alt i s'haurà de tornar a fer. Per exemple, faig servir la tecla Win dreta per seleccionar la tercera fila. I només es transmet el Win esquerre.

Errors coneguts

  • No sabem res sobre l'entrada "composta" (exemple: ½). Ara mateix no és necessari.
  • Estem jugant a la victòria correcta de manera incorrecta. En el meu cas, trenca l'èmfasi.
  • No hi ha una anàlisi d'entrada clara. En canvi, hi ha diverses funcions: Compare(), CtrlSequence(), RepeatSequence(), SpaceSequence(). Gràcies nsmcan per la teva cura: corregeix-ho al codi i aquí. Amb una certa probabilitat, podeu detectar errors en substituir.
    En aquest moment no sé "com fer-ho" i m'agradaria qualsevol suggeriment.
  • (Déu meu) ús competitiu dels canals (keyboardEvents, miceEvents).

Conclusió

El codi és el procediment més senzill. I estúpid com jo. Per tant, m'afalaga amb l'esperança que gairebé qualsevol tècnic pugui completar el que vol. I gràcies a això, aquest producte no desapareixerà sense suport, com la majoria només per diversió.

Bona sort!

Font: www.habr.com

Afegeix comentari