Ndërprerja e mbështetjes për xneur më ka shkaktuar disa vuajtje gjatë gjashtë muajve të fundit (me lindjen e OpenSUSE 15.1 në desktopët e mi: me xneur aktiv, dritaret humbin fokusin dhe dridhen në përputhje me shtypjen e tastierës).
âAh, pĂ«rsĂ«ri fillova tĂ« shkruaj nĂ« atĂ« renditjeâ â ndodh shumĂ« shpesh nĂ« punĂ«n time. Dhe nuk shton asnjĂ« pozitivitet.

NĂ« tĂ« njĂ«jtĂ«n kohĂ«, unĂ« (si inxhiner ndĂ«rtimi) mund ta formuloj mjaft qartĂ« atĂ« qĂ« dua. DĂ«shiroja njĂ« gjĂ« tĂ« vetme (fillimisht nga Punto Switcher dhe mĂ« pas, falĂ« Windows Vista, pĂ«rfundimisht kalova nĂ« Linux, nga xneur): ta kuptoj se nĂ« ekran nuk Ă«shtĂ« renditja e duhur (kjo zakonisht ndodh nĂ« fund tĂ« shkruajtjes sĂ« njĂ« fjale tĂ« re), tĂ« godas âPause/Breakâ. Dhe tĂ« marr atĂ« qĂ« kam shkruar.
Aktualisht, produkti ka njĂ« raport optimal (sipĂ«rmarrĂ«s nga pikĂ«pamja ime) funksionaliteti/kompleksiteti. ĂshtĂ« koha tĂ« ndaj.
TL.DR
MĂ« pas do tĂ« shkojnĂ« disa detaje teknike, prandaj fillimisht â pĂ«r ata qĂ« nuk kanĂ« durim.
Aktualisht, ka një sjellje të hardkoduar si më poshtë:
- «Pause/Break»: fshin të fundit fjalën, kalon në shkallën aktiv në dritaren (ndërmjet 0 dhe 1) dhe e shkruan përsëri.
- «Ctrl e majtë pa asgjë»: kalon në shkallën aktiv në dritaren (ndërmjet 0 dhe 1).
- «Shift e majtĂ« pa asgjë»: aktivizon nĂ« dritaren shkallĂ«n â0.
- «Shift e djathtĂ« pa asgjë»: aktivizon nĂ« dritaren shkallĂ«n â1.
Nga ky moment planifikoj tĂ« personalizoj sjelljen. Pa feedback â nuk Ă«shtĂ« interesante (mĂ« kaq mjafton). Mendoj se nĂ« HabrĂ« do tĂ« gjendet njĂ« pĂ«rqindje e mjaftueshme e audiencĂ«s me probleme tĂ« ngjashme.
Shën. Për shkak se në versionin aktual, keyloggeri lidhet me "/dev/input/", xswitcher duhet të nisë me privilegje root:
chown root:root xswitcher
chmod +xs xswitcherVini re: pronari i skedarit me suid duhet të jetë root, sepse kush është pronar bëhet suid në nisje.
Paranoikët (unë nuk përjashtohem) mund të klonojnë nga dhe të ndërtuara aty. Diku rreth kësaj:
go get "github.com/micmonay/keybd_event"
go get "github.com/gvalkov/golang-evdev"
### X11 headers për OpenSUSE/bazuar në deb
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
Autostart shtoni sipas dëshirës (në varësi të DE).
Funksionon, 'nuk kĂ«rkon kashĂ«' (â30 sekonda CPU nĂ« ditĂ«, â12 MB nĂ« RSS).
Detajet
Tani â detajet.
E tërë repo ishte fillimisht e dedikuar për projektin tim personal, dhe nuk kam ndonjë dëshirë të filloj një tjetër tani. Prandaj, gjithçka është grumbulluar në një vend (thjesht nëpër dosje) dhe është mbuluar me AGPL ('patenti në të kundërt').
Kodi xswitcher është shkruar në golang, me përzierje minimale të C. Supozohet se ky qasje do të japë shpenzime të vogla të punës (deri tani ka funksionuar kështu). Duke ruajtur mundësinë për të lidhur të munguarin përmes cgo.
Në tekst janë të shpërndara komente, prej nga kam marrë çfarë dhe pse. Sepse kodi xneur nuk më 'inspiroi', e mora si pikënisje .
Përdorimi "/dev/input/" ka si përfitime (gjithçka është e dukshme, përfshirë çelësin e shtypur me ripërsëritje automatik) ashtu edhe disavantazhe. Disavantazhet janë këto:
- Ripërsëritja automatik (ngjarjet me kod '2') nuk korrespondon me ripërsëritjen nga X-es.
- Nuk është e dukshme hyrja përmes interfaceve X11 (për shembull, VNC funksionon).
- Kërkohet rreth.
Nga ana tjetër, mund të regjistroheni për ngjarje X përmes 'XSelectExtensionEvent()'. Mund të shihni në . Për go nuk kam gjetur asgjë të ngjashme, dhe realizimi paraprak dha menjëherë njëqind rreshta kodi C. Për tani e kam lënë mënjanë.
Shfaqja "prapa" deri më sot është realizuar përmes lidhjes së një tastiere virtuale. Falenderoj autorin keybd_event, por atje ka një abstraksion shumë të lartë dhe më tej do të duhet të rishkruhet. Për shembull, çelësi i djathtë Win në rreshtin e tretë përzgjedh. Kurse, vetëm çelësi i majtë Win kthehet.
Gabimet e njohura
- Nuk dimĂ« asgjĂ« pĂ«r hyrjen "kompozite" (shembull: œ). SĂ« bashku me kĂ«tĂ«, nuk Ă«shtĂ« e nevojshme tani.
- Po e reprodukojmë gabim çelësin e djathtë Win. Në rastin tim, prish renditjen e akcenëve.
- Nuk ka njĂ« analizĂ« tĂ« qartĂ« tĂ« hyrjes. NĂ« vend tĂ« kĂ«saj â disa funksione: Compare(), CtrlSequence(), RepeatSequence(), SpaceSequence(). Faleminderit pĂ«r vĂ«mendjen: e korrigjova nĂ« kod dhe kĂ«tu. Me njĂ« probabilitet tĂ« caktuar, mund tĂ« kapen gabimet gjatĂ« zĂ«vendĂ«simit.
Në këtë vend, nuk di "si duhet" dhe do të isha i lumtur me çfarëdo propozimesh. - (O tmerr) përdorimi konkurrues i kanaleve (keyboardEvents, miceEvents).
Përfundimi
Kodi është procedural më i thjeshtë. Dhe budalla si unë. Kështu që, po e ngushëlloj veten se do të jetë në gjendje ta shkruajë atë që dëshiroj çdo teknik. Dhe ky produkt për këtë arsye nuk do të humbasë pa mbështetje ashtu si shumica e just-for-fun.
Fat të mirë!
Burimi: habr.com
