A Punto Switcher új analógja Linuxra: xswitcher

Az xneur támogatás megszűnése némi szenvedést okozott nekem az elmúlt hat hónapban. (Az OpenSUSE 15.1 megjelenésével az asztali számítógépeimen: ha az xneur engedélyezve van, az ablakok elveszítik a fókuszt, és a billentyűzet bevitelekor viccesen villognak).

„Ó, a fenébe, megint rossz elrendezést kezdtem beírni” – ez illetlenül gyakran előfordul a munkámban. És semmi pozitívat nem ad hozzá.

A Punto Switcher új analógja Linuxra: xswitcher
Ugyanakkor én (mint tervezőmérnök) elég egyértelműen meg tudom fogalmazni, hogy mit akarok. De én pontosan egy dolgot akartam (először a Punto Switchertől, majd a Windows Vistának köszönhetően végre Linuxra váltani, xneurről). Miután rájött, hogy a képernyőn lévő szemét rossz elrendezésben van (ez általában új szó beírásának végén történik), nyomja meg a „Szünet/Szünet” gombot. És kapja meg, amit nyomtatott.

Jelenleg a termék az optimális (szempontom szerint) funkcionalitás/komplexitás aránnyal rendelkezik. Ideje megosztani.

TL.DR

Később lesz mindenféle technikai részlet, úgyhogy először... link "érintésre" a türelmetleneknek.

Jelenleg a következő viselkedés kódolva van:

  • „Szünet/Szünet”: visszalép az utolsó szónál, elrendezést vált az aktív ablakban (0 és 1 között), és újra tárcsáz.
  • „Bal Ctrl semmi nélkül”: az aktív ablak elrendezését váltja (0 és 1 között).
  • „Bal Shift, semmi nélkül”: bekapcsolja a 0. számú elrendezést az aktív ablakban.
  • „Jobb eltolás semmi nélkül”: bekapcsolja az 1. elrendezést az aktív ablakban.

Mostantól azt tervezem, hogy személyre szabom a viselkedést. Visszajelzés nélkül nem érdekes (amúgy megvagyok vele). Hiszem, hogy a Habrén lesz megfelelő százalékban a hasonló problémákkal küzdő közönség.

NB Mert a jelenlegi verzióban a keylogger a "/dev/input/"-hez van csatolva, az xswitchert root jogokkal kell elindítani:

chown root:root xswitcher
chmod +xs xswitcher

Kérjük, vegye figyelembe: A suid fájl tulajdonosának rootnak kell lennie, mert aki a tulajdonos, az induláskor suid lesz.

A paranoidok (én sem vagyok kivétel) tudnak klónozni GIT és a helyszínen összeszerelni. Mint az:

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

Adja hozzá az automatikus indítást ízlés szerint (DE-től függően).

Működik, „nem kér zabkását” (≈30 másodperc CPU naponta, ≈12 MB RSS-ben).

Részletek

Most - a részletek.

Az egész adattárat eredetileg az én kisállat-projektemnek szentelték, és lusta vagyok egy másik elindításához. Tehát minden fel van halmozva (csak mappákban), és az AGPL ("fordított szabadalom") hatálya alá tartozik.

Az xswitcher kód golang nyelven íródott, minimális C-beillesztéssel. Feltételezhető, hogy ez a megközelítés a legkevesebb erőfeszítést fogja eredményezni (eddig volt). Fenntartva a hiányzó csatlakoztatásának lehetőségét a cgo segítségével.

A szöveg megjegyzéseket tartalmaz arra vonatkozóan, hogy honnan és miért kölcsönözték. Mert az xneur kód „nem inspirált”, abból vettem kiindulópontot loloswitcher.

A "/dev/input/" használatának megvannak az előnyei (minden látható, beleértve a lenyomott automatikus ismétlés billentyűt is) és hátrányai is. A hátrányok a következők:

  • Az automatikus ismétlés („2-es kódú események”) nem korrelál az x-szel való ismétléssel.
  • Az X11 interfészeken keresztüli bemenet nem látható (például a VNC így működik).
  • Root kell.

Másrészt az "XSelectExtensionEvent()"-en keresztül X eseményre lehet előfizetni. Bele lehet nézni xinput kód. Nem találtam semmi ilyesmit, és a durva megvalósítás azonnal száz sornyi C kódot vett igénybe. Egyelőre tedd félre.

A „fordított” kimenet jelenleg a virtuális billentyűzet csavarásával történik. Köszönet a keybd_event szerzőjének, de az ottani absztrakció túl magas szintű, és tovább kell alakítani. Például a jobb Win billentyűvel kijelölöm a 3. sort. És csak a bal oldali Win kerül visszaküldésre.

Ismert hibák

  • Nem tudunk semmit az „összetett” bevitelről (például: ½). Jelenleg nincs rá szükség.
  • Helytelenül játszunk a helyes győzelemmel. Az én esetemben ez megtöri a hangsúlyt.
  • Nincs egyértelmű bemeneti elemzés. Ehelyett több funkció is létezik: Compare(), CtrlSequence(), RepeatSequence(), SpaceSequence(). Köszönöm nsmcan az önök figyelmébe: javította a kódban és itt. Bizonyos valószínűséggel hibákat kaphat el a csere során.
    Jelenleg nem tudom, hogyan kell, és szívesen fogadok minden javaslatot.
  • (Ó Istenem) csatornák versenyképes használata (keyboardEvents, miceEvents).

Következtetés

A kód a legegyszerűbb eljárás. És olyan hülye, mint én. Szóval, azzal a reménnyel hízelegek magamnak, hogy szinte minden technikus képes lesz arra, hogy elvégezze, amit akar. És ennek köszönhetően ez a termék nem fog elpusztulni támogatás nélkül, mint a legtöbb csak szórakozásból.

Sok szerencsét!

Forrás: will.com

Hozzászólás