Punto Switcher-en analogiko berria linuxerako: xswitcher

Xneur laguntzaren amaierak sufrimendu batzuk eragin dizkit azken sei hilabeteotan. (Nire mahaigainetan OpenSUSE 15.1 agertzearekin batera: xneur gaituta, leihoak fokua galtzen du eta dibertigarria egiten du denboran teklatuaren sarrerarekin).

"Ai, alajaina, diseinu okerrean idazten hasi nintzen berriro" - nire lanean hori sarritan gertatzen da. Eta ez du ezer positiborik gehitzen.

Punto Switcher-en analogiko berria linuxerako: xswitcher
Aldi berean, nik (diseinu ingeniari gisa) nahi dudana nahiko argi formula dezaket. Baina nik (lehenengo Punto Switcher-etik, eta gero, Windows Vista-ri esker, azkenik Linuxera aldatu, xneur-etik) gauza bat zehatz-mehatz nahi nuen. Pantailako zaborra diseinu okerrean dagoela konturatuta (hau normalean hitz berri bat idazten amaitzean gertatzen da), zapaldu "Pausa/Eten". Eta lortu inprimatutakoa.

Momentuz, produktuak (nire ikuspuntutik) funtzionaltasun/konplexutasun ratio optimoa du. Partekatzeko garaia da.

TL.DR

Geroago xehetasun tekniko guztiak izango dira, beraz, lehenik - "ukitzeko" esteka pazientziarik gabekoentzat.

Gaur egun, portaera hau gogor kodetuta dago:

  • "Pausa/Eten": azken hitza atzera egiten du, leiho aktiboan diseinua aldatzen du (0 eta 1 artean) eta berriro markatzen du.
  • "Ezkerreko Ctrl ezer gabe": leiho aktiboko diseinua aldatzen du (0 eta 1 artean).
  • "Ezkerreko Shift ezer gabe": 0. zenbakia aktibatzen du leiho aktiboan.
  • "Eskuineko Shift ezer gabe": 1. diseinua aktibatzen du leiho aktiboan.

Hemendik aurrera portaera pertsonalizatzeko asmoa dut. Iritzirik gabe, ez da interesgarria (hala ere ondo nago). Uste dut HabrΓ©-n antzeko arazoak dituzten ikusleen ehuneko nahikoa egongo dela.

Oharra Zeren egungo bertsioan, keylogger-a "/dev/input/"-ra erantsita dago, xswitcher root eskubideekin abiarazi behar da:

chown root:root xswitcher
chmod +xs xswitcher

Kontuan izan: Suid duen fitxategiaren jabeak root izan behar du, zeren jabea dena suid bihurtuko da martxan jartzean.

Paranoideek (ez naiz salbuespena) klona dezakete GIT eta gunean muntatu. Horrelako:

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

Gehitu autostart dastatzeko (DEren arabera).

Funtzionatzen du, "ez du porridgerik eskatzen" (β‰ˆ30 segundoko CPU egunean, β‰ˆ12 MB RSSan).

Xehetasunak

Orain - xehetasunak.

Biltegi osoa hasiera batean nire maskota proiektura dedikatu zen, eta nagiegi nago beste bat hasteko. Beraz, dena pilatuta dago (karpetetan besterik ez) eta AGPLk (β€œalderantzizko patentea”) estalita dago.

xswitcher kodea golang-ez idatzita dago, C-ren barne-sartze minimoekin. Ikuspegi honek esfortzu txikiena ekarriko duela suposatzen da (orain arte). Falta dena cgo erabiliz konektatzeko gaitasuna mantenduz.

Testuak nondik hartu den eta zergatik hartu duen iruzkinak ditu. Zeren xneur kodea "ez nau inspiratu", abiapuntutzat hartu nuen loloswitcher.

"/dev/input/" erabiltzeak abantailak ditu (dena ikusgai dago, sakatutako errepikapen automatikoko tekla barne) eta desabantailak. Desabantailak hauek dira:

  • Errepikapen automatikoa (Β«2 kodea duten gertaerakΒ») ez dago x-ren errepikapenarekin.
  • X11 interfazeen bidezko sarrera ez da ikusten (hala dabil VNC, adibidez).
  • Erroa behar da.

Bestalde, "XSelectExtensionEvent()" bidez X gertaeretara harpidetu daiteke. Begiratu dezakezu xinput kodea. Ez nuen horrelakorik aurkitu go-rako, eta inplementazio zakarrak berehala hartu zituen C kodea ehun lerro. Alde batera utzi oraingoz.

Gaur egun, "alderantzizko" irteera teklatu birtuala izorratuz egiten da. Eskerrik asko keybd_event-en egileari, baina hango abstrakzioa maila altuegia da eta gehiago berritu beharko da. Adibidez, eskuineko Win tekla erabiltzen dut 3. errenkada hautatzeko. Eta ezkerreko Win bakarrik transmititzen da atzera.

Akats ezagunak

  • Ez dakigu ezer "konposatu" sarrerari buruz (adibidea: Β½). Oraintxe ez da beharrezkoa.
  • Irabazi zuzena gaizki jokatzen ari gara. Nire kasuan, enfasia hausten du.
  • Ez dago sarrera-analisi argirik. Horren ordez, hainbat funtzio daude: Compare(), CtrlSequence(), RepeatSequence(), SpaceSequence(). Eskerrik asko nsmcan zure zaintzarako: zuzendu kodean eta hemen. Probabilitate jakin batekin, akatsak har ditzakezu ordezkatzean.
    Momentu honetan ez dakit "nola" eta edozein iradokizun ongi etorriko zait.
  • (Oh Jainkoa) kanalen erabilera lehiakorra (keyboardEvents, miceEvents).

Ondorioa

Kodea prozedura errazena da. Eta ni bezalako ergelak. Beraz, ia edozein teknikari nahi duena burutzeko gai izango den itxaropenarekin lausentzen naiz. Eta horri esker, produktu hau ez da laguntzarik gabe hilko, dibertigarrienak bezala.

Zorte on!

Iturria: www.habr.com

Gehitu iruzkin berria