Një alternativë e re për Punto Switcher për linux: xswitcher

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.

Një alternativë e re për Punto Switcher për linux: xswitcher
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 — linku „pĂ«r ta provuar” 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 xswitcher

Vini 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 GIT 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 loloswitcher.

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ë kodin xinput. 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 nsmcan 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

Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« đŸ”„ Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« | ProHoster