Analg newydd o Punto Switcher ar gyfer linux: xswitcher

Mae diwedd cefnogaeth xneur wedi achosi rhywfaint o ddioddefaint i mi dros y chwe mis diwethaf. (gyda dyfodiad OpenSUSE 15.1 ar fy byrddau gwaith: gyda xneur wedi'i alluogi, mae ffenestri'n colli ffocws ac yn fflachio'n ddoniol mewn amser gyda mewnbwn bysellfwrdd).

“O, damn it, dechreuais deipio yn y gosodiad anghywir eto” - yn fy ngwaith mae hyn yn digwydd yn anweddus yn aml. Ac nid yw'n ychwanegu unrhyw beth cadarnhaol.

Analg newydd o Punto Switcher ar gyfer linux: xswitcher
Ar yr un pryd, gallaf i (fel peiriannydd dylunio) lunio'r hyn yr wyf ei eisiau yn eithaf clir. Ond roeddwn i eisiau (yn gyntaf gan Punto Switcher, ac yna, diolch i Windows Vista, yn olaf newid i Linux, o xneur) yn union un peth. Wedi sylweddoli bod y sbwriel ar y sgrin yn y gosodiad anghywir (mae hyn fel arfer yn digwydd ar ddiwedd teipio gair newydd), stompiwch ar “Saib/Egwyl”. A chael yr hyn a argraffwyd gennych.

Ar hyn o bryd, mae gan y cynnyrch y gymhareb ymarferoldeb / cymhlethdod optimaidd (o'm safbwynt i). Mae'n amser rhannu.

TL.DR

Bydd pob math o fanylion technegol yn ddiweddarach, felly yn gyntaf - dolen "i gyffwrdd" ar gyfer y diamynedd.

Ar hyn o bryd mae cod caled ar yr ymddygiad canlynol:

  • “Seibiant/Egwyl”: yn gosod bylchau cefn y gair olaf, yn newid y gosodiad yn y ffenestr weithredol (rhwng 0 ac 1) ac yn deialu eto.
  • “Ctrl Chwith heb unrhyw beth”: yn newid y cynllun yn y ffenestr weithredol (rhwng 0 ac 1).
  • “Chwith Shift without anything”: yn troi gosodiad Rhif 0 ymlaen yn y ffenestr weithredol.
  • “Iawn Shift heb unrhyw beth”: yn troi gosodiad Rhif 1 ymlaen yn y ffenestr weithredol.

O hyn ymlaen rwy'n bwriadu addasu'r ymddygiad. Heb adborth, nid yw'n ddiddorol (dwi'n iawn ag ef beth bynnag). Credaf y bydd canran ddigonol o'r gynulleidfa â phroblemau tebyg ar Habré.

DS Achos yn y fersiwn gyfredol, mae'r keylogger ynghlwm wrth "/dev/input/", rhaid lansio xswitcher gyda hawliau gwraidd:

chown root:root xswitcher
chmod +xs xswitcher

Noder: Rhaid i berchennog y ffeil gyda suid fod yn gwraidd, oherwydd bydd pwy bynnag yw'r perchennog yn cael ei droi'n suid wrth gychwyn.

Gall paranoidau (nid wyf yn eithriad) clonio o GIT ac ymgynnull ar y safle. Fel yna:

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

Ychwanegu autostart i flas (yn dibynnu ar DE).

Mae'n gweithio, “ddim yn gofyn am uwd” (≈ 30 eiliad CPU y dydd, ≈12 MB yn RSS).

Manylion

Nawr - y manylion.

Yn wreiddiol, cysegrwyd yr ystorfa gyfan i'm prosiect anifeiliaid anwes, ac rwy'n rhy ddiog i ddechrau un arall. Felly, mae popeth yn cael ei bentyrru (dim ond mewn ffolderi) a'i orchuddio gan AGPL (“patent gwrthdro”).

Mae'r cod xswitcher wedi'i ysgrifennu mewn golang, gydag ychydig iawn o gynnwys C. Tybir y bydd y dull hwn yn arwain at yr ymdrech leiaf (hyd yn hyn). Wrth gynnal y gallu i gysylltu yr hyn sydd ar goll gan ddefnyddio cgo.

Mae'r testun yn cynnwys sylwadau ar o ble y cafodd ei fenthyg a pham. Achos nid oedd y cod xneur “yn fy ysbrydoli”, cymerais ef fel man cychwyn loloswitcher.

Mae gan ddefnyddio "/dev/input/" ei fanteision (mae popeth yn weladwy, gan gynnwys yr allwedd awto-ailadrodd wedi'i wasgu) ac anfanteision. Yr anfanteision yw:

  • Nid yw awto-ailadrodd (digwyddiadau gyda chod “2”) yn cyfateb i ailadrodd ag x.
  • Nid yw mewnbwn trwy ryngwynebau X11 yn weladwy (dyma sut mae VNC yn gweithio, er enghraifft).
  • Angen gwraidd.

Ar y llaw arall, mae'n bosibl tanysgrifio i ddigwyddiadau X trwy "XSelectExtensionEvent()". Gallwch chi edrych ar cod xinput. Ni wnes i ddod o hyd i unrhyw beth fel hyn i fynd, a chymerodd y gweithredu bras gant o linellau o god C ar unwaith. Ei roi o'r neilltu am y tro.

Mae'r allbwn “cefn” yn cael ei wneud ar hyn o bryd trwy sgriwio'r bysellfwrdd rhithwir. Diolch i awdur keybd_event, ond mae'r tynnu yno yn rhy uchel a bydd yn rhaid ei ail-wneud ymhellach. Er enghraifft, rwy'n defnyddio'r allwedd Win iawn i ddewis y 3ydd rhes. A dim ond y Win chwith sy'n cael ei drosglwyddo'n ôl.

Bygiau Hysbys

  • Nid ydym yn gwybod dim am fewnbwn “cyfansawdd” (enghraifft: ½). Nid oes ei angen ar hyn o bryd.
  • Rydyn ni'n chwarae'r Win iawn yn anghywir. Yn fy achos i, mae'n torri'r pwyslais.
  • Nid oes dosrannu mewnbwn clir. Yn lle hynny, mae sawl swyddogaeth: Cymharu(), CtrlSequence(), RepeatSequence(), SpaceSequence(). Diolch nsmcan er eich gofal: ei gywiro yn y cod ac yma. Gyda thebygolrwydd penodol, gallwch ddal chwilod wrth ailosod.
    Ar hyn o bryd nid wyf yn gwybod “sut i” a byddwn yn croesawu unrhyw awgrymiadau.
  • (O Dduw) defnydd cystadleuol o sianeli (keyboardEvents, llygod Digwyddiadau).

Casgliad

Y cod yw'r weithdrefnol symlaf. Ac yn dwp fel fi. Felly, rwy'n gwneud fy hun yn fwy gwastad gyda'r gobaith y bydd bron unrhyw dechnegydd yn gallu cwblhau'r hyn y mae ei eisiau. A diolch i hyn, ni fydd y cynnyrch hwn yn diflannu heb gefnogaeth, fel y mwyafrif dim ond am hwyl.

Pob lwc!

Ffynhonnell: hab.com

Ychwanegu sylw