เบเบฒเบเบชเบดเปเบเบชเบธเบเบเบญเบเบเบฒเบเบชเบฐเบซเบเบฑเบเบชเบฐเบซเบเบนเบ xneur เปเบเปเปเบฎเบฑเบเปเบซเปเบเปเบญเบเบเบธเบเบเปเบฅเบฐเบกเบฒเบเปเบเปเบฅเบเบฐเบซเบปเบเปเบเบทเบญเบเบเปเบฒเบเบกเบฒ. (เบเบฑเบเบเบฒเบเบกเบฒเปเบเบดเบเบเบญเบ OpenSUSE 15.1 เปเบเบเบญเบกเบเบดเบงเปเบเบตเบเบฑเปเบเปเบเบฐเบเบญเบเบเปเบญเบ: เบเปเบงเบ xneur เปเบเบตเบเปเบเป, windows เบชเบนเบเปเบชเบเบเบธเบเบชเบธเบกเปเบฅเบฐ flicker เบเบฐเบซเบฅเบปเบเปเบเปเบงเบฅเบฒเบเบตเปเบกเบตเบเบฒเบเบเปเบญเบเปเบเปเบเบเบดเบก).
"เปเบญเป, เบเปเบญเบฐเปเบ, เบเปเบญเบเปเบฅเบตเปเบกเบเบดเบกเบฎเบนเบเปเบเบเบเบตเปเบเปเปเบเบทเบเบเปเบญเบเบญเบตเบเปเบเบทเปเบญเบซเบเบถเปเบ" - เปเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบญเบเบเปเบญเบเบกเบฑเบเปเบเบตเบเบเบทเปเบเปเบฅเบทเปเบญเบเปเปเบฅเบทเปเบญเบเป. เปเบฅเบฐเบกเบฑเบเบเปเปเปเบเปเปเบเบตเปเบกเบซเบเบฑเบเปเบเบเบฒเบเบเบงเบ.
เปเบเปเบงเบฅเบฒเบเบฝเบงเบเบฑเบ, เบเปเบญเบ (เปเบเบฑเบเบงเบดเบชเบฐเบงเบฐเบเบญเบเบญเบญเบเปเบเบ) เบชเบฒเบกเบฒเบเบชเปเบฒเบเบชเบดเปเบเบเบตเปเบเปเบญเบเบเปเบญเบเบเบฒเบเปเบเปเบขเปเบฒเบเบเบฑเบเปเบเบ. เปเบเปเบเปเบญเบเบเปเบญเบเบเบฒเบ (เบเปเบฒเบญเบดเบเบเบฒเบ Punto Switcher, เปเบฅเบฐเบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ, เบเบญเบเปเบเบเบฑเบ Windows Vista, เบชเบธเบเบเปเบฒเบเปเบเปเบเปเบฝเบเปเบ Linux, เบเบฒเบ xneur) เบชเบดเปเบเบซเบเบถเปเบเปเบเปเป. เปเบเบเบฎเบนเปเบงเปเบฒเบเบตเปเปเบซเบเบทเปเบญเปเบเบซเบเปเบฒเบเปเปเบกเปเบเบขเบนเปเปเบเบฎเบนเบเปเบเบเบเบตเปเบเปเปเบเบทเบเบเปเบญเบ (เบกเบฑเบเบกเบฑเบเบเบฐเปเบเบตเบเบเบทเปเบเปเบเบเบญเบเบเปเบฒเบเบเบญเบเบเบฒเบเบเบดเบกเบเปเบฒเปเบซเบกเป), เบขเบธเบเบขเบนเป "เบขเบธเบเบเบปเปเบงเบเบฒเบง / เบขเบธเบ". เปเบฅเบฐเปเบเปเบฎเบฑเบเบชเบดเปเบเบเบตเปเบเปเบฒเบเบเบดเบก.
เปเบเปเบงเบฅเบฒเบเบตเป, เบเบฐเบฅเบดเบเบเบฐเบเบฑเบเบกเบตเบญเบฑเบเบเบฒเบชเปเบงเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบ / เบเบงเบฒเบกเบเบฑเบเบเปเบญเบเบเบตเปเบเบตเบเบตเปเบชเบธเบ (เบเบฒเบเบเบฑเบเบชเบฐเบเบฐเบเบญเบเบเปเบญเบ). เบกเบฑเบเปเบเบฑเบเปเบงเบฅเบฒเบเบตเปเบเบฐเปเบเปเบเบเบฑเบ.
TL.DR
เบกเบฑเบเบเบฐเบกเบตเบเบธเบเบเบฐเปเบเบเบเบญเบเบฅเบฒเบเบฅเบฐเบญเบฝเบเบเปเบฒเบเบงเบดเบเบฒเบเบฒเบเบเปเปเบกเบฒ, เบเบฑเปเบเบเบฑเปเบเบเปเบฒเบญเบดเบ -
เปเบเบเบฑเบเบเบธเบเบฑเบเบเบถเบเบเบดเบเปเบฒเบเปเปเปเบเบเบตเปเปเบกเปเบ hardcoded:
- โPause/Breakโ: backspaces เบเปเบฒเบชเบธเบเบเปเบฒเบ, เบชเบฐเบซเบผเบฑเบเบเบฒเบเบเบฑเบเบงเบฒเบเบขเบนเปเปเบเบเปเบญเบเบขเปเบฝเบกเบเบตเปเปเบเปเปเบเป (เบฅเบฐเบซเบงเปเบฒเบ 0 เปเบฅเบฐ 1) เปเบฅเบฐเปเบเบซเบฒเบญเบตเบเปเบเบทเปเบญเบซเบเบถเปเบ.
- โCtrl เบเปเบฒเบเปเบเบเบเปเปเบกเบตเบญเบฑเบเปเบเปเบฅเบตเบโ: เบชเบฐเบซเบผเบฑเบเบเบฒเบเบเบฑเบเบงเบฒเบเบขเบนเปเปเบเบเปเบญเบเบขเปเบฝเบกเบเบตเปเปเบเปเบเบฒเบ (เบฅเบฐเบซเบงเปเบฒเบ 0 เปเบฅเบฐ 1).
- โเบเปเบฒเบ Shift เปเบเบโเบเปเปโเบกเบตโเบซเบเบฑเบโ: เปเบเบตเบโเบเบฒเบโเบเบฑเบโเบงเบฒเบโเปเบฅเบ 0 เปเบโเบเปเบญเบโเบขเปเบฝเบกโเปเบเบทเปเบญเบโเปเบซเบงโ.
- โเบเบงเบฒ Shift เปเบเบโเบเปเปโเบกเบตโเบซเบเบฑเบโ: เปเบเบตเบโเบเบฒเบโเบเบฑเบโเบงเบฒเบโเบญเบฑเบโเบเบฑเบ 1 เปเบโเบเปเบญเบโเบขเปเบฝเบกโเปเบเบทเปเบญเบโเปเบซเบงโ.
เบเบฒเบเบเบตเปเบเปเบฒเบเบฐเปเบเบปเปเบฒเบงเบฒเบเปเบเบเบเบตเปเบเบฐเบเบฑเบเปเบเปเบเบเบถเบเบเบดเบเปเบฒ. เบเปเบฒเบเปเปเบกเบตเบเปเบฒเบเบดเบเบปเบก, เบกเบฑเบเบเปเปเบซเบเปเบฒเบชเบปเบเปเบ (เบเปเบญเบเบเบตเบเบฑเบเบกเบฑเบเบขเปเบฒเบเปเบเบเปเปเบเบฒเบก). เบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเบทเปเบญเบงเปเบฒเปเบHabรฉเบเบฐเบกเบตเบญเบฑเบเบเบฒเบชเปเบงเบเบเบฝเบเบเปเบเบญเบเบเบนเปเบเบปเบกเบเบตเปเบกเบตเบเบฑเบเบซเบฒเบเบตเปเบเปเบฒเบเบเบทเบเบฑเบ.
NB เปเบเบทเปเบญเบเบเบฒเบเบงเปเบฒ เปเบเบชเบฐเบเบฑเบเบเบฐเบเบธเบเบฑเบ, keylogger เปเบกเปเบเบเบดเบเบเบฑเบ "/dev/input/", xswitcher เบเปเบญเบเปเบเปเบฎเบฑเบเบเบฒเบเปเบเบตเบเบเบปเบงเบเปเบงเบเบชเบดเบเบเบดเบเบญเบเบฎเบฒเบ:
chown root:root xswitcher
chmod +xs xswitcher
เบเบฐเบฅเบธเบเบฒเบชเบฑเบเปเบเบ: เปเบเบปเปเบฒเบเบญเบเปเบเบฅเปเบเบตเปเบกเบต suid เบเปเบญเบเปเบเบฑเบเบฎเบฒเบ, เปเบเบฒเบฐเบงเปเบฒ เปเบเปเบเบฑเบเปเบเบปเปเบฒเบเบญเบเบเบฐเบเบทเบเบเปเบฝเบเปเบเบฑเบ suid เปเบเปเบงเบฅเบฒเปเบฅเบตเปเบกเบเบปเปเบ.
Paranoids (เบเปเบฒเบเบฐเปเบเบปเปเบฒเบเปเปเบกเบตเบเปเปเบเบปเบเปเบงเบฑเปเบ) เบชเบฒเบกเบฒเบ clone เบเบฒเบ
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).
เบกเบฑเบเปเบฎเบฑเบเบงเบฝเบ, "เบเปเปเปเบเปเบเป porridge" (โ30 เบงเบดเบเบฒเบเบต CPU เบเปเปเบกเบทเป, โ12 MB เปเบ RSS).
เปเบเบดเปเบเบฅเบฒเบเบฅเบฐเบญเบฝเบ
เปเบเบเบฑเบเบเบธเบเบฑเบ - เบฅเบฒเบเบฅเบฐเบญเบฝเบ.
เบเปเบญเบเปเบเบฑเบเบกเปเบฝเบเบเบฑเบเปเบปเบเปเบกเปเบเปเบเปเบญเบธเบเบดเบเบเบปเบเปเบเบทเปเบญเปเบเบเบเบฒเบเบชเบฑเบเบฅเปเบฝเบเบเบญเบเบเปเบญเบ, เปเบฅเบฐเบเปเบญเบเบเบตเปเบเปเบฒเบเปเบเบตเบเปเบเบเบตเปเบเบฐเปเบฅเบตเปเบกเบญเบฑเบเบญเบทเปเบ. เบเบฑเปเบเบเบฑเปเบ, เบเบธเบเบชเบดเปเบเบเบธเบเบขเปเบฒเบเบเบทเบเบฅเบงเบเบฅเบงเบก (เบเบฝเบเปเบเปเบขเบนเปเปเบเปเบเบเปเบเบต) เปเบฅเบฐเบเบงเบกเปเบญเบปเบฒเปเบเบ AGPL ("เบชเบดเบเบเบดเบเบฑเบเบเปเบญเบเบเบฑเบ").
เบฅเบฐเบซเบฑเบ xswitcher เบเบทเบเบเบฝเบเปเบเบฑเบ golang, เบกเบตเบเบฒเบเบฅเบงเบกเปเบญเบปเบฒ C. เบซเบเปเบญเบเบเบตเปเบชเบธเบ, เบกเบฑเบเบชเบปเบกเบกเบธเบเบงเปเบฒเบงเบดเบเบตเบเบฒเบเบเบตเปเบเบฐเปเบฎเบฑเบเปเบซเปเบกเบตเบเบงเบฒเบกเบเบฐเบเบฒเบเบฒเบกเบซเบเปเบญเบเบเบตเปเบชเบธเบ (เบกเบฒเบฎเบญเบเบเบฑเบเบเบธเบเบฑเบเบกเบฑเบเบกเบต). เปเบเบเบฐเบเบฐเบเบตเปเบฎเบฑเบเบชเบฒเบเบงเบฒเบกเบชเบฒเบกเบฒเบเปเบเบเบฒเบเปเบเบทเปเบญเบกเบเปเปเบชเบดเปเบเบเบตเปเบเบฒเบเบซเบฒเบเปเบเปเบเบเปเบเป cgo.
เบเปเปเบเบงเบฒเบกเบกเบตเบเปเบฒเปเบซเบฑเบเบเปเบฝเบงเบเบฑเบเบเปเบญเบเบเบตเปเบกเบฑเบเบเบทเบเบขเบทเบกเบกเบฒเบเบฒเบเปเบฅเบฐเบเปเบญเบเบซเบเบฑเบ. เปเบเบทเปเบญเบเบเบฒเบเบงเปเบฒ เบฅเบฐเบซเบฑเบ xneur "เบเปเปเปเบเปเบเบปเบเปเบเบเปเบญเบ", เบเปเบญเบเปเบญเบปเบฒเบกเบฑเบเปเบเบฑเบเบเบธเบเปเบฅเบตเปเบกเบเบปเปเบ
เบเบฒเบเปเบเป "/dev/input/" เบกเบตเบเบฑเบเบเปเปเบเบตเบเบญเบเบกเบฑเบ (เบเบธเบเบขเปเบฒเบเปเบกเปเบเปเบซเบฑเบเปเบเป, เบฅเบงเบกเบเบฑเบเบเบธเปเบกเบเบปเบเบเปเบณเบญเบฑเบเบเบฐเปเบเบกเบฑเบ) เปเบฅเบฐเบเปเปเปเบชเบ. เบเปเปเปเบชเบเปเบกเปเบ:
- เปเบฎเบฑเบเบเปเบณเบญเบฑเบเบเบฐเปเบเบกเบฑเบ (เปเบซเบเบเบฒเบเบเบตเปเบกเบตเบฅเบฐเบซเบฑเบ โ2โ) เบเปเปเบเปเบฝเบงเบเปเบญเบเบเบฑเบเบเบฒเบเบเปเปเบฒเบเบทเบเบเบฑเบ x.
- เบเบฒเบเบเปเบญเบเบเปเปเบกเบนเบเบเปเบฒเบเบญเบดเบเปเบเบตเปเบเบ X11 เปเบกเปเบเบเปเปเปเบซเบฑเบเปเบเป (เบเบตเปเปเบกเปเบเบงเบดเบเบตเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบญเบ VNC, เบเบปเบงเบขเปเบฒเบ).
- เบเปเบญเบเบเบฒเบเบฎเบฒเบ.
เปเบเบเบฒเบเบเบปเบเบเบฑเบเบเปเบฒเบก, เบกเบฑเบเปเบเบฑเบเปเบเปเบเปเบเบตเปเบเบฐเบเบญเบเปเบซเบเบเบฒเบ X เบเปเบฒเบ "XSelectExtensionEvent()". เปเบเบปเปเบฒเบชเบฒเบกเบฒเบเปเบเบดเปเบเปเบเป
เบเบปเบเบเบฐเบฅเบดเบ "เบเบตเปเบเบเบฑเบเบเบฑเบ" เบเบฐเบเบธเบเบฑเบเปเบกเปเบเปเบฎเบฑเบเปเบเบเบเปเบฒเบเบเบฒเบ screwing เปเบเปเบเบเบดเบก virtual. เบเปเบเบญเบเปเบเบเบฑเบเบเบนเปเบเบฝเบเบเบญเบ keybd_event, เปเบเปเบชเบดเปเบเบเบตเปเบเปเปเบกเบตเบเบปเบงเบเบปเบเบกเบตเบฅเบฐเบเบฑเบเบชเบนเบเปเบเบตเบเปเบเปเบฅเบฐเบเบฐเบเปเบญเบเบเบทเบเปเบฎเบฑเบเปเบซเบกเปเบเบทเปเบกเบญเบตเบ. เบเบปเบงเบขเปเบฒเบ, เบเปเบญเบเปเบเปเบเบธเปเบก Win เบเบตเปเบเบทเบเบเปเบญเบเปเบเบทเปเบญเปเบฅเบทเบญเบเปเบเบงเบเบต 3. เปเบฅเบฐเบเบฝเบเปเบเป Win เบเปเบฒเบเบเบทเบเบชเบปเปเบเบเบฑเบเบเบทเบ.
เบเบฑเบเบเบตเปเบฎเบนเปเบเบฑเบ
- เบเบงเบเปเบฎเบปเบฒเบเปเปเบฎเบนเปเบซเบเบฑเบเบเปเบฝเบงเบเบฑเบเบเบฒเบเบเปเบญเบเบเปเปเบกเบนเบ "เบเบฐเบเบญเบ" (เบเบปเบงเบขเปเบฒเบ: ยฝ). เบกเบฑเบเบเปเปเบเปเบฒเปเบเบฑเบเปเบเบเบฑเบเบเบธเบเบฑเบ.
- เบเบงเบเปเบฎเบปเบฒเบเปเบฒเบฅเบฑเบเบซเบผเบตเปเบ Win เบเบตเปเบเบทเบเบเปเบญเบเบเปเปเบเบทเบเบเปเบญเบ. เปเบเบเปเบฅเบฐเบเบตเบเบญเบเบเปเบญเบ, เบกเบฑเบเบเปเบฒเบฅเบฒเบเบเบฒเบเปเบเบฑเปเบเบซเบเบฑเบเปเบชเป.
- เบเปเปโเบกเบตโเบเบฒเบโเบงเบดโเปเบเบฒเบฐโเบเบฒเบโเบเปเบญเบโเบเปเปโเบกเบนเบโเบเบตเปโเบเบฐโเปเบเปเบโ. เปเบเบเบเบตเปเบเบฐ, เบกเบตเบซเบผเบฒเบเบซเบเปเบฒเบเบตเป: เบเบฝเบเบเบฝเบ(), CtrlSequence(), RepeatSequence(), SpaceSequence(). ะกะฟะฐัะธะฑะพ
nsmcan เบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบนเปเบฅเบเบญเบเบเปเบฒเบ: เปเบเปเปเบเบกเบฑเบเบขเบนเปเปเบเบฅเบฐเบซเบฑเบเปเบฅเบฐเบเบตเปเบเบตเป. เบเปเบงเบเบเบงเบฒเบกเปเบเบฑเบเปเบเปเบเปเบเบตเปเปเบเปเบเบญเบ, เบเปเบฒเบเบชเบฒเบกเบฒเบเบเบฑเบเปเบกเบเปเบกเปเปเบเปเบงเบฅเบฒเบเปเบฝเบเปเบเบ.
เปเบเบเบธเบเบเบตเปเบเปเบฒเบเบฐเปเบเบปเปเบฒเบเปเปเบฎเบนเป "เบงเบดเบเบตเบเบฒเบ" เปเบฅเบฐเบเบดเบเบเบตเบเปเบญเบเบฎเบฑเบเบเปเบฒเปเบเบฐเบเปเบฒเปเบเป. - (เปเบญเปโเบเบฐโเปเบเบปเปเบฒ) เบเบฒเบเบเปเบฒเปเบเปเบเปเบญเบเบเบฒเบเบเบฒเบเปเบเปเบเบเบฑเบ (keyboardEvents, miceEvents).
เบชเบฐเบซเบฅเบธเบ
เบฅเบฐเบซเบฑเบเปเบกเปเบเบเบฑเปเบเบเบญเบเบเบตเปเบเปเบฒเบเบเบฒเบเบเบตเปเบชเบธเบ. เปเบฅเบฐเปเบเปเบเบทเบเปเบญเบ. เบเบฑเปเบเบเบฑเปเบ, เบเปเบฒเบเบฐเปเบเบปเปเบฒเบเบปเบเบเปเบญเบเบเบปเบเปเบญเบเบเปเบงเบเบเบงเบฒเบกเบซเบงเบฑเบเบงเปเบฒเปเบเบทเบญเบเบงเปเบฒเบเบฑเบเบงเบดเบเบฒเบเบฒเบเบเบฐเบชเบฒเบกเบฒเบเปเบฎเบฑเบเบชเปเบฒเปเบฅเบฑเบเบชเบดเปเบเบเบตเปเบฅเบฒเบงเบเปเบญเบเบเบฒเบ. เปเบฅเบฐเบเปเบเบญเบเปเบเบเบตเป, เบเบฐเบฅเบดเบเบเบฐเบเบฑเบเบเบตเปเบเบฐเบเปเปเบเบฒเบเปเบเบเบเปเปเบกเบตเบเบฒเบเบชเบฐเบซเบเบฑเบเบชเบฐเบซเบเบนเบ, เปเบเบฑเปเบเบเบฝเบงเบเบฑเบเบเบงเบฒเบกเบกเปเบงเบเบเบตเปเบชเบธเบ.
เปเบเบเบเบต!
เปเบซเบผเปเบเบเปเปเบกเบนเบ: www.habr.com