Prestanak xneur podrške prouzročio mi je neke patnje u proteklih šest mjeseci. (s pojavom OpenSUSE 15.1 na mojim stolnim računalima: s omogućenim xneurom, prozori gube fokus i čudno trepere u ritmu s unosom s tipkovnice).
"Oh, dovraga, opet sam počeo tipkati u krivom rasporedu" - u mom poslu to se događa nepristojno često. I ne dodaje ništa pozitivno.

Istovremeno, ja (kao inženjer dizajna) mogu sasvim jasno formulirati što želim. A htio sam (prvo od Punto Switchera, a onda, hvala Windows Vista, konačno se seli u Linux, od xneur) točno jedan. Shvativši da je brbljanje na ekranu u pogrešnom rasporedu (to se obično događa na kraju tipkanja nove riječi), dodirnite "Pauza/Prekid". I dobit ćete ono što ste tipkali.
U ovom trenutku proizvod ima optimalan (s moje točke gledišta) omjer funkcionalnosti i složenosti. Vrijeme je za dijeljenje.
TL.DR
Kasnije će biti raznih tehničkih detalja, pa prvo - za nestrpljive.
Trenutno je sljedeće ponašanje tvrdo kodirano:
- “Pauza/Prekid”: vraća posljednju riječ unatrag, mijenja raspored u aktivnom prozoru (između 0 i 1) i ponovno bira broj.
- “Lijevi Ctrl bez ičega”: mijenja izgled u aktivnom prozoru (između 0 i 1).
- “Lijevi pomak bez ičega”: uključuje izgled br. 0 u aktivnom prozoru.
- “Desni pomak bez ičega”: uključuje izgled br. 1 u aktivnom prozoru.
Od sada planiram prilagoditi ponašanje. Bez povratne informacije, nije zanimljivo (ionako mi je dobro). Vjerujem da će na Habréu biti dovoljan postotak publike sa sličnim problemima.
NB Jer u trenutnoj verziji, keylogger je priključen na "/dev/input/", xswitcher se mora pokrenuti s root pravima:
chown root:root xswitcher
chmod +xs xswitcherImajte na umu: Vlasnik datoteke sa suid mora biti root, jer tko god da je vlasnik bit će pretvoren u suid nakon pokretanja.
Paranoici (nisam iznimka) mogu klonirati iz i sastaviti na licu mjesta. ovako:
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
Dodajte autostart po želji (ovisno o DE).
Radi, "ne traži kašu" (≈30 sekundi CPU-a dnevno, ≈12 MB u RSS-u).
Detalji
Sada - detalji.
Cijelo spremište je izvorno bilo posvećeno mom projektu ljubimaca, a ja sam previše lijen da započnem još jedan. Dakle, sve je nagomilano (samo u mapama) i pokriveno AGPL-om ("obrnuti patent").
Xswitcher kod je napisan u golangu, s minimalnim uključivanjem C-a. Pretpostavlja se da će ovaj pristup rezultirati najmanjim naporom (do sada jest). Zadržavajući mogućnost povezivanja onoga što nedostaje pomoću cgo.
Tekst sadrži komentare odakle je posuđen i zašto. Jer xneur kod "nije me inspirirao", uzeo sam ga kao polazište .
Korištenje "/dev/input/" ima svoje prednosti (sve je vidljivo, uključujući pritisnutu tipku za automatsko ponavljanje) i mane. Nedostaci su:
- Automatsko ponavljanje (događaji s kodom “2”) nije u korelaciji s ponavljanjem s x.
- Unos preko X11 sučelja nije vidljiv (tako radi npr. VNC).
- Potreban root.
S druge strane, moguće je pretplatiti se na X događaje putem "XSelectExtensionEvent()". Možete zaviriti . Nisam pronašao ništa slično za go, a za grubu implementaciju odmah je bilo potrebno stotinu redaka C koda. Ostavite to sa strane za sada.
"Obrnuti" izlaz se trenutno izvodi zavrtanjem virtualne tipkovnice. Hvala autoru keybd_eventa, ali tamošnja apstrakcija je previsoke razine i morat će se dalje prepravljati. Na primjer, koristim desnu tipku Win za odabir 3. reda. I samo lijevi Win se prenosi natrag.
Poznate greške
- Ne znamo ništa o "kompozitnom" unosu (primjer: ½). Trenutno nije potrebno.
- Netočno igramo pravu pobjedu. U mom slučaju razbija naglasak.
- Ne postoji jasna analiza unosa. Umjesto toga, postoji nekoliko funkcija: Compare(), CtrlSequence(), RepeatSequence(), SpaceSequence(). Hvala za vašu brigu: ispravljeno u kodu i ovdje. Uz određenu vjerojatnost, možete uhvatiti greške prilikom zamjene.
U ovom trenutku ne znam "kako" i rado bih pozdravio sve prijedloge. - (O Bože) natjecateljsko korištenje kanala (keyboardEvents, miceEvents).
Zaključak
Kod je najjednostavniji proceduralni. I glup poput mene. Dakle, laskam si nadom da će gotovo svaki tehničar moći dovršiti ono što želi. I zahvaljujući tome, ovaj proizvod neće nestati bez podrške, kao većina samo za zabavu.
Sretno!
Izvor: www.habr.com
