Afọwọṣe tuntun ti Punto Switcher fun linux: xswitcher

Ipari atilẹyin xneur ti fa diẹ ninu ijiya ni oṣu mẹfa sẹhin. (pẹlu dide ti OpenSUSE 15.1 lori awọn kọǹpútà mi: pẹlu xneur ṣiṣẹ, awọn window padanu idojukọ ati flicker ni akoko pẹlu titẹ sii keyboard).

"Oh, egan, Mo tun bẹrẹ titẹ ni ipilẹ ti ko tọ" - ninu iṣẹ mi eyi n ṣẹlẹ ni aiṣedeede nigbagbogbo. Ati pe ko ṣe afikun ohun rere.

Afọwọṣe tuntun ti Punto Switcher fun linux: xswitcher
Ni akoko kanna, Emi (gẹgẹbi ẹlẹrọ apẹrẹ) le ṣe agbekalẹ ohun ti Mo fẹ ni kedere. Ṣugbọn Mo fẹ (akọkọ lati Punto Switcher, ati lẹhinna, o ṣeun si Windows Vista, nikẹhin yi pada si Linux, lati xneur) gangan ohun kan. Lẹhin ti o rii pe idoti loju iboju wa ni ipilẹ ti ko tọ (eyi nigbagbogbo n ṣẹlẹ ni ipari titẹ ọrọ tuntun), tẹ “Dinmi / Bireki”. Ati ki o gba ohun ti o tejede.

Ni akoko yii, ọja naa ni aipe (lati oju-ọna mi) iṣẹ ṣiṣe / ipin eka. O to akoko lati pin.

TL.DR

Gbogbo iru awọn alaye imọ-ẹrọ yoo wa nigbamii, nitorinaa akọkọ - ọna asopọ "lati fi ọwọ kan" fun awon ti ko ni suuru.

Lọwọlọwọ ihuwasi atẹle jẹ koodu lile:

  • "Sinmi / Bireki": backspaces awọn ti o kẹhin ọrọ, yipada awọn ifilelẹ ti awọn ti nṣiṣe lọwọ window (laarin 0 ati 1) ati awọn ipe lẹẹkansi.
  • "Ctrl osi laisi ohunkohun": yipada ifilelẹ ni window ti nṣiṣe lọwọ (laarin 0 ati 1).
  • "Iyipada osi laisi ohunkohun": titan ifilelẹ No.. 0 ninu ferese ti nṣiṣe lọwọ.
  • "Iyipada ọtun laisi ohunkohun": titan ifilelẹ No.. 1 ninu ferese ti nṣiṣe lọwọ.

Lati isisiyi lọ Mo gbero lati ṣe akanṣe ihuwasi naa. Laisi esi, kii ṣe igbadun (Mo dara pẹlu rẹ lonakona). Mo gbagbọ pe lori Habré yoo jẹ ipin to to ti awọn olugbo pẹlu awọn iṣoro kanna.

NB Nitori ninu ẹya lọwọlọwọ, keylogger ti wa ni asopọ si "/ dev/input/", xswitcher gbọdọ ṣe ifilọlẹ pẹlu awọn ẹtọ gbongbo:

chown root:root xswitcher
chmod +xs xswitcher

Jowo se akiyesi: Eni ti faili pẹlu suid gbọdọ jẹ root, nitori enikeni ti o ni eni yoo wa ni tan-sinu suid lori ibẹrẹ.

Paranoids (Emi ko si sile) le oniye lati Git ki o si jọ lori ojula. Bẹ yẹn:

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

Ṣafikun autostart lati ṣe itọwo (da lori DE).

O ṣiṣẹ, "ko beere fun porridge" (≈30 aaya Sipiyu fun ọjọ kan, ≈12 MB ni RSS).

Awọn alaye

Bayi - awọn alaye.

Gbogbo ibi-ipamọ ni akọkọ ti yasọtọ si iṣẹ akanṣe ẹran-ọsin mi, ati pe emi ọlẹ pupọ lati bẹrẹ ọkan miiran. Nitorina, ohun gbogbo ti wa ni akopọ (o kan ninu awọn folda) ati pe o ni aabo nipasẹ AGPL ("itọsi yiyipada").

Awọn koodu xswitcher ti kọ ni golang, pẹlu awọn ifisi ti o kere ju ti C. A ro pe ọna yii yoo ja si iye ti o kere julọ ti igbiyanju (bẹ jina o ni). Lakoko mimu agbara lati sopọ ohun ti o padanu nipa lilo cgo.

Ọrọ naa ni awọn asọye lori ibiti o ti ya lati ati idi. Nitori koodu xneur "ko fun mi ni iyanju", Mo mu o bi ibẹrẹ loloswitcher.

Lilo "/ dev/input/" ni awọn anfani mejeeji (ohun gbogbo han, pẹlu bọtini atunwi aifọwọyi) ati awọn aila-nfani. Awọn alailanfani ni:

  • Tunṣe-laifọwọyi (awọn iṣẹlẹ pẹlu koodu “2”) ko ni ibamu pẹlu atunwi pẹlu x.
  • Iṣawọle nipasẹ awọn atọkun X11 ko han (eyi ni bii VNC ṣe n ṣiṣẹ, fun apẹẹrẹ).
  • Nilo root.

Ni apa keji, o ṣee ṣe lati ṣe alabapin si awọn iṣẹlẹ X nipasẹ “XSelectExtensionEvent ()”. O le wo ni xinput koodu. Emi ko ri ohunkohun bi eyi fun lọ, ati imuse ti o ni inira lẹsẹkẹsẹ mu awọn laini ọgọrun ti koodu C. Fi si apakan fun bayi.

Ijadejade “yiyipada” ni a ṣe lọwọlọwọ nipasẹ yiyi bọtini itẹwe foju. Ṣeun si onkọwe ti keybd_event, ṣugbọn abstraction ti o wa ni ipele ti o ga julọ ati pe yoo ni lati tun ṣe siwaju. Fun apẹẹrẹ, Mo lo bọtini Win ọtun lati yan ila 3rd. Ati ki o nikan osi Win ti wa ni zqwq pada.

Awọn idun ti a mọ

  • A ko mọ nkankan nipa titẹ sii “apapo” (apẹẹrẹ: ½). Ko nilo ni bayi.
  • A ti wa ni ti ndun awọn ọtun Win ti ko tọ. Ninu ọran mi, o fọ tcnu naa.
  • Ko si itọsọ igbewọle to daju. Dipo, awọn iṣẹ pupọ lo wa: Afiwera (), CtrlSequence (), Tunṣe (), SpaceSequence (). Спасибо nsmcan fun itọju rẹ: ṣe atunṣe ni koodu ati nibi. Pẹlu iṣeeṣe kan, o le mu awọn idun nigbati o ba rọpo.
    Ni aaye yii Emi ko mọ “bi o ṣe le” ati pe yoo gba awọn imọran eyikeyi.
  • (Oluwa mi o) ifigagbaga lilo ti awọn ikanni (keyboardEvents, miceEvents).

ipari

Koodu naa jẹ ilana ti o rọrun julọ. Ati aimọgbọnwa bi emi. Nitorinaa, Mo ṣe ipọnni fun ara mi pẹlu ireti pe o fẹrẹ to eyikeyi onimọ-ẹrọ yoo ni anfani lati pari ohun ti o fẹ. Ati pe o ṣeun si eyi, ọja yii kii yoo parun laisi atilẹyin, bii pupọ julọ-fun-fun.

Ti o dara orire!

orisun: www.habr.com

Fi ọrọìwòye kun