Uus Punto Switcheri analoog linuxile: xswitcher

xneur'i toeva tulek on viimasel poolel aastas tekitanud mulle teatud raskusi (OpenSUSE 15.1 ilmumisega minu töölaual: kui xneur on sisse lĂŒlitatud, kaotavad aknad fookuse ja vilkuvad toredasti klaviatuuriga kirjutamisega samas rĂŒtmis).

„Ah, kurat, jĂ€lle vale sisestuskaardiga alustasin“ — töö juures juhtub see liiga tihti. Ja see ei lisa midagi positiivset.

Uus Punto Switcheri analoog linuxile: xswitcher
Samas suudan ma (ehitusinsenerina) ĂŒsna selgelt vĂ€ljendada, mida tahan. Ja tahtsin ma (algselt Punto Switcher’i abil, hiljem tĂ€nu Windows Vista’le, otsustavalt Linuxile ĂŒle minnes, xneur’ist) just ĂŒhte. MĂ”istes, et ekraanil on valskuse probleem vale sisestuskaardi tĂ”ttu (see juhtub tavaliselt uue sĂ”na lĂ”ppemisel), lĂŒĂŒa „Pause/Break“. Ja saada see, mille ma tippisin.

Praegu on toode minu arvates optimaalses (funktsionaalsuse/keerukuse) tasakaalus. Aeg on jagada.

TL.DR

Edasi tulevad igasugused tehnilised ĂŒksikasjad, seega kĂ”igepealt — link „katsetamiseks“ Ă€ratundmatutele.

Praegu on tahkelt defineeritud jÀrgmine kÀitumine:

  • „Pause/Break“: tĂŒhistab (Backspace) viimase sĂ”na, vahetab aktiivses aknas sisestuskaarti (0 ja 1 vahel) ja tippib veel kord.
  • „Vasak Ctrl tĂŒhjana“: vahetab aktiivses aknas sisestuskaarti (0 ja 1 vahel).
  • „Vasak Shift tĂŒhjana“: aktiveerib aktiivses aknas sisestuskaardi nr 0.
  • „Parem Shift tĂŒhjana“: aktiveerib aktiivses aknas sisestuskaardi nr 1.

Alates sellest hetkest kavatsen kohandada kĂ€itumist. Ilma tagasisideta — pole huvitav (mind rahuldab see niigi). Arvan, et Habr's leidub piisavalt palju inimesi, kes seisavad silmitsi sarnaste probleemidega.

MÀrkus. Kuna praeguses versioonis on nuhkvara kinni seotud "/dev/input/", peab xswitcher kÀivituma juurÔigusena:

chown root:root xswitcher
chmod +xs xswitcher

Pange tĂ€hele: faili omanik peab olema root, kuna kel on omanik — sellel on suid ja see muudetakse kĂ€ivitamisel.

Paranoikud (ma ei ole erand) vÔivad kloonida GIT ja koguda kohapeal. Umbes nii:

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

### X11 pÀised OpenSUSE/deb-pÔhistele
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

Automaatselt kÀivitamiseks lisada maitse jÀrgi (sÔltuvalt DE-st).

Töötab, „putru ei kĂŒsi“ (≈30 sekundit CPU pĂ€evas, ≈12 MB RSS-is).

Üksikasjad

NĂŒĂŒd — ĂŒksikasjad.

Kogu reposiitoorium oli algselt pĂŒhendatud minu pet-projektile, ja teise loomiseks hetkel puudub motivatsioon. Niisiis on kĂ”ik kuhjatud kokku (lihtsalt kaustadesse) ja kaetud AGPL ("patendi vastupidi").

Kood xswitcher on kirjutatud golangis, minimaalsete C-sisenditega. Eeldatakse, et selline lĂ€henemine toob kaasa madalaimad tööjĂ”ukulud (hetkel on see nii). Samuti sĂ€ilitab vĂ”imaluse puuduvate osade ĂŒhendamiseks cgo kaudu.

Teksti sees on kommentaarid, kust ma mida vÔtsin ja miks. Kuna kood xneur mind "ei inspireerinud", vÔtsin lÀhtepunktiks loloswitcher.

Kasutades "\/dev\/input\/" on nii eeliseid (kÔik on nÀhtav, sealhulgas allasurutud klahv automaatse kordamisega) kui ka puudusi. Puudused on jÀrgmised:

  • Automaatne kordamine (sĂŒndmused koodiga "2") ei ole seotud kordumisega X-ides.
  • Ei ole nĂ€htav sisend X11 liideste kaudu (nĂ€iteks VNC töötab nii).
  • Vajadus on ruti.

Teisest kĂŒljest, saab tellida X sĂŒndmusi lĂ€bi «XSelectExtensionEvent()». Vaadata saab xinput koodist. Go jaoks ei leidnud midagi sarnast, ja esialgne rakendus andis kohe sada rida C-koodi. Hetkel olen selle kĂ”rvale pannud.

VĂ€ljund "tagasi" on praegu tehtud virtuaalse klaviatuuri kĂŒlge keeramisega. AitĂ€h autorile keybd_event, kuid seal on liiga kĂ”rgetasemeline abstraktsioon ja edaspidi tuleb ĂŒmber teha. NĂ€iteks minule valib parem Win-klahv 3. rea. Ja tagurpidi edastatakse ainult vasak Win.

Tuntud vead

  • Meil pole teadmisi "komposiit sisendi" kohta (nĂ€ide: œ). Praegu pole see vajalik.
  • Vale on Ă”ige Win-klahvi reproduktsioon. Minu puhul rikub see aktsentide jaotust.
  • Selle sisendi kohta pole selget analĂŒĂŒsi. Selle asemel on mitu funktsiooni: Compare(), CtrlSequence(), RepeatSequence(), SpaceSequence(). AitĂ€h nsmcan tĂ€helepanu pĂ€rast: parandas kode ja siin. Teatud tĂ”enĂ€osusega vĂ”ib vigade ilmnemine vahetuse ajal.
    Selles kohas ei tea ma "kuidas Ôigesti" ja olen avatud igasugustele ettepanekutele.
  • (Oh Ă”udus) konkurentsi kasutamine kanalites (keyboardEvents, miceEvents).

KokkuvÔte

Kood on kÔige lihtsam protseduuriline. Ja rumal nagu mina. Seega lohutangi end lootusega, et soovitud vÔib koodida praktiliselt iga tehnik. Ja see toode ei kao tÀnu sellele ilma toetuse nagu enamik just fun pÀrast.

Edu!

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster