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 ортосунда).
  • “Эч нерсесиз солго Shift”: активдүү терезеде №0 макетти күйгүзөт.
  • "Эч нерсесиз оңго жылдыруу": активдүү терезеде №1 макетти күйгүзөт.

Мындан ары мен жүрүм-турумду ыңгайлаштырууну пландап жатам. Пикирсиз, бул кызык эмес (мен баары бир жакшымын). Мен Хабреде ушул сыяктуу көйгөйлөрү бар көрүүчүлөрдүн жетиштүү пайызы болот деп ишенем.

NB Анткени учурдагы версияда, keylogger "/dev/input/" тиркелет, xswitcher тамыр укуктары менен ишке киргизүү керек:

chown root:root xswitcher
chmod +xs xswitcher

Көңүл буруңуздар: suid менен файлдын ээси root болушу керек, анткени ким ээси болсо, ишке киргенде сотко айланат.

Параноиддер (мен дагы эмесмин) клондой алышат Программа жана жеринде чогултуу. Болжол менен ушундай:

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 күнүнө, ≈12 МБ RSS).

маалымат

Азыр - майда-чүйдөсүнө чейин.

Бүт репозиторий алгач менин үй жаныбарларыма арналган жана мен башкасын баштоого жалкоомун. Ошентип, баары үйүлгөн (жөн эле папкаларда) жана AGPL менен жабылган («кайтарым патент»).

xswitcher коду голанг тилинде жазылган, С минималдуу камтуулары менен. Бул ыкма эң аз күч-аракетти талап кылат деп болжолдонууда (азыркыга чейин ал бар). cgo аркылуу жетишпегенди туташтыруу мүмкүнчүлүгүн сактоо менен.

Текстте анын кайдан жана эмне үчүн алынганы боюнча комментарийлер камтылган. Анткени xneur коду "мени шыктандырган жок", мен аны баштапкы чекит катары кабыл алдым loloswitcher.

"/dev/input/" колдонуунун артыкчылыктары да (баары көрүнүп турат, анын ичинде басылган авто кайталоо баскычы) да, кемчиликтери да бар. кемчиликтери болуп төмөнкүлөр саналат:

  • Авто кайталоо («2» коду бар окуялар) х менен кайталоо менен корреляцияланбайт.
  • X11 интерфейстери аркылуу киргизүү көрүнбөйт (мисалы, VNC ушундай иштейт).
  • Тамыр керек.

Башка жагынан алганда, "XSelectExtensionEvent()" аркылуу X окуяларга жазылууга болот. Сиз карасаңыз болот xinput коду. Мен бул сыяктуу эч нерсе таба алган жокмун, жана орой ишке дароо C кодунун жүз саптарын алды. Азырынча четке кой.

"Тескери" чыгаруу учурда виртуалдык клавиатураны буроо аркылуу жасалат. keybd_event авторуна рахмат, бирок ал жерде абстракция өтө жогорку деңгээлде жана андан ары кайра жасоого туура келет. Мисалы, мен 3-катар тандоо үчүн оң Win баскычын колдоном. Жана бир гана сол Win кайра берилет.

Белгилүү каталар

  • Биз "композиттик" киргизүү жөнүндө эч нерсе билбейбиз (мисалы: ½). Бул азыр керек эмес.
  • Биз туура Жеңишти туура эмес ойноп жатабыз. Менин учурда, ал басымды бузат.
  • Эч кандай так киргизүү талдоо жок. Анын ордуна, бир нече функциялар бар: Compare(), CtrlSequence(), RepeatSequence(), SpaceSequence(). Спасибо nsmcan Сиздин кам көрүү үчүн: аны коддо жана бул жерде оңдогон. Белгилүү бир ыктымалдуулук менен сиз алмаштырууда мүчүлүштүктөрдү байкай аласыз.
    Бул учурда мен "кандай кылууну" билбейм жана ар кандай сунуштарды кабыл алам.
  • (О кудай) каналдарды атаандаштыкта ​​колдонуу (keyboardEvents, miceEvents).

жыйынтыктоо

Кодекс эң жөнөкөй процедура. Анан мендей келесоо. Ошентип, мен дээрлик бардык техник каалаганын бүтүрө алат деген үмүт менен кошомат кылам. Жана мунун аркасында, бул продукт көпчүлүк жөн гана көңүл ачуу үчүн болгон сыяктуу колдоосуз жок болбойт.

Ийгилик!

Source: www.habr.com

Комментарий кошуу