Jauns Punto Switcher analogs priekÅ” Linux: xswitcher
Xneur atbalsta beigas pÄdÄjo seÅ”u mÄneÅ”u laikÄ man ir radÄ«juÅ”as dažas cieÅ”anas. (ar OpenSUSE 15.1 parÄdÄ«Å”anos manos galddatoros: ja ir iespÄjots xneur, logi zaudÄ fokusu un ar tastatÅ«ras ievadi laikÄ mirgo smieklÄ«gi).
āAk, sasodÄ«ts, es atkal sÄku rakstÄ«t nepareizu izkÄrtojumuā - tas manÄ darbÄ notiek nepieklÄjÄ«gi bieži. Un tas neko pozitÄ«vu nedod.
TajÄ paÅ”Ä laikÄ es (kÄ projektÄÅ”anas inženieris) varu diezgan skaidri formulÄt, ko vÄlos. Bet es gribÄju (vispirms no Punto Switcher, un pÄc tam, pateicoties Windows Vista, beidzot pÄriet uz Linux, no xneur) tieÅ”i vienu lietu. Apzinoties, ka atkritumi uz ekrÄna ir nepareizÄ izkÄrtojumÄ (tas parasti notiek jauna vÄrda ievadÄ«Å”anas beigÄs), nospiediet āPauze/pÄrtraukumsā. Un iegÅ«stiet to, ko izdrukÄjÄt.
Å obrÄ«d produktam ir optimÄla (no mana viedokļa) funkcionalitÄtes/sarežģītÄ«bas attiecÄ«ba. Ir pienÄcis laiks dalÄ«ties.
NB Jo paÅ”reizÄjÄ versijÄ keylogger ir pievienots "/dev/input/", xswitcher ir jÄpalaiž ar root tiesÄ«bÄm:
chown root:root xswitcher
chmod +xs xswitcher
LÅ«dzu, Åemiet vÄrÄ: Faila Ä«paÅ”niekam ar suid jÄbÅ«t root, jo kurÅ” ir Ä«paÅ”nieks, startÄÅ”anas laikÄ tiks pÄrvÄrsts par suid.
Paranoids (es neesmu izÅÄmums) var klonÄt no Git un salikt uz vietas. TÄds:
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
Pievienojiet automÄtisko palaiÅ”anu pÄc garÅ”as (atkarÄ«bÄ no DE).
Tas darbojas, āputru neprasaā (ā30 sekundes CPU dienÄ, ā12 MB RSS).
Detaļas
Tagad - detaļas.
Visa krÄtuve sÄkotnÄji bija veltÄ«ta manam mÄjdzÄ«vnieku projektam, un es esmu pÄrÄk slinks, lai sÄktu citu. TÄtad, viss ir sakrauts (tikai mapÄs) un pÄrklÄts ar AGPL (āapgrieztais patentsā).
Xswitcher kods ir rakstÄ«ts golangÄ, ar minimÄlu C iekļauÅ”anu. Tiek pieÅemts, ka Ŕī pieeja radÄ«s vismazÄko piepÅ«li (lÄ«dz Å”im). SaglabÄjot iespÄju savienot trÅ«kstoÅ”o, izmantojot cgo.
TekstÄ ir komentÄri par to, no kurienes un kÄpÄc tas aizgÅ«ts. Jo xneur kods "neiedvesmoja mani", es to ÅÄmu kÄ sÄkumpunktu loloswitcher.
Lietojot "/dev/input/", ir gan savas priekÅ”rocÄ«bas (viss ir redzams, ieskaitot nospiesto automÄtiskÄs atkÄrtoÅ”anas taustiÅu), gan trÅ«kumi. TrÅ«kumi ir:
AutomÄtiskÄ atkÄrtoÅ”ana (notikumi ar kodu ā2ā) nekorelÄ ar atkÄrtoÅ”anos ar x.
Ievade caur X11 saskarnÄm nav redzama (tÄ, piemÄram, darbojas VNC).
Vajag sakni.
No otras puses, ir iespÄjams abonÄt X notikumus, izmantojot "XSelectExtensionEvent()". Vari palÅ«rÄt xinput kodu. Es neko tamlÄ«dzÄ«gu neatradu, un aptuvenÄ ievieÅ”ana uzreiz aizÅÄma simts C koda rindiÅas. PagaidÄm noliec malÄ.
āApgrieztÄā izvade paÅ”laik tiek veikta, pieskrÅ«vÄjot virtuÄlo tastatÅ«ru. Paldies keybd_event autoram, bet abstrakcija tur ir pÄrÄk augsta lÄ«meÅa un bÅ«s jÄpÄrtaisa tÄlÄk. PiemÄram, es izmantoju labo taustiÅu Win, lai atlasÄ«tu 3. rindu. Un tikai kreisais Win tiek nosÅ«tÄ«ts atpakaļ.
ZinÄmÄs kļūdas
MÄs neko nezinÄm par āsaliktoā ievadi (piemÄrs: Ā½). Å obrÄ«d tas nav vajadzÄ«gs.
MÄs nepareizi spÄlÄjam pareizo Win. ManÄ gadÄ«jumÄ tas izjauc uzsvaru.
Nav skaidras ievades parsÄÅ”anas. TÄ vietÄ ir vairÄkas funkcijas: Compare(), CtrlSequence(), RepeatSequence(), SpaceSequence(). Paldies nsmcan jÅ«su aprÅ«pei: izlaboja to kodÄ un Å”eit. Ar noteiktu varbÅ«tÄ«bu, nomainot, jÅ«s varat noÄ·ert kļūdas. Å obrÄ«d es nezinu, kÄ rÄ«koties, un priecÄÅ”os par jebkÄdiem ieteikumiem.
Kods ir vienkÄrÅ”Äkais procedÅ«ras veids. Un stulba kÄ es. TÄpÄc es glaimoju sev ar cerÄ«bu, ka gandrÄ«z jebkurÅ” tehniÄ·is varÄs pabeigt to, ko vÄlas. Pateicoties tam, Å”is produkts nepazudÄ«s bez atbalsta, tÄpat kÄ vairums, kas paredzÄts tikai izklaidei.