Linux үшін Punto Switcher жаңа аналогы: xswitcher

xneur қолдауының аяқталуы мені соңғы алты айда біраз азапқа салды. (менің жұмыс үстелімде OpenSUSE 15.1 пайда болған кезде: xneur қосылған кезде, терезелер фокусты жоғалтады және пернетақтадан енгізу арқылы уақыт өте күлкілі жыпылықтайды).

«Ой, қарғыс атсын, мен қайтадан қате орналасумен жаза бастадым» - менің жұмысымда бұл жиі орынсыз болады. Және бұл оң ештеңе қоспайды.

Linux үшін Punto Switcher жаңа аналогы: xswitcher
Сонымен қатар, мен (инженер-конструктор ретінде) өзімнің қалағанымды нақты тұжырымдай аламын. Бірақ мен (алдымен Punto Switcher-тен, содан кейін Windows Vista-ның арқасында, ақырында Linux-ке, xneur-дан) бір нәрсені қаладым. Экрандағы қоқыстың дұрыс орналаспағанын түсініп (бұл әдетте жаңа сөзді терудің соңында болады), «Үзіліс/Үзіліс» түймесін басыңыз. Және басып шығарғаныңызды алыңыз.

Қазіргі уақытта өнімде оңтайлы (менің көзқарасым бойынша) функционалдылық/күрделілік қатынасы бар. Бөлісетін кез келді.

TL.DR

Әртүрлі техникалық мәліметтер кейінірек болады, сондықтан алдымен - «түрту» сілтемесі шыдамсыздар үшін.

Қазіргі уақытта келесі әрекет қатты кодталған:

  • «Үзіліс/Үзіліс»: соңғы сөздің артына жылжытады, белсенді терезедегі орналасуды ауыстырады (0 мен 1 арасында) және қайта тереді.
  • «Сол Ctrl ешнәрсесіз»: белсенді терезедегі орналасуды ауыстырады (0 мен 1 арасында).
  • «Ештеңесіз солға ауысу»: белсенді терезеде №0 орналасуды қосады.
  • «Ештеңесіз оң жаққа ауысу»: белсенді терезеде №1 орналасуды қосады.

Енді мен мінез-құлықты реттеуді жоспарлап отырмын. Кері байланыссыз бұл қызық емес (бәрібір мен онымен жақсымын). Мен Хабреде осындай проблемалары бар аудиторияның жеткілікті пайызы болады деп ойлаймын.

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

Дәміне қарай автоқосуды қосыңыз (DE-ге байланысты).

Ол жұмыс істейді, «ботқа сұрамайды» (тәулігіне ≈30 секунд CPU, RSS ішінде ≈12 МБ).

Мәліметтерді көру

Енді - егжей-тегжейлі.

Бүкіл репозиторий бастапқыда үй жануарларына арналған жобаға арналған, мен басқасын бастауға тым жалқаумын. Осылайша, барлығы жинақталған (тек қалталарда) және AGPL («кері патент») арқылы жабылған.

xswitcher коды голанг тілінде жазылған, C ең аз қосындылары бар. Бұл тәсіл ең аз күш жұмсауға әкеледі деп болжанады (әзірге ол бар). cgo көмегімен жетіспейтін нәрсені қосу мүмкіндігін сақтай отырып.

Мәтінде оның қайдан және не үшін алынғаны туралы түсініктемелер бар. Өйткені xneur коды «мені шабыттандырмады», мен оны бастапқы нүкте ретінде қабылдадым loloswitcher.

«/dev/input/» пайдаланудың артықшылықтары да (бәрі көрінеді, оның ішінде басылған автоматты қайталау пернесі де) және кемшіліктері бар. Кемшіліктері:

  • Автоматты қайталау («2» коды бар оқиғалар) х қайталауымен сәйкес келмейді.
  • X11 интерфейстері арқылы енгізу көрінбейді (мысалы, VNC осылай жұмыс істейді).
  • Түбір керек.

Екінші жағынан, "XSelectExtensionEvent()" арқылы X оқиғаларына жазылуға болады. Қарай аласыз xinput коды. Мен мұндай ештеңе таппадым, және өрескел іске асыру бірден C кодының жүз жолын алды. Әзірше оны бір жаққа қойыңыз.

Қазіргі уақытта «кері» шығыс виртуалды пернетақтаны бұрау арқылы жасалады. Keybd_event авторына рахмет, бірақ абстракция тым жоғары деңгейде және одан әрі қайта өңдеуге тура келеді. Мысалы, 3-ші жолды таңдау үшін оң жақ Win пернесін қолданамын. Және тек сол жақ Win кері жіберіледі.

Белгілі қателер

  • Біз «композиттік» енгізу туралы ештеңе білмейміз (мысалы: ½). Бұл қазір қажет емес.
  • Біз дұрыс Жеңіс ойынын қате ойнап жатырмыз. Менің жағдайда бұл екпінді бұзады.
  • Ешқандай анық енгізу талдауы жоқ. Оның орнына бірнеше функциялар бар: Compare(), CtrlSequence(), RepeatSequence(), SpaceSequence(). сізге рахмет nsmcan Сіздің күтіміңіз үшін: оны кодта және осы жерде түзетіңіз. Белгілі бір ықтималдықпен сіз ауыстыру кезінде қателерді ұстай аласыз.
    Осы сәтте мен «қалай істеу керектігін» білмеймін және кез келген ұсыныстарды құптаймын.
  • (О, Құдай) арналарды бәсекеге қабілетті пайдалану (keyboardEvents, miceEvents).

қорытынды

Код ең қарапайым процедура болып табылады. Және мен сияқты ақымақ. Сондықтан мен кез келген техник қалағанын орындай алады деген үмітпен мақтанамын. Осының арқасында бұл өнім көпшілік көңіл көтеру сияқты қолдаусыз жойылмайды.

Сәттілік тілейміз!

Ақпарат көзі: www.habr.com

пікір қалдыру