Një analog i ri i Punto Switcher për linux: xswitcher

Ndërprerja e mbështetjes për xneur më ka shkaktuar disa vështirësi në gjashtë muajt e fundit. (me shfaqjen e OpenSUSE 15.1 në desktopet e mi: kur xneur është aktiv, dritaret humbasin fokusin dhe ndriçojnë humorisht në përputhje me shpejtësinë e shkrimit në tastierë).

"Ah, s'mĂ« ra radhĂ«, sĂ«rish fillova tĂ« shkruaj nĂ« atĂ« rregullim" — kjo pĂ«rsĂ«ritet shumĂ« shpesh nĂ« punĂ«n time. Dhe nuk Ă«shtĂ« e kĂ«ndshme.

Një analog i ri i Punto Switcher për linux: xswitcher
Megjithatë, unë (si inxhinier konstruktori) mund të shpreh qartë atë që duhej. Dhe dëshira ime (fillimisht nga Punto Switcher, dhe më pas, falë Windows Vista, duke kaluar përfundimisht në Linux, nga xneur) ishte vetëm një. Pasi e kuptova se në ekran ishte një zhurmë në rregullimin e gabuar (kjo zakonisht ndodh në fund të shkrimit të një fjale të re), godita "Pause/Break". Dhe të marrë atë që shkrova.

NĂ« kĂ«tĂ« moment, produkti ka njĂ« raport optimal (sipĂ«rfaqĂ«sisht pĂ«r mua) midis funksionalitetit dhe kompleksitetit. ËshtĂ« koha tĂ« ndaj.

TL.DR

Tani do tĂ« ndjekin disa detaje teknike, prandaj fillimisht — linku "pĂ«r ta provuar" pĂ«r ata qĂ« nuk kanĂ« durim.

Aktualisht, janë hardkoduar mënyrat e mëposhtme:

  • "Pause/Break": fshin (Backspace) fjalĂ«n e fundit, ndryshon rregullimin nĂ« dritaren aktive (nĂ« mes 0 dhe 1) dhe shkruan pĂ«rsĂ«ri.
  • "Ctrl i majtĂ« pa asgjĂ«": ndryshon rregullimin nĂ« dritaren aktive (nĂ« mes 0 dhe 1).
  • "Shift i majtĂ« pa asgjĂ«": aktivizon rregullimin №0 nĂ« dritaren aktive.
  • "Shift i djathtĂ« pa asgjĂ«": aktivizon rregullimin №1 nĂ« dritaren aktive.

Nga ky moment planifikoj tĂ« personalizoj sjelljen. Pa reagim — nuk Ă«shtĂ« e interesant (mĂ« duket se funksionon mirĂ« pĂ«r mua). Mendoj se nĂ« Habra do tĂ« gjendet njĂ« pĂ«rqindje e mjaftueshme e publikut me probleme tĂ« ngjashme.

Shënim: Duke qenë se në versionin aktual, keylogger shndërrohet në "dev/input/", xswitcher duhet të fillojë me të drejtat e root-it:

chown root:root xswitcher
chmod +xs xswitcher

Kujdes: pronari i skedarit me suid duhet të jetë root, sepse kush është pronar, atij suid do t'i kthehet gjatë ekzekutimit.

Paranoikët (nuk përjashtohem) mund të klonojnë nga GIT dhe ta ndërtosh vetë. Afërsisht kështu:

go get "github.com/micmonay/keybd_event"
go get "github.com/gvalkov/golang-evdev"

### X11 headers për 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 (varësisht nga DE).

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

Detajet

Tani — detajet.

E gjithë repository fillimisht ishte dedikuar projektit tim personal, dhe nuk kam dëshirë të krijoj një tjetër për momentin. Pra, gjithçka është tërhequr në një grumbull (thjesht duke e organizuar në dosje) dhe është mbuluar me AGPL ("patenti i kundërt").

Kodi xswitcher është shkruar në golang, me përfshirje minimale të C. Supozohet se ky qasje do të japë pak më pak përpjekje (deri tani kështu është). Ruhet mundësia për të lidhur të munguarën përmes cgo.

Në tekst janë vendosur komente, nga ku kam marrë gjëra dhe përse. Pasiqë kodi xneur nuk më "inspiron", kam marrë si pikë nisje loloswitcher.

Përdorimi i "\/dev\/input\/" ka si avantazhe (gjithçka është e dukshme përfshirë çelësin e mbajtur me përsëritje) ashtu edhe disavantazhe. Disavantazhet janë:

  • PĂ«rsĂ«ritja automatikisht (ngjarjet me kod "2") nuk korelizon me pĂ«rsĂ«ritjen me X.
  • Nuk duket inputi pĂ«rmes ndĂ«rfaqeve X11 (p.sh. VNC funksionon kĂ«shtu).
  • Nevojitet rroot.

Nga ana tjetër, mund të nënshkruani për ngjarjet X përmes "XSelectExtensionEvent()". Mund ta kontrolloni në kodin xinput. Për go nuk kam gjetur asgjë të tillë, dhe implementimi i papërfunduar dha menjëherë një qind rreshta C-kodi. Deri tani e kam lënë mënjanë.

Doli "për këndej" për momentin përmes lidhjes së tastierës virtuale. Faleminderit autorit keybd_event, por aty ka një abstraksion shumë të lartë dhe mendoj se do të duhet ta riorganizojmë. Për shembull, çelësi i djathtë Win në radhën e 3-të zgjidh. Ndërsa përkthimi bëhet vetëm për Win të majtë.

Gabimet e njohura

  • Nuk dimĂ« asgjĂ« pĂ«r inputin "kompozit" (p.sh.: œ). Aktualisht nuk Ă«shtĂ« e nevojshme.
  • PĂ«rsĂ«ri e gabuar reprodukom çelĂ«sin Win tĂ« djathtĂ«. NĂ« rastin tim prish rregullimin e akcentĂ«ve.
  • Nuk ka njĂ« pĂ«rpunim tĂ« qartĂ« pĂ«r inputin. NĂ« vend tĂ« kĂ«saj – disa funksione: Compare(), CtrlSequence(), RepeatSequence(), SpaceSequence(). anonim kommentatorit nsmcan pĂ«r vĂ«mendjen: e kam korrigjuar nĂ« kod dhe kĂ«tu. Me njĂ« probabilitet tĂ« caktuar mund tĂ« kapni bug-Ă«t gjatĂ« zĂ«vendĂ«simit.
    Në këtë vend nuk e di "si duhet" dhe do të isha i lumtur për çdo sugjerim.
  • (O tmerr) pĂ«rdorimi konkurrues i kanaleve (keyboardEvents, miceEvents).

Përfundim

Kodi është proceduralisht i thjeshtë. Dhe i dhuntishëm si unë. Pra, e ngushëlloj veten duke shpresuar se çdo teknik mund të shkruajë atë që dëshiroj. Dhe ky produkt, falë kësaj, nuk do të zhduket pa suport sikur shumica e projekteve just-for-fun.

UPD.

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster