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á.
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).
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.