Bag-ong analogue sa Punto Switcher alang sa linux: xswitcher

Ang pagtapos sa suporta sa xneur nakapasakit kanako sa miaging unom ka bulan. (uban sa pag-abut sa OpenSUSE 15.1 sa akong mga desktop: nga adunay xneur nga gipagana, ang mga bintana nawad-an sa pokus ug nagkidlap nga kataw-anan sa oras sa input sa keyboard).

"Oh, damn it, nagsugod na usab ako sa pag-type sa sayup nga layout" - sa akong trabaho kini kanunay nga mahitabo nga dili maayo. Ug kini wala makadugang bisan unsa nga positibo.

Bag-ong analogue sa Punto Switcher alang sa linux: xswitcher
Sa parehas nga oras, ako (isip usa ka inhenyero sa disenyo) klaro nga maporma kung unsa ang akong gusto. Apan gusto nako (una gikan sa Punto Switcher, ug dayon, salamat sa Windows Vista, sa katapusan mobalhin sa Linux, gikan sa xneur) usa ra ka butang. Sa pagkaamgo nga ang basura sa screen naa sa sayup nga layout (kini kasagaran mahitabo sa katapusan sa pag-type sa usa ka bag-ong pulong), pag-stomp sa "Pause/Break". Ug kuhaa ang imong giimprinta.

Sa pagkakaron, ang produkto adunay kamalaumon (gikan sa akong punto de bista) functionality/complexity ratio. Panahon na sa pagpaambit.

TL.DR

Adunay tanan nga mga matang sa teknikal nga mga detalye sa ulahi, mao nga una - link "sa paghikap" para sa mga walay pasensya.

Sa pagkakaron ang mosunod nga kinaiya kay hardcoded:

  • β€œPause/Break”: i-backspace ang kataposang pulong, ibalhin ang layout sa aktibong bintana (tali sa 0 ug 1) ug i-dial pag-usab.
  • "Left Ctrl without anything": gibalhin ang layout sa aktibo nga bintana (tali sa 0 ug 1).
  • β€œLeft Shift without anything”: i-on ang layout No. 0 sa aktibong bintana.
  • "Tuo nga Pagbalhin nga walay bisan unsa": gipaandar ang Layout No. 1 sa aktibo nga bintana.

Sukad karon nagplano ko nga ipasibo ang kinaiya. Kung wala’y feedback, dili kini makapaikag (okay ra ko niini). Nagtuo ako nga sa HabrΓ© adunay igo nga porsyento sa mga mamiminaw nga adunay parehas nga mga problema.

NB Kay sa kasamtangan nga bersyon, ang keylogger gilakip sa "/ dev / input /", xswitcher kinahanglan nga ilunsad uban sa gamut katungod:

chown root:root xswitcher
chmod +xs xswitcher

Palihug timan-i: Ang tag-iya sa file nga adunay suid kinahanglan nga gamut, tungod kay bisan kinsa ang tag-iya mahimong suid sa pagsugod.

Ang mga paranoid (dili ako eksepsiyon) mahimo nga mag-clone gikan sa GIT ug magtigum sa site. Ingon niana:

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

Idugang ang autostart sa lami (depende sa DE).

Kini molihok, "dili mangayo og lugaw" (β‰ˆ30 segundos nga CPU kada adlaw, β‰ˆ12 MB sa RSS).

Tan-awa ang mga detalye

Karon - ang mga detalye.

Ang tibuok repository orihinal nga gipahinungod sa akong binuhi nga proyekto, ug ako tapulan kaayo sa pagsugod sa lain. Busa, ang tanan gitapok (sa mga folder lang) ug gitabonan sa AGPL ("reverse patent").

Ang xswitcher code gisulat sa golang, nga adunay dyutay nga mga inklusyon sa C. Gituohan nga kini nga pamaagi magresulta sa pinakagamay nga paningkamot (hangtod karon adunay kini). Samtang gipadayon ang abilidad sa pagkonektar kung unsa ang nawala gamit ang cgo.

Ang teksto adunay mga komentaryo kung diin kini gihulam ug ngano. Kay ang xneur code "wala makadasig kanako", gikuha ko kini isip usa ka punto sa pagsugod loloswitcher.

Ang paggamit sa "/ dev / input /" adunay parehas nga mga bentaha (tanan makita, lakip ang gipugos nga auto-repeat key) ug mga disbentaha. Ang mga disadvantages mao ang:

  • Auto-repeat (mga panghitabo nga adunay code "2") wala mag-correlate sa pagbalik-balik sa x.
  • Ang pag-input pinaagi sa mga interface sa X11 dili makita (sama niini kung giunsa ang paglihok sa VNC, pananglitan).
  • Kinahanglang gamut.

Sa laing bahin, posible nga mag-subscribe sa X nga mga panghitabo pinaagi sa "XSelectExtensionEvent()". Mahimo nimong tan-awon xinput code. Wala koy nakit-an nga sama niini alang sa pag-adto, ug ang dili maayo nga pagpatuman mikuha dayon og usa ka gatos nga linya sa C code. Isalikway kini sa pagkakaron.

Ang "reverse" nga output karon gihimo pinaagi sa pag-screw sa virtual nga keyboard. Salamat sa tagsulat sa keybd_event, apan ang abstraction adunay taas kaayo nga lebel ug kinahanglan nga usbon pa. Pananglitan, gigamit nako ang husto nga Win key aron mapili ang ika-3 nga laray. Ug ang wala nga Win lamang ang gipabalik.

Nailhan nga mga Bug

  • Wala kami nahibal-an bahin sa "composite" input (pananglitan: Β½). Dili kini kinahanglan karon.
  • Nagdula kami sa husto nga Win nga dili husto. Sa akong kaso, gibali niini ang gibug-aton.
  • Walay klaro nga input parsing. Hinuon, adunay daghang mga gimbuhaton: Itandi(), CtrlSequence(), RepeatSequence(), SpaceSequence(). Бпасибо nsmcan alang sa imong pag-atiman: gitul-id kini sa code ug dinhi. Sa usa ka piho nga posibilidad, mahimo nimong makuha ang mga bug kung mag-ilis.
    Niini nga punto wala ako kahibalo "unsaon" ug gusto ko ang bisan unsang mga sugyot.
  • (Oh Dios) kompetisyon nga paggamit sa mga channel (keyboardEvents, miceEvents).

konklusyon

Ang code mao ang pinakasimple nga pamaagi. Ug tanga sama nako. Busa, giulog-ulog nako ang akong kaugalingon uban ang paglaom nga halos bisan kinsang technician makakompleto sa iyang gusto. Ug salamat niini, kini nga produkto dili mawala kung wala’y suporta, sama sa kadaghanan alang sa kalingawan.

Good luck!

Source: www.habr.com

Idugang sa usa ka comment