Analogue vaovao an'ny Punto Switcher ho an'ny linux: xswitcher

Ny fiafaran'ny fanohanana xneur dia nahatonga ahy hijaly nandritra ny enim-bolana lasa. (miaraka amin'ny fahatongavan'ny OpenSUSE 15.1 eo amin'ny biraoko: miaraka amin'ny xneur afaka, ny windows dia very fifantohana ary mampihomehy mampihomehy ara-potoana miaraka amin'ny fampidirana klavier).

"Oh, ozona, nanomboka nanoratra tamin'ny layout diso indray aho" - amin'ny asako dia mitranga matetika izany. Ary tsy manampy zavatra tsara izany.

Analogue vaovao an'ny Punto Switcher ho an'ny linux: xswitcher
Amin'izay fotoana izay ihany, izaho (amin'ny maha-injeniera mpamorona) dia afaka mamolavola mazava tsara izay tiako. Saingy naniry aho (voalohany tamin'ny Punto Switcher, ary avy eo, noho ny Windows Vista, nivadika ho Linux, avy amin'ny xneur) zavatra iray ihany. Rehefa tonga saina fa ny fako eo amin'ny efijery dia ao amin'ny layout diso (izany matetika no mitranga amin'ny faran'ny fanoratana teny vaovao), manindry ny "Pause/Break". Ary alao izay vita printy.

Amin'izao fotoana izao, ny vokatra dia manana ny tsara indrindra (avy amin'ny fijeriko) fonctionnaire/complexity ratio. Fotoana hifampizarana izao.

TL.DR

Hisy ny karazana pitsopitsony ara-teknika rehetra any aoriana, ka voalohany - rohy "to touch" ho an'ny tsy manam-paharetana.

Amin'izao fotoana izao, ity fihetsika manaraka ity dia hardcoded:

  • "Pause/Break": mamerina ny teny farany, manova ny fisehon'ny fikandrana mavitrika (eo anelanelan'ny 0 sy 1) ary miantsoa indray.
  • "Ctrl ankavia tsy misy na inona na inona": manova ny fisehon'ny fikandrana mavitrika (eo anelanelan'ny 0 sy 1).
  • "Left Shift tsy misy na inona na inona": mamelona ny layout No. 0 ao amin'ny varavarankely mavitrika.
  • "Right Shift tsy misy na inona na inona": mamelona ny layout No. 1 amin'ny varavarankely mavitrika.

Manomboka izao dia mikasa ny hanamboatra ny fihetsika aho. Raha tsy misy tamberina dia tsy mahaliana (tsy maninona aho na izany aza). Mino aho fa amin'ny HabrΓ© dia ho ampy ny isan-jaton'ny mpihaino manana olana mitovy amin'izany.

NB SATRIA Amin'ny dikan-teny ankehitriny, ny keylogger dia mifamatotra amin'ny "/ dev / input /", xswitcher dia tsy maintsy atomboka miaraka amin'ny zo fototra:

chown root:root xswitcher
chmod +xs xswitcher

Mariho tsara: Ny tompon'ny rakitra miaraka amin'ny suid dia tsy maintsy ho faka, satria na iza na iza tompony dia ho lasa suid rehefa manomboka.

Ny paranoΓ―de (tsy maningana aho) dia afaka manao clone avy git ary mivory eny an-toerana. Toy izany:

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

Ampio autostart hanandrana (miankina amin'ny DE).

Mandeha izy io, "tsy mangataka lafarinina" (β‰ˆ30 segondra CPU isan'andro, β‰ˆ12 MB amin'ny RSS).

Hizaha antsipiriany

Ankehitriny - ny antsipiriany.

Ny tahiry manontolo dia natokana ho an'ny tetikasako biby fiompiko tany am-boalohany, ary kamo loatra aho hanomboka iray hafa. Noho izany, ny zava-drehetra dia mivangongo (ao anaty lahatahiry fotsiny) ary voarakotry ny AGPL ("patent reverse").

Ny code xswitcher dia nosoratana tamin'ny golang, miaraka amin'ny fampidirana kely indrindra amin'ny C. Heverina fa io fomba fiasa io dia miteraka ezaka kely indrindra (hatramin'izao). Raha mitazona ny fahafahana mampifandray izay tsy ampy amin'ny fampiasana cgo.

Ny lahatsoratra dia misy fanehoan-kevitra momba ny toerana nindramina sy ny antony. SATRIA ny code xneur "tsy nanentana ahy", noraisiko ho toy ny fiaingana loloswitcher.

Ny fampiasana "/dev/input/" dia samy manana ny tombony (hita ny zava-drehetra, ao anatin'izany ny fanendry fanerena mandeha ho azy) sy ny fatiantoka. Ny tsy fahampiana dia:

  • Ny famerenana mandeha ho azy (hetsika misy kaody "2") dia tsy mifandray amin'ny famerimberenana miaraka amin'ny x.
  • Tsy hita ny fidirana amin'ny alΓ lan'ny interface X11 (toy izao ny fiasan'ny VNC, ohatra).
  • Mila faka.

Amin'ny lafiny iray, azo atao ny misoratra anarana amin'ny hetsika X amin'ny alΓ lan'ny "XSelectExtensionEvent()". Azonao atao ny mijery code xinput. Tsy nahita na inona na inona toy izany aho, ary ny fampiharana henjana dia naka andalana C code an-jatony avy hatrany. Apetraho amin'izao fotoana izao.

Ny famoahana "mivadika" dia atao amin'ny alΓ lan'ny fametahana ny klavier virtoaly. Misaotra ny mpanoratra ny keybd_event, fa ny abstraction ao dia avo loatra ka tsy maintsy haverina bebe kokoa. Ohatra, mampiasa ny fanalahidy Win havanana aho hisafidianana ny laharana faha-3. Ary ny Win havia ihany no ampitaina.

Fantatra Bugs

  • Tsy fantatsika na inona na inona momba ny fampidirana "composite" (ohatra: Β½). Tsy ilaina izany amin'izao fotoana izao.
  • Diso ny lalao Win marina izahay. Raha ny amiko, dia manimba ny fanamafisana izany.
  • Tsy misy fandrafetana fampidirana mazava. Fa kosa, misy fiasa maromaro: Compare(), CtrlSequence(), RepeatSequence(), SpaceSequence(). Бпасибо nsmcan ho an'ny fikarakaranao: ahitsio ao amin'ny code ary eto. Miaraka amin'ny mety ho azo atao dia afaka misambotra bibikely ianao rehefa manolo.
    Amin'izao fotoana izao dia tsy haiko ny "fomba" ary handray soso-kevitra aho.
  • (Andriamanitra Γ΄) Fifaninanana fampiasana fantsona (keyboardEvents, miceEvents).

famaranana

Ny kaody no fomba tsotra indrindra. Ary vendrana toa ahy. Noho izany, midera ny tenako aho amin'ny fanantenana fa saika ny teknisiana rehetra dia afaka mamita izay tiany. Ary noho izany, ity vokatra ity dia tsy ho levona raha tsy misy fanohanana, toy ny ankamaroan'ny fialam-boly.

Mirary soa!

Source: www.habr.com

Add a comment