Analog i ri i Punto Switcher për linux: xswitcher

Fundi i mbështetjes për xneur më ka shkaktuar disa vuajtje gjatë gjashtë muajve të fundit. (me ardhjen e OpenSUSE 15.1 në desktopët e mi: me xneur të aktivizuar, dritaret humbasin fokusin dhe dridhen qesharake në kohë me hyrjen e tastierës).

"Oh, dreqin, fillova të shkruaj përsëri në paraqitjen e gabuar" - në punën time kjo ndodh shpesh në mënyrë të pahijshme. Dhe nuk shton asgjë pozitive.

Analog i ri i Punto Switcher për linux: xswitcher
Në të njëjtën kohë, unë (si inxhinier projektimi) mund të formuloj mjaft qartë atë që dua. Dhe doja (së pari nga Punto Switcher, dhe pastaj, faleminderit Windows Vista, më në fund po zhvendoset në Linux, nga xneur) saktësisht një. Duke kuptuar që fjalët e pakuptimta në ekran janë në paraqitjen e gabuar (kjo zakonisht ndodh në fund të shkrimit të një fjale të re), prekni "Pauzë/Ndërprerje". Dhe merrni atë që po shkruanit.

PĂ«r momentin, produkti ka raportin optimal (nga kĂ«ndvĂ«shtrimi im) funksionalitet/kompleksitet. ËshtĂ« koha pĂ«r tĂ« ndarĂ«.

TL.DR

Do të ketë të gjitha llojet e detajeve teknike më vonë, kështu që së pari - lidhja "për të prekur" për të paduruarit.

Aktualisht sjellja e mëposhtme është e koduar:

  • “Pause/Break”: e kthen nĂ« hapĂ«sirĂ« ​​fjalĂ«n e fundit, ndĂ«rron paraqitjen nĂ« dritaren aktive (ndĂ«rmjet 0 dhe 1) dhe telefonon pĂ«rsĂ«ri.
  • "Left Ctrl pa asgjĂ«": ndĂ«rron paraqitjen nĂ« dritaren aktive (midis 0 dhe 1).
  • "Left Shift pa asgjĂ«": aktivizon paraqitjen nr. 0 nĂ« dritaren aktive.
  • "Right Shift pa asgjĂ«": aktivizon paraqitjen nr. 1 nĂ« dritaren aktive.

Që tani e tutje kam në plan të personalizoj sjelljen. Pa reagime, nuk është interesante (gjithsesi jam mirë me të). Besoj se në Habré do të ketë një përqindje të mjaftueshme të audiencës me probleme të ngjashme.

NB Sepse në versionin aktual, keylogger është bashkangjitur në "/dev/input/", xswitcher duhet të lansohet me të drejta rrënjësore:

chown root:root xswitcher
chmod +xs xswitcher

Ju lutemi vini re: Pronari i skedarit me suid duhet të jetë root, sepse kushdo që të jetë pronar do të kthehet në suid pas fillimit.

Paranoidët (unë nuk jam përjashtim) mund të klonohen nga GIT dhe montoni në vend. Kështu:

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

Shtoni autostart sipas shijes (në varësi të DE).

Funksionon, "nuk kĂ«rkon qull" (≈30 sekonda CPU nĂ« ditĂ«, ≈12 MB nĂ« RSS).

Detalet

Tani - detajet.

I gjithë depoja fillimisht iu dedikua projektit tim për kafshët shtëpiake dhe jam shumë dembel të filloj një tjetër. Pra, gjithçka grumbullohet (vetëm në dosje) dhe mbulohet nga AGPL ("patentë e kundërt").

Kodi xswitcher është shkruar në golang, me përfshirje minimale të C. Supozohet se kjo qasje do të rezultojë në përpjekjen më të vogël (deri më tani). Duke ruajtur aftësinë për të lidhur atë që mungon duke përdorur cgo.

Teksti përmban komente se nga është huazuar dhe pse. Sepse kodi xneur "nuk më frymëzoi", e mora atë si pikënisje loloswitcher.

Përdorimi i "/dev/input/" ka si avantazhet e tij (gjithçka është e dukshme, duke përfshirë tastin e shtypur të përsëritjes automatike) dhe disavantazhet. Disavantazhet janë:

  • PĂ«rsĂ«ritja automatike (ngjarjet me kodin "2") nuk lidhet me pĂ«rsĂ«ritjen me x.
  • Hyrja pĂ«rmes ndĂ«rfaqeve X11 nuk Ă«shtĂ« e dukshme (kĂ«shtu funksionon VNC, pĂ«r shembull).
  • Duhet rrĂ«njĂ«.

Nga ana tjetër, është e mundur të abonoheni në X ngjarje përmes "XSelectExtensionEvent()". Mund të shikoni kodi xinput. Unë nuk gjeta asgjë të tillë për të shkuar, dhe zbatimi i përafërt mori menjëherë njëqind rreshta të kodit C. Lëreni mënjanë për momentin.

Dalja "e kundërt" bëhet aktualisht duke vidhosur tastierën virtuale. Faleminderit autorit të keybd_event, por abstraksioni atje është shumë i nivelit dhe do të duhet të ribëhet më tej. Për shembull, unë përdor tastin e djathtë Win për të zgjedhur rreshtin e 3-të. Dhe vetëm Winja e majtë transmetohet prapa.

Mete të njohura

  • Ne nuk dimĂ« asgjĂ« rreth hyrjes "tĂ« pĂ«rbĂ«rĂ«" (shembull: œ). Nuk Ă«shtĂ« e nevojshme pĂ«r momentin.
  • Ne po luajmĂ« gabimisht fitoren e duhur. NĂ« rastin tim, e thyen theksin.
  • Nuk ka analizĂ« tĂ« qartĂ« tĂ« hyrjes. NĂ« vend tĂ« kĂ«saj, ka disa funksione: Krahaso(), CtrlSequence(), RepeatSequence(), SpaceSequence(). FalĂ«nderim nsmcan pĂ«r kujdesin tuaj: korrigjuar atĂ« nĂ« kod dhe kĂ«tu. Me njĂ« probabilitet tĂ« caktuar, mund tĂ« kapni defekte kur zĂ«vendĂ«soni.
    Në këtë pikë unë nuk e di "si të" dhe do të mirëpres çdo sugjerim.
  • (O Zot) pĂ«rdorimi konkurrues i kanaleve (keyboardEvents, miceEvents).

Përfundim

Kodi është procedural më i thjeshtë. Dhe budalla si unë. Pra, i bëj lajka vetes me shpresën se pothuajse çdo teknik do të jetë në gjendje të përfundojë atë që dëshiron. Dhe falë kësaj, ky produkt nuk do të humbasë pa mbështetje, si shumica e tyre thjesht për argëtim.

Good luck!

Burimi: www.habr.com

Bleni njĂ« host tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, serverĂ« VPS VDS đŸ”„ Bleni hosting tĂ« besueshĂ«m tĂ« faqeve tĂ« internetit me mbrojtje DDoS, servera VPS VDS | ProHoster