En ny alternativ til Punto Switcher for linux: xswitcher

Avslutningen av stÞtten for xneur har forÄrsaket meg visse plager de siste seks mÄnedene. (med ankomsten av OpenSUSE 15.1 pÄ mine skrivebord: med aktivert xneur mister vinduene fokus og blinker morsomt i takt med tastaturinngangen).

«Åh, pokker, begynte igjen Ă„ skrive med feil layout» — dette skjer altfor ofte i mitt arbeid. Og det gir ikke noe positivt.

En ny alternativ til Punto Switcher for linux: xswitcher
Samtidig kan jeg (som konstruksjonsingeniĂžr) formulere hva jeg Ăžnsker klart. Og jeg Ăžnsket (fĂžrst fra Punto Switcher, og deretter, takk til Windows Vista, som endelig flyttet meg til Linux med xneur) bare Ă©n ting. Å innse at skjermen viser nonsens i feil layout (dette skjer vanligvis nĂ„r man har skrevet et nytt ord), og trykke pĂ„ «Pause/Break». Og fĂ„ det jeg skrev.

Per nÄ har produktet et optimalt (for meg) forhold mellom funksjonalitet og kompleksitet. Det er pÄ tide Ä dele.

TL.DR

Videre kommer det tekniske detaljer, sĂ„ fĂžrst — lenke «for Ă„ prĂžve» for de utĂ„lmodige.

Per nÄ har fÞlgende oppfÞrsel blitt hardkodet:

  • «Pause/Break»: fjerner (Backspace) det siste ordet, bytter layout i det aktive vinduet (mellom 0 og 1) og skriver det ut igjen.
  • «Venstre Ctrl uten noe»: bytter layout i det aktive vinduet (mellom 0 og 1).
  • «Venstre Shift uten noe»: aktiverer layout nr. 0 i det aktive vinduet.
  • «HĂžyre Shift uten noe»: aktiverer layout nr. 1 i det aktive vinduet.

Fra nĂ„ av planlegger jeg Ă„ tilpasse atferden. Uten tilbakemelding — er det ikke interessant (jeg er allerede fornĂžyd). Jeg antar at det finnes et tilstrekkelig antall i publikum pĂ„ Habr som har lignende problemer.

N.B. Siden den nÄvÊrende versjonen av keylogger kobles til "dev/input/", mÄ xswitcher startes med root-rettigheter:

chown root:root xswitcher
chmod +xs xswitcher

VÊr oppmerksom pÄ: Eieren av filen med suid mÄ vÊre root, da det er eieren som vil aktivere suid ved kjÞring.

Paranoikere (jeg er ikke unntatt) kan klone fra GIT og bygge pÄ stedet. Omtrent slik:

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

Legg til autostart etter smak (avhengig av DE).

Fungerer, «krever ikke mye» (≈30 sekunder CPU i dĂžgnet, ≈12 MB i RSS).

Detaljer

NĂ„ — detaljene.

Heile repertoaret var opprinnelig dedikert til mitt pet-prosjekt, og jeg gidder ikke Ä opprette en ny ennÄ. SÄ alt er samlet i en haug (bare i mapper) og dekket av AGPL ("omvendt patent").

Koden til xswitcher er skrevet i golang, med minimale innslag av C. Det antas at denne tilnÊrmingen vil gi lavere arbeidskostnader (til nÄ stemmer det). Det gir mulighet for Ä koble til manglende gjennom cgo.

Kommentarene i teksten forklarer hvor jeg har hentet hva og hvorfor. Siden koden til xneur "ikke inspirerte meg", tok jeg utgangspunkt i den. loloswitcher.

Bruken av "/dev/input/" har bÄde sine fordeler (alt er synlig, inkludert hvilken tast som er trykket ned med autogjentakelse) og ulemper. Ulempene er:

  • Autogjentakelse (hendelser med koden "2") korrelerer ikke med gjentakelse fra X.
  • Det er ikke synlig inndata gjennom X11-grensesnitt (for eksempel fungerer VNC slik).
  • Root-tilgang er nĂždvendig.

PÄ den annen side kan man abonnere pÄ X-hendelser gjennom "XSelectExtensionEvent()". Du kan se dette i koden til xinput.For Go fant jeg ingenting lignende, og den fÞrste implementeringen ga med en gang hundre linjer med C-kode. Jeg har lagt det til side for nÄ.

Utgangen "bakover" er for nÄ laget ved Ä feste en virtuell tastatur. Takk til forfatteren av keybd_event, men det er for hÞy nivÄabstraksjon, og vi mÄ endre videre. I mitt tilfelle velger hÞyre Win-tast rad 3. Men tilbake oversettes kun den venstre Win.

Kjente feil

  • Vi vet ingenting om "kompositt" inndata (eksempel: œ). Akkurat nĂ„ er det ikke nĂždvendig.
  • HĂžyre Win gjenkjennes feil. I mitt tilfelle bryter det oppsettet av aksenttegn.
  • Det er ingen klar analyse av inndata. I stedet finnes det flere funksjoner: Compare(), CtrlSequence(), RepeatSequence(), SpaceSequence(). Takk nsmcan for oppmerksomheten: jeg har rettet i koden og her. Med viss sannsynlighet kan man kutte bugs under erstatningen.
    PÄ dette stedet vet jeg ikke "hvordan det skal vÊre" og vil sette pris pÄ alle forslag.
  • (Å, jada) samtidig bruk av kanaler (keyboardEvents, miceEvents).

Konklusjon

Koden er den enkleste prosedyren. Og dum som meg. SÄ jeg trÞster meg med hÄpet om at enhver tekniker kan skrive det Þnskede. Og dette produktet vil derfor ikke forsvinne uten stÞtte som de fleste just-for-fun.

Lykke til!

Kilde: habr.com

KjĂžp pĂ„litelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere đŸ”„ KjĂžp pĂ„litelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere | ProHoster