Punto Switcher-ի նոր անալոգը Linux-ի համար՝ xswitcher

Xneur-ի աջակցության ավարտը ինձ որոշակի տառապանք պատճառեց վերջին վեց ամսվա ընթացքում: (Իմ աշխատասեղանների վրա OpenSUSE 15.1-ի հայտնվելով. xneur-ը միացված է, պատուհանները կորցնում են ուշադրությունը և ժամանակի ընթացքում զվարճալի թարթում են ստեղնաշարի մուտքագրմամբ).

«Օ՜, անիծյալ, ես նորից սկսեցի սխալ դասավորությամբ մուտքագրել» - իմ աշխատանքում դա անպարկեշտ հաճախ է պատահում: Եվ դա ոչ մի դրական բան չի ավելացնում:

Punto Switcher-ի նոր անալոգը Linux-ի համար՝ xswitcher
Միևնույն ժամանակ, ես (որպես նախագծող ինժեներ) կարող եմ բավականին հստակ ձևակերպել այն, ինչ ուզում եմ։ Բայց ես ուզում էի (նախ Punto Switcher-ից, իսկ հետո Windows Vista-ի շնորհիվ վերջապես անցնեմ Linux-ի, xneur-ից) ճիշտ մի բան. Հասկանալով, որ էկրանի աղբը սխալ դասավորության մեջ է (դա սովորաբար տեղի է ունենում նոր բառ մուտքագրելու վերջում), սեղմեք «Դադար/Դադար»: Եվ ստացեք այն, ինչ տպել եք:

Այս պահին ապրանքն ունի օպտիմալ (իմ տեսանկյունից) ֆունկցիոնալություն/բարդություն հարաբերակցությունը։ Ժամանակն է կիսվել:

TL.DR

Ավելի ուշ կլինեն բոլոր տեսակի տեխնիկական մանրամասները, այնպես որ նախ. հղում «դիպչել» անհամբերների համար.

Ներկայումս հետևյալ վարքագիծը կոշտ կոդավորված է.

  • «Դադար/Կանգ».
  • «Ձախ Ctrl առանց որևէ բանի»: փոխում է դասավորությունը ակտիվ պատուհանում (0-ի և 1-ի միջև):
  • «Ձախ հերթափոխ առանց որևէ բանի». ակտիվ պատուհանում միացնում է թիվ 0 դասավորությունը:
  • «Right Shift առանց որևէ բանի». ակտիվ պատուհանում միացնում է թիվ 1 դասավորությունը:

Այսուհետ ես նախատեսում եմ հարմարեցնել վարքագիծը: Առանց հետադարձ կապի, դա հետաքրքիր չէ (միևնույն է, ես լավ եմ դրա հետ): Կարծում եմ, որ Habré-ում նման խնդիրներ ունեցող հանդիսատեսի բավարար տոկոսը կլինի:

NB Որովհետեւ ընթացիկ տարբերակում keylogger-ը կցված է «/dev/input/»-ին, xswitcher-ը պետք է գործարկվի արմատային իրավունքներով.

chown root:root xswitcher
chmod +xs xswitcher

Խնդրում ենք նկատի ունենալ: suid-ով ֆայլի սեփականատերը պետք է լինի root, քանի որ ով էլ որ լինի սեփականատերը, գործարկման ժամանակ կվերածվի սուիդ:

Պարանոիդները (ես բացառություն չեմ) կարող են կլոնավորվել GIT- ը և հավաքել տեղում: Դրա նման:

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

Ավելացնել autostart ըստ ճաշակի (կախված DE):

Այն աշխատում է, «չի խնդրում շիլա» (օրական ≈30 վայրկյան պրոցեսոր, ≈12 ՄԲ RSS-ում):

Մանրամասն

Այժմ - մանրամասները:

Ամբողջ պահոցն ի սկզբանե նվիրված էր իմ կենդանիների նախագծին, և ես շատ ծույլ եմ սկսել մեկ ուրիշը: Այսպիսով, ամեն ինչ կուտակված է (միայն թղթապանակներում) և ծածկված է AGPL-ով («հակադարձ արտոնագիր»):

Xswitcher կոդը գրված է գոլանգով, C-ի նվազագույն ընդգրկումներով: Ենթադրվում է, որ այս մոտեցումը կհանգեցնի նվազագույն ջանքերի (առայժմ դա արել է): Միաժամանակ պահպանելով cgo-ի միջոցով միացնելու այն, ինչ բացակայում է:

Տեքստը պարունակում է մեկնաբանություններ, թե որտեղից է այն փոխառվել և ինչու: Որովհետեւ xneur կոդը «ինձ չի ոգեշնչել», ես այն վերցրեցի որպես ելակետ loloswitcher.

«/dev/input/»-ի օգտագործումն ունի և՛ իր առավելությունները (ամեն ինչ տեսանելի է, ներառյալ սեղմված ավտոմատ կրկնվող ստեղնը), և՛ թերությունները: Թերությունները հետևյալն են.

  • Ավտոմատ կրկնությունը («2» կոդով իրադարձությունները) չի փոխկապակցվում x-ով կրկնելու հետ:
  • X11 միջերեսների միջոցով մուտքագրումը տեսանելի չէ (օրինակ, VNC-ն այսպես է աշխատում):
  • Անհրաժեշտ է արմատ:

Մյուս կողմից, հնարավոր է բաժանորդագրվել X իրադարձություններին «XSelectExtensionEvent()»-ի միջոցով։ Դուք կարող եք հայացք նետել xinput կոդը. Ես նման բան չգտա, և կոպիտ իրականացումը անմիջապես վերցրեց հարյուր տող C կոդ: Առայժմ մի կողմ դրեք:

«Հակադարձ» ելքը ներկայումս կատարվում է վիրտուալ ստեղնաշարը պտուտակելու միջոցով: Շնորհակալություն keybd_event-ի հեղինակին, բայց այնտեղ աբստրակցիան չափազանց բարձր մակարդակի է և պետք է վերամշակվի: Օրինակ, ես օգտագործում եմ աջ Win ստեղնը 3-րդ շարքը ընտրելու համար: Եվ միայն ձախ Win-ն է փոխանցվում հետ:

Հայտնի սխալներ

  • Մենք ոչինչ չգիտենք «կոմպոզիտային» մուտքագրման մասին (օրինակ՝ ½): Դա այս պահին պետք չէ:
  • Մենք սխալ ենք խաղում ճիշտ Win: Իմ դեպքում դա խախտում է շեշտադրումները։
  • Չկա հստակ մուտքային վերլուծություն: Փոխարենը կան մի քանի ֆունկցիաներ՝ Compare(), CtrlSequence(), RepeatSequence(), SpaceSequence(): Շնորհակալություն nsmcan ձեր խնամքի համար՝ ուղղել է կոդը և այստեղ: Որոշակի հավանականությամբ փոխարինելիս կարող եք սխալներ բռնել։
    Այս պահին ես չգիտեմ «ինչպես» և կողջունեմ ցանկացած առաջարկ:
  • (Օ Աստված) ալիքների մրցակցային օգտագործում (keyboardEvents, miceEvents):

Ամփոփում

Օրենսգիրքը ամենապարզ ընթացակարգն է: Եվ ինձ նման հիմար: Այնպես որ, ես ինձ շոյում եմ այն ​​հույսով, որ գրեթե ցանկացած տեխնիկ կկարողանա ավարտին հասցնել այն, ինչ ուզում է։ Եվ դրա շնորհիվ այս ապրանքը չի կորչի առանց աջակցության, ինչպես պարզապես զվարճանքի համար:

Good luck!

Source: www.habr.com

Добавить комментарий