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.

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 â 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 xswitcherVÊ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 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. .
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 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 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
