ืืขืจ ืกืืฃ ืคืื ืงืกื ืขืืจ ืฉืืืฆื ืืื ืืขืคึฟืืจื ืืืจ ืขืืืขืืข ืฆืึธืจืขืก ืืื ืื ืืขืฆืืข ืืขืงืก ืืืฉืื. (ืืื ืื ืึทืืืืขื ื ืคืื OpenSUSE 15.1 ืืืืฃ ืืืื ืืขืกืงืืึทืคึผืก: ืืื Xneur ืขื ืืืืึทืื, Windows ืคืึทืจืืืจื ืคืึธืงืืก ืืื ืคืืืงืขืจ ืืึธืื ืข ืืื ืฆืืื ืืื ืงืืึทืืืืึทืืืจ ืึทืจืืึทื ืฉืจืืึทื).
"ืึธื, ืคืึทืจืฉืืืื ืขืก, ืืื ืกืืึทืจืืขื ืืืืคึผืื ื ืืื ืืขื ืืืืจืขืื ืืืืกืืืื ืืืืืขืจ" - ืืื ืืืื ืึทืจืืขื ืืึธืก ืืึทืคึผืึทื ื ืึธืจื ืืื ืึธืคื. ืืื ืขืก ืืื ื ืืฉื ืืืืื ืขืคึผืขืก positive.
ืืื ืืขืจ ืืขืืืืงืขืจ ืฆืืื, ืืื (ืืื ืึท ืคึผืืึทื ืื ืืฉืขื ืืจ) ืงืขื ืขื ืืึทื ืฅ ืงืืืจ ืคืึธืจืืืืืจื ืืืึธืก ืืื ืืืืื. ืึธืืขืจ ืืื ืืขืืืืื (ืขืจืฉืืขืจ ืคึฟืื Punto Switcher, ืืื ืืขืจื ืึธื, ืืึทื ืง ืฆื Windows Vista, ืืขืกืึธืฃ ืืึทืฉืืืืขื ืฆื ืืื ืืงืก ืคึฟืื Xneur) ืคึผืื ืงื ืืืื ืืึทื. ืืืืื ืืืื ืืขืืขื ืึทื ืื ืืืกื ืืืืฃ ืืขื ืขืงืจืึทื ืืื ืืื ืื ืืืืจืขืื ืืืืกืืืื (ืืึธืก ืืืืฉืึทืืืึทืื ืืึทืคึผืึทื ื ืืื ืื ืกืืฃ ืคืื ืืืืคึผืื ื ืึท ื ืืึท ืืืึธืจื), ืกืืึทืืคึผ ืืืืฃ "ืคึผืึธื / ืืจืขืื". ืืื ืืึทืงืืืขื ืืืึธืก ืืืจ ืืขืืจืืงื.
ืืื ืืขื ืืึธืืขื ื, ืื ืคึผืจืึธืืืงื ืืื ืื ืึธืคึผืืืืึทื (ืคึฟืื ืืืื ืคืื ื ืคืื ืืืื ืื ื) ืคืึทื ืืงืฉืึทื ืึทืืืื / ืงืึทืืคึผืืขืงืกืืื ืคืึทืจืืขืืืขื ืืฉ. ืขืก ืืื ืฆืืื ืฆื ืืืืื.
TL.DR
ืขืก ืืืขื ืืืื ืึทืืข ืกืึธืจืฅ ืคืื ืืขืื ืืฉ ืืขืืึทืืืก ืฉืคึผืขืืขืจ, ืึทืืื ืขืจืฉืืขืจ -
ืืขืจืืืืึทื ืื ืคืืืืขื ืืข ื ืึทืืืจ ืืื ืฉืืืขืจ ืงืึธืืขื:
- "ืคึผืึธืืข / ืืจืขืื": ืืึทืงืกืคึผืืืก ืื ืืขืฆืืข ืืืึธืจื, ืกืืืืืฉืื ืื ืืืืกืืืื ืืื ืื ืึทืงืืืื ืคึฟืขื ืฆืืขืจ (ืฆืืืืฉื 0 ืืื 1) ืืื ืืืื ืืืืืขืจ.
- "ืืื ืงืก ืงืืจื ืึธื ืขืคึผืขืก": ืกืืืืืฉืื ืื ืืืืกืืืื ืืื ืื ืึทืงืืืื ืคึฟืขื ืฆืืขืจ (ืฆืืืืฉื 0 ืืื 1).
- "ืืื ืงืก ืฉืืคื ืึธื ืขืคึผืขืก": ืืืจื ืก ืืืืฃ ืืืืกืืืื ื ืื 0 ืืื ืื ืึทืงืืืื ืคึฟืขื ืฆืืขืจ.
- "ืจืขืื ืฉืืคื ืึธื ืขืคึผืขืก": ืืืจื ืก ืืืืฃ ืืืืกืืืื ื ืื 1 ืืื ืื ืึทืงืืืื ืคึฟืขื ืฆืืขืจ.
ืคืื ืืืฆื ืืืืฃ ืืื ืคึผืืึทื ืฆื ืงืึทืกืืึทืืืื ืื ื ืึทืืืจ. ืึธื ืืึทืืขืจืงืื ืืขื, ืขืก ืืื ื ืืฉื ืืฉืืงืึทืืืข (ืืื ืืื ืืื ืืื ืืื ืกืืึท ืืื ืกืืึท). ืืื ืืืืื ืื ืืืืฃ Habrรฉ ืืืขื ืืืื ืืขื ืื ืคืจืืฆืขื ื ืคืื ืืขื ืขืืื ืืื ืขื ืืืืข ืคืจืืืืขืืขื.
ื ื ืืืืึทื ืืื ืื ืงืจืึทื ื ืืืขืจืกืืข, ืื ืงืืืืึธืืืขืจ ืืื ืึทืืึทืืฉื ืฆื "/dev/input/", xswitcher ืืืื ืืืื ืืึธื ืืฉื ืืื ืืืึธืจืฆื ืจืขืื:
chown root:root xswitcher
chmod +xs xswitcher
ืืืืข ืืึธื: ืืขืจ ืืึทืืืฆืขืจ ืคืื ืืขืจ ืืขืงืข ืืื suid ืืืื ืืืื ืืืึธืจืฆื, ืืืืึทื ืืืขืจ ืขืก ืื ืืื ืื ืืึทืืืฆืขืจ ืืืขื ืืืื ืคืืจืืืื ืืืขื ืืื ืกืืื ืืื ืกืืึทืจืืึทืคึผ.
ืคึผืึทืจืึทื ืึธืืืก (ืืื ืืื ืงืืื ืืืกื ืขื) ืงืขื ืขื ืงืืึธืื ืคืื
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
ืืืื ืึทืืืึธืกืืึทืจื ืฆื ืืขื (ืืืคึผืขื ืืื ื ืืืืฃ ืืข).
ืขืก ืึทืจืืขื, "ืืื ื ืืฉื ืคืจืขืื ืคึฟืึทืจ ืงืึทืฉืข" (โ30 ืกืขืงืื ืืขืก ืงืคึผื ืคึผืขืจ ืืึธื, โ12 ืื ืืื ืจืกืก).
ืคืจืืื
ืืืฆื - ืื ืคืจืืื.
ืื ืืื ืฆืข ืจืืคึผืึทืืึทืืึธืจื ืืื ืืืืืขืก ืืขืืึทืงืืืืึทื ืฆื ืืืื ืืืืืื ื ืคึผืจืืืขืงื, ืืื ืืื ืืื ืฆื ืคืืื ืฆื ืึธื ืืืืื ืื ืื ืืขืจ ืืืื ืขืจ. ืึทืืื, ืึทืืฅ ืืื ืคึผืืืื ืึทืจืืืฃ (ื ืึธืจ ืืื ืคืึธืืืขืจืก) ืืื ืืืืขืงื ืืืจื AGPL ("ืคืึทืจืงืขืจื ืคึผืึทืืขื ื").
ืื ืงืกืกืืืืืืฉืขืจ ืงืึธื ืืื ืืขืฉืจืืื ืืื ืืึธืืึทื ื, ืืื ืืื ืืืึทื ืื ืงืืืืฉืึทื ื ืคืื C. ืขืก ืืื ืื ืืขื ืืืขื ืึทื ืืขืจ ืฆืืืึทื ื ืืืขื ืจืขืืืืืึทื ืืื ืืขืจ ืืื ืืกืืขืจ ืกืืืข ืคืื โโืื (ืึทืืื ืืืืึทื ืขืก ืืื). ืืฉืขืช ืืืื ืืืื ืื ื ืื ืคืืืืงืืื ืฆื ืคืึทืจืืื ืื ืืืึธืก ืืื ืคืขืื ืืืง ืืื ืงืืึธ.
ืืขืจ ืืขืงืกื ืึผืืื ืืึทืืขืจืงืื ืืขื ืืืขืื ืืื ืขืก ืืื ืืึทืจืึธืื ืืื ืืืึธืก. ืืืืึทื ืื ืงืกื ืขืืจ ืงืึธื "ืืื ื ืืฉื ืื ืกืคึผืืจืืจื ืืืจ", ืืื ืืขื ืืืขื ืขืก ืืื ืึท ืกืืึทืจืืื ื ืคืื ื
ื ืืฆื "/dev/input/" ืืื ืืืืืข ืืืึทื ืึทืืืืึทื ืืืืืฉืื (ืึทืืฅ ืืื ืงืขื ืืืง, ืึทืจืืึทื ืืขืจืขืื ื ืื ืืขืืจืืงื ืึทืืืึธ ืืืืขืจืืืจื ืฉืืืกื) ืืื ืืืกืึทืืืืึทื ืืืืืฉืื. ืื ืืกืจืื ืืช ืืขื ืขื:
- ืึทืืืึธ ืืืืขืจืืืจื (ืืขืฉืขืขื ืืฉื ืืื ืงืึธื "2") ืืื ื ืืฉื ืงืึธืจืึทืืืืืึทื ืืื ืืืขืจืืึทืืขืจืื ื ืืื X.
- ืึทืจืืึทื ืฉืจืืึทื ืืืจื X11 ืื ืืขืจืคืืืกืื ืืื ื ืื ืงืขื ืืืง (ืืึธืก ืืื ืืื VNC ืึทืจืืขื, ืคึฟืึทืจ ืืืึทืฉืคึผืื).
- ืืึทืจืคึฟื ืืืึธืจืฆื.
ืืืืฃ ืื ืื ืืขืจืข ืืึทื ื, ืขืก ืืื ืืขืืืขื ืฆื ืึทืืึธื ืืจื ืฆื X events ืืืจื "XSelectExtensionEvent ()". ืืืจ ืงืขื ืขื ืงืืงื ืืื
ืืขืจ "ืคืึทืจืงืขืจื" ืจืขืืืืืึทื ืืื ืืขืจืืืืึทื ืืขืืืื ืืืจื ืกืงืจืืื ื ืื ืืืืจืืืึทื ืงืืึทืืืืึทืืืจ. ืืึทื ืง ืฆื ืืขื ืืืืจ ืคืื keybd_event, ืึธืืขืจ ืื ืึทืืกืืจืึทืงืฆืืข ืืึธืจื ืืื ืฆื ืืืื-ืืืจืื ืืื ืืืขื ืืึธืื ืฆื ืืืื ืจืืืึทื ืืืืึทืืขืจ. ืคึฟืึทืจ ืืืึทืฉืคึผืื, ืืื ื ืืฆื ืื ืจืขืื Win ืฉืืืกื ืฆื ืืืืกืงืืืึทืื ืื 3 ืจืืืขืจื. ืืื ืืืืื ืื ืืื ืงืก ืืขืืืื ืขื ืืื ืืจืึทื ืกืืืืืขื ืฆืืจืืง.
ืืึทืืืืกื ืืึทืื
- ืืืจ ืืึธื ื ืื ืืืืกื ืขืคึผืขืก ืืืขืื "ืงืึธืืคึผืึธืกืืืข" ืึทืจืืึทื ืฉืจืืึทื (ืืืึทืฉืคึผืื: ยฝ). ืขืก ืืื ื ืื ืืืจืฃ ืจืขืื ืืืฆื.
- ืืืจ ืืขื ืขื ืคึผืืืืื ื ืื ืจืขืื ืืขืืืื ืขื ืื ืงืขืจืขืงืืื. ืืื ืืืื ืคืึทื, ืขืก ืืจืืืงืก ืื ืืจืึธืคึผ.
- ืขืก ืืื ืงืืื ืงืืึธืจ ืึทืจืืึทื ืฉืจืืึทื ืคึผืึทืจืกืื ื. ืึทื ืฉืืึธื, ืขืก ืืขื ืขื ืขืืืขืืข ืคืึทื ืืงืฉืึทื ื: ืคืึทืจืืืืึทืื (), CtrlSequence (), RepeatSequence (), SpaceSequence (). ืืึทื ืง
nsmcan ืคึฟืึทืจ ืืืื ืืึธืจื: ืงืขืจืขืงืืึทื ืขืก ืืื ืื ืงืึธื ืืื ืืึธ. ืืื ืึท ืืืืขืจ ืืึทืฉืืึธืขืก, ืืืจ ืงืขื ืขื ืืึทืคึผื ืืึทืื ืืืขื ืจืืคึผืืืืกืื ื.
ืืื ืืขื ืคืื ื ืืื ืืึธื ื ืื ืืืืกื "ืืื ืฆื" ืืื ืืืึธืื ืืึทืืจืืกื ืงืืื ืคึฟืืจืืืืื. - (ืืื ืืึธื) ืงืึทืืคึผืขืืืืืื ื ืืฆื ืคืื ืืฉืึทื ืึทืื (ืงืืืึธืจื ืขืืืขื ื, ืืืกืข ืขืืืขื ื).
ืกืึธืฃ
ืืขืจ ืงืึธื ืืื ืื ืกืืืคึผืืึทืกื ืคึผืจืึทืกืืืืฉืขืจืึทื. ืืื ื ืึทืจืืฉ ืืื ืืืจ. ืึทืืื, ืืื ืืึทื ืคืขื ืขื ืืื ืืื ืืขืจ ืืึธืคืขื ืื ื ืึทื ืึผืืขื ืืขืืขืจ ืืขืื ืืงืขืจ ืืืขื ืงืขื ืขื ืฆื ืคืึทืจืขื ืืืงื ืืืึธืก ืขืจ ืืืื. ืืื ืืึทื ืง ืฆื ืืขื, ืืขื ืคึผืจืึธืืืงื ืืืขื ื ืืฉื ืืืืงืืืขื ืึธื ืฉืืืฆื, ืืื ืจืืึฟ ืคึฟืึทืจ ืฉืคึผืึทืก.
ืืื ืืืืง!
ืืงืืจ: www.habr.com