Nije analoog fan Punto Switcher foar linux: xswitcher

It ein fan xneur-stipe hat my de ôfrûne seis moannen wat lijen feroarsake. (mei de komst fan OpenSUSE 15.1 op myn buroblêden: mei xneur ynskeakele, ferlieze finsters fokus en flikkerje grappich yn 'e tiid mei toetseboerdynput).

"Och, ferdomme, ik bin wer in ferkearde opmaak begon te typen" - yn myn wurk bart dat ûnfatsoenlik faak. En it foeget neat posityfs ta.

Nije analoog fan Punto Switcher foar linux: xswitcher
Tagelyk kin ik (as ûntwerpingenieur) hiel dúdlik formulearje wat ik wol. Mar ik woe (earst fan Punto Switcher, en dan, tank oan Windows Vista, úteinlik oerstappe nei Linux, fan xneur) krekt ien ding. Nei't jo realisearre hawwe dat it jiskefet op it skerm yn 'e ferkearde yndieling is (dit bart meastentiids oan' e ein fan it typen fan in nij wurd), stamp op "Pause / Break". En krije wat jo printe hawwe.

Op it stuit hat it produkt de optimale (út myn eachpunt) funksjonaliteit / kompleksiteit ratio. It is tiid om te dielen.

TL.DR

Letter komme der allerhanne technyske details, dus earst - link "to touch" foar de ûngeduldich.

Op it stuit is it folgjende gedrach hardcoded:

  • "Pauze / Brek": backspaces it lêste wurd, skeakelet de yndieling yn it aktive finster (tusken 0 en 1) en draait wer.
  • "Links Ctrl sûnder neat": skeakelet de yndieling yn it aktive finster (tusken 0 en 1).
  • "Links Shift sûnder wat": skeakelet layout No.. 0 yn it aktive finster.
  • "Rjochts Shift sûnder neat": skeakelet layout No.. 1 yn it aktive finster.

Fan no ôf plan ik it gedrach oan te passen. Sûnder feedback is it net nijsgjirrich (ik bin der yn elts gefal goed mei). Ik leau dat der op Habré in foldwaande persintaazje fan it publyk sil wêze mei ferlykbere problemen.

NB Omdat yn 'e hjoeddeistige ferzje is de keylogger taheakke oan "/dev/input/", xswitcher moat wurde lansearre mei rootrjochten:

chown root:root xswitcher
chmod +xs xswitcher

Tink derom: De eigner fan it bestân mei suid moat root wêze, om't wa't de eigner is, sil by it opstarten wurde omfoarme ta suid.

Paranoïden (Ik bin gjin útsûndering) kin clone út GIT en sammelje op it plak. Fyn dat leuk:

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

Foegje autostart ta smaak (ôfhinklik fan DE).

It wurket, "freget gjin pap" (≈30 sekonden CPU per dei, ≈12 MB yn RSS).

View details

No - de details.

It hiele repository wie oarspronklik wijd oan myn petprojekt, en ik bin te lui om in oare te begjinnen. Dat, alles wurdt opsteapele (gewoan yn mappen) en bedekt troch AGPL ("reverse patint").

De xswitcher koade is skreaun yn golang, mei minimale ynklúzjes fan C. Der wurdt fan útgien dat dizze oanpak sil resultearje yn it minste bedrach fan ynspannings (oant no ta hat). Wylst it behâld fan de mooglikheid om te ferbinen wat mist mei cgo.

De tekst befettet opmerkings oer wêr't it ûntliend is en wêrom. Omdat de xneur koade "net ynspirearre my", Ik naam it as útgongspunt loloswitcher.

It brûken fan "/dev/input/" hat sawol syn foardielen (alles is sichtber, ynklusyf de yndrukte auto-repeat-kaai) en neidielen. De neidielen binne:

  • Auto-repeat (eveneminten mei koade "2") korrelearret net mei werhelling mei x.
  • Ynput fia X11 ynterfaces is net sichtber (dit is hoe't VNC wurket, bygelyks).
  • Root nedich.

Oan 'e oare kant is it mooglik om te abonnearjen op X-eveneminten fia "XSelectExtensionEvent()". Jo kinne sjen op xinput koade. Ik fûn neat as dit om te gean, en de rûge ymplemintaasje naam fuortendaliks hûndert rigels fan C-koade. Set it foarearst oan 'e kant.

De "omkearde" útfier wurdt op it stuit makke troch it skroefjen fan it firtuele toetseboerd. Mei tank oan de skriuwer fan keybd_event, mar de abstraksje dêr is te heech nivo en sil moatte wurde fernijd fierder. Bygelyks, ik brûk de rjochter Win-kaai om de 3e rige te selektearjen. En allinnich de linker Win wurdt oerdroegen werom.

Bekende Bugs

  • Wy witte neat oer "gearstalde" ynfier (foarbyld: ½). It is no net nedich.
  • Wy spylje it rjocht Winne ferkeard. Yn myn gefal brekt it de klam.
  • D'r is gjin dúdlike ynfierparsing. Ynstee dêrfan binne der ferskate funksjes: Ferlykje (), CtrlSequence (), RepeatSequence (), SpaceSequence (). Спасибо nsmcan foar jo soarch: korrizjearre it yn 'e koade en hjir. Mei in bepaalde kâns kinne jo bugs fange by it ferfangen.
    Op dit punt wit ik net "hoe" en soe alle suggestjes wolkom.
  • (Oh God) kompetitive gebrûk fan kanalen (keyboardEvents, miceEvents).

konklúzje

De koade is de ienfâldichste proseduere. En dom as ik. Dat, ik flaaikje mysels mei de hope dat hast elke technikus kin foltôgje wat er wol. En hjirtroch sil dit produkt net ferdwine sûnder stipe, lykas de measte gewoan foar wille.

Súkses!

Boarne: www.habr.com

Add a comment