Punto Switcher-แƒ˜แƒก แƒแƒฎแƒแƒšแƒ˜ แƒแƒœแƒแƒšแƒแƒ’แƒ˜ แƒšแƒ˜แƒœแƒฃแƒฅแƒกแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก: xswitcher

Xneur-แƒ˜แƒก แƒ›แƒฎแƒแƒ แƒ“แƒแƒญแƒ”แƒ แƒ˜แƒก แƒ“แƒแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒแƒ› แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒฃแƒšแƒ˜ แƒขแƒแƒœแƒฏแƒ•แƒ แƒ’แƒแƒ›แƒแƒ˜แƒฌแƒ•แƒ˜แƒ แƒ‘แƒแƒšแƒ แƒ”แƒฅแƒ•แƒกแƒ˜ แƒ—แƒ•แƒ˜แƒก แƒ’แƒแƒœแƒ›แƒแƒ•แƒšแƒแƒ‘แƒแƒจแƒ˜. (แƒฉแƒ”แƒ›แƒก แƒ“แƒ”แƒกแƒ™แƒขแƒแƒžแƒ–แƒ” OpenSUSE 15.1-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒกแƒ•แƒšแƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’: Xneur แƒฉแƒแƒ แƒ—แƒฃแƒšแƒ˜แƒ, แƒคแƒแƒœแƒฏแƒ แƒ”แƒ‘แƒ˜ แƒ™แƒแƒ แƒ’แƒแƒ•แƒ”แƒœ แƒคแƒแƒ™แƒฃแƒกแƒก แƒ“แƒ แƒ“แƒ แƒแƒ—แƒ แƒ’แƒแƒœแƒ›แƒแƒ•แƒšแƒแƒ‘แƒแƒจแƒ˜ แƒชแƒ˜แƒ›แƒชแƒ˜แƒ›แƒ”แƒ‘แƒ”แƒœ แƒ›แƒฎแƒ˜แƒแƒ แƒฃแƒšแƒแƒ“ แƒ™แƒšแƒแƒ•แƒ˜แƒแƒขแƒฃแƒ แƒ˜แƒก แƒจแƒ”แƒงแƒ•แƒแƒœแƒ˜แƒ—).

"แƒแƒฐ, แƒฏแƒแƒœแƒ“แƒแƒ‘แƒ, แƒ˜แƒกแƒ”แƒ• แƒ“แƒแƒ•แƒ˜แƒฌแƒงแƒ” แƒแƒ แƒแƒกแƒฌแƒแƒ แƒ˜ แƒ’แƒแƒœแƒšแƒแƒ’แƒ”แƒ‘แƒ˜แƒ— แƒแƒ™แƒ แƒ”แƒคแƒ" - แƒฉแƒ”แƒ›แƒก แƒœแƒแƒ›แƒฃแƒจแƒ”แƒ•แƒแƒ แƒจแƒ˜ แƒ”แƒก แƒฃแƒฎแƒแƒ›แƒกแƒ˜ แƒฎแƒจแƒ˜แƒ แƒแƒ“ แƒฎแƒ“แƒ”แƒ‘แƒ. แƒ“แƒ แƒ”แƒก แƒแƒ  แƒ›แƒแƒขแƒ”แƒ‘แƒก แƒ แƒแƒ˜แƒ›แƒ” แƒžแƒแƒ–แƒ˜แƒขแƒ˜แƒฃแƒ แƒก.

Punto Switcher-แƒ˜แƒก แƒแƒฎแƒแƒšแƒ˜ แƒแƒœแƒแƒšแƒแƒ’แƒ˜ แƒšแƒ˜แƒœแƒฃแƒฅแƒกแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก: xswitcher
แƒแƒ›แƒแƒ•แƒ“แƒ แƒแƒฃแƒšแƒแƒ“, แƒ›แƒ” (แƒ แƒแƒ’แƒแƒ แƒช แƒ“แƒ˜แƒ–แƒแƒ˜แƒœแƒ”แƒ  แƒ˜แƒœแƒŸแƒ˜แƒœแƒ”แƒ แƒก) แƒจแƒ”แƒ›แƒ˜แƒซแƒšแƒ˜แƒ แƒกแƒแƒ™แƒ›แƒแƒแƒ“ แƒ›แƒ™แƒแƒคแƒ˜แƒแƒ“ แƒฉแƒแƒ›แƒแƒ•แƒแƒงแƒแƒšแƒ˜แƒ‘แƒ แƒ˜แƒก, แƒ แƒแƒช แƒ›แƒ˜แƒœแƒ“แƒ. แƒ›แƒแƒ’แƒ แƒแƒ› แƒ›แƒ” แƒ›แƒ˜แƒœแƒ“แƒแƒ“แƒ (แƒฏแƒ”แƒ  Punto Switcher-แƒ“แƒแƒœ, แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ™แƒ˜ Windows Vista-แƒก แƒฌแƒงแƒแƒšแƒแƒ‘แƒ˜แƒ—, แƒ‘แƒแƒšแƒแƒก Linux-แƒ–แƒ” แƒ’แƒแƒ“แƒแƒกแƒ•แƒšแƒ, xneur-แƒ“แƒแƒœ) แƒ–แƒฃแƒกแƒขแƒแƒ“ แƒ”แƒ แƒ—แƒ˜ แƒ แƒแƒ›. แƒ’แƒแƒแƒชแƒœแƒแƒ‘แƒ˜แƒ”แƒ แƒ”, แƒ แƒแƒ› แƒ”แƒ™แƒ แƒแƒœแƒ–แƒ” แƒœแƒแƒ’แƒแƒ•แƒ˜ แƒแƒ แƒแƒกแƒฌแƒแƒ แƒ˜ แƒ’แƒแƒœแƒšแƒแƒ’แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ (แƒ”แƒก แƒฉแƒ•แƒ”แƒฃแƒšแƒ”แƒ‘แƒ แƒ˜แƒ• แƒฎแƒ“แƒ”แƒ‘แƒ แƒแƒฎแƒแƒšแƒ˜ แƒกแƒ˜แƒขแƒงแƒ•แƒ˜แƒก แƒแƒ™แƒ แƒ”แƒคแƒ˜แƒก แƒ‘แƒแƒšแƒแƒก), แƒ“แƒแƒแƒฌแƒ”แƒฅแƒ˜แƒ— โ€žแƒžแƒแƒฃแƒ–แƒ/แƒจแƒ”แƒกแƒ•แƒ”แƒœแƒ”แƒ‘แƒโ€œ. แƒ“แƒ แƒ›แƒ˜แƒ˜แƒฆแƒ”แƒ— แƒ˜แƒก, แƒ แƒแƒช แƒ“แƒแƒ‘แƒ”แƒญแƒ“แƒ”แƒ—.

แƒแƒ› แƒ“แƒ แƒแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒžแƒ แƒแƒ“แƒฃแƒฅแƒขแƒก แƒแƒฅแƒ•แƒก แƒแƒžแƒขแƒ˜แƒ›แƒแƒšแƒฃแƒ แƒ˜ (แƒฉแƒ”แƒ›แƒ˜ แƒ’แƒแƒ“แƒ›แƒแƒกแƒแƒฎแƒ”แƒ“แƒ˜แƒ“แƒแƒœ) แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒœแƒแƒšแƒฃแƒ แƒแƒ‘แƒ/แƒกแƒ˜แƒ แƒ—แƒฃแƒšแƒ˜แƒก แƒ—แƒแƒœแƒแƒคแƒแƒ แƒ“แƒแƒ‘แƒ. แƒ’แƒแƒ–แƒ˜แƒแƒ แƒ”แƒ‘แƒ˜แƒก แƒ“แƒ แƒแƒ.

TL.DR

แƒ›แƒแƒ’แƒ•แƒ˜แƒแƒœแƒ”แƒ‘แƒ˜แƒ— แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒงแƒ•แƒ”แƒšแƒ แƒกแƒแƒฎแƒ˜แƒก แƒขแƒ”แƒฅแƒœแƒ˜แƒ™แƒฃแƒ แƒ˜ แƒ“แƒ”แƒขแƒแƒšแƒ˜, แƒแƒกแƒ” แƒ แƒแƒ› แƒฏแƒ”แƒ  - แƒ‘แƒ›แƒฃแƒšแƒ˜ "แƒจแƒ”แƒฎแƒ”แƒ‘แƒ" แƒ›แƒแƒฃแƒ—แƒ›แƒ”แƒœแƒ”แƒšแƒ—แƒแƒ—แƒ•แƒ˜แƒก.

แƒแƒ›แƒŸแƒแƒ›แƒแƒ“ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜ แƒฅแƒชแƒ”แƒ•แƒ แƒ›แƒงแƒแƒ แƒ˜ แƒ™แƒแƒ“แƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ:

  • โ€žแƒžแƒแƒฃแƒ–แƒ/แƒจแƒ”แƒกแƒ•แƒ”แƒœแƒ”แƒ‘แƒโ€œ: แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒก แƒ‘แƒแƒšแƒ แƒกแƒ˜แƒขแƒงแƒ•แƒแƒก, แƒชแƒ•แƒšแƒ˜แƒก แƒ’แƒแƒœแƒšแƒแƒ’แƒ”แƒ‘แƒแƒก แƒแƒฅแƒขแƒ˜แƒฃแƒ  แƒคแƒแƒœแƒฏแƒแƒ แƒแƒจแƒ˜ (0-แƒ“แƒแƒœ 1-แƒก แƒจแƒแƒ แƒ˜แƒก) แƒ“แƒ แƒ˜แƒกแƒ”แƒ• แƒแƒ™แƒ แƒ˜แƒคแƒ”แƒ‘แƒก.
  • โ€žแƒ›แƒแƒ แƒชแƒฎแƒœแƒ˜แƒ• Ctrl แƒแƒ แƒแƒคแƒ แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”โ€œ: แƒชแƒ•แƒšแƒ˜แƒก แƒ’แƒแƒœแƒšแƒแƒ’แƒ”แƒ‘แƒแƒก แƒแƒฅแƒขแƒ˜แƒฃแƒ  แƒคแƒแƒœแƒฏแƒแƒ แƒแƒจแƒ˜ (0-แƒ“แƒแƒœ 1-แƒก แƒจแƒแƒ แƒ˜แƒก).
  • โ€žแƒ›แƒแƒ แƒชแƒฎแƒœแƒ˜แƒ• Shift แƒแƒ แƒแƒคแƒ แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”โ€œ: แƒฉแƒแƒ แƒ—แƒแƒ•แƒก แƒ’แƒแƒœแƒšแƒแƒ’แƒ”แƒ‘แƒแƒก No. 0 แƒแƒฅแƒขแƒ˜แƒฃแƒ  แƒคแƒแƒœแƒฏแƒแƒ แƒแƒจแƒ˜.
  • โ€žแƒ›แƒแƒ แƒฏแƒ•แƒœแƒ˜แƒ• Shift แƒแƒ แƒแƒคแƒ แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”โ€œ: แƒฉแƒแƒ แƒ—แƒแƒ•แƒก แƒ’แƒแƒœแƒšแƒแƒ’แƒ”แƒ‘แƒแƒก No1 แƒแƒฅแƒขแƒ˜แƒฃแƒ  แƒคแƒแƒœแƒฏแƒแƒ แƒแƒจแƒ˜.

แƒแƒ›แƒ˜แƒ”แƒ แƒ˜แƒ“แƒแƒœ แƒ•แƒ’แƒ”แƒ’แƒ›แƒแƒ• แƒฅแƒชแƒ”แƒ•แƒ˜แƒก แƒ›แƒแƒ แƒ’แƒ”แƒ‘แƒแƒก. แƒ’แƒแƒ›แƒแƒฎแƒ›แƒแƒฃแƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”, แƒ”แƒก แƒแƒ  แƒแƒ แƒ˜แƒก แƒกแƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ (แƒ›แƒ” แƒ›แƒแƒ˜แƒœแƒช แƒ™แƒแƒ แƒ’แƒแƒ“ แƒ•แƒแƒ ). แƒ›แƒ” แƒ›แƒฏแƒ”แƒ แƒ, แƒ แƒแƒ› แƒฐแƒแƒ‘แƒ แƒ”แƒ–แƒ” แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒ›แƒกแƒ’แƒแƒ•แƒกแƒ˜ แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒ›แƒฅแƒแƒœแƒ” แƒแƒฃแƒ“แƒ˜แƒขแƒแƒ แƒ˜แƒ˜แƒก แƒกแƒแƒ™แƒ›แƒแƒ แƒ˜แƒกแƒ˜ แƒžแƒ แƒแƒชแƒ”แƒœแƒขแƒ˜.

NB แƒ˜แƒ›แƒ˜แƒขแƒแƒ› แƒ แƒแƒ› แƒ›แƒ˜แƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ” แƒ•แƒ”แƒ แƒกแƒ˜แƒแƒจแƒ˜, keylogger แƒ›แƒ˜แƒ›แƒแƒ’แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ "/dev/input/", xswitcher แƒฃแƒœแƒ“แƒ แƒ˜แƒงแƒแƒก แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜ root แƒฃแƒคแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒ—:

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 แƒ“แƒฆแƒ”แƒจแƒ˜, โ‰ˆ12 MB RSS-แƒจแƒ˜).

แƒ“แƒ”แƒขแƒแƒšแƒ”แƒ‘แƒ˜

แƒแƒฎแƒšแƒ - แƒ“แƒ”แƒขแƒแƒšแƒ”แƒ‘แƒ˜.

แƒ›แƒ—แƒ”แƒšแƒ˜ แƒกแƒแƒชแƒแƒ•แƒ˜ แƒ—แƒแƒ•แƒ“แƒแƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒแƒ“ แƒฉแƒ”แƒ›แƒก แƒจแƒ˜แƒœแƒแƒฃแƒ  แƒชแƒฎแƒแƒ•แƒ”แƒšแƒ—แƒ แƒžแƒ แƒแƒ”แƒฅแƒขแƒก แƒ“แƒแƒ”แƒ—แƒ›แƒ แƒ“แƒ แƒ›แƒ” แƒซแƒแƒšแƒ˜แƒแƒœ แƒ›แƒ”แƒ–แƒแƒ แƒ”แƒ‘แƒ แƒ™แƒ˜แƒ“แƒ”แƒ• แƒ”แƒ แƒ—แƒ˜แƒก แƒ“แƒแƒฌแƒงแƒ”แƒ‘แƒ. แƒแƒกแƒ” แƒ แƒแƒ›, แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒ’แƒ แƒแƒ•แƒ“แƒ”แƒ‘แƒ (แƒ›แƒฎแƒแƒšแƒแƒ“ แƒกแƒแƒฅแƒแƒฆแƒแƒšแƒ“แƒ”แƒ”แƒ‘แƒจแƒ˜) แƒ“แƒ แƒ“แƒแƒคแƒแƒ แƒฃแƒšแƒ˜แƒ AGPL-แƒ˜แƒ— (โ€žแƒกแƒแƒžแƒ˜แƒ แƒ˜แƒกแƒžแƒ˜แƒ แƒ แƒžแƒแƒขแƒ”แƒœแƒขแƒ˜โ€œ).

xswitcher แƒ™แƒแƒ“แƒ˜ แƒ˜แƒฌแƒ”แƒ แƒ”แƒ‘แƒ golang-แƒจแƒ˜, C-แƒ˜แƒก แƒ›แƒ˜แƒœแƒ˜แƒ›แƒแƒšแƒฃแƒ แƒ˜ แƒฉแƒแƒœแƒแƒ แƒ—แƒ”แƒ‘แƒ˜แƒ—. แƒ•แƒแƒ แƒแƒฃแƒ“แƒแƒ‘แƒ”แƒœ, แƒ แƒแƒ› แƒ”แƒก แƒ›แƒ˜แƒ“แƒ’แƒแƒ›แƒ แƒ’แƒแƒ›แƒแƒ˜แƒฌแƒ•แƒ”แƒ•แƒก แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒ›แƒชแƒ˜แƒ แƒ” แƒซแƒแƒšแƒ˜แƒกแƒฎแƒ›แƒ”แƒ•แƒแƒก (แƒฏแƒ”แƒ แƒฏแƒ”แƒ แƒแƒ‘แƒ˜แƒ—). Cgo-แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ— แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒฃแƒœแƒแƒ แƒ˜แƒก แƒจแƒ”แƒœแƒแƒ แƒฉแƒฃแƒœแƒ”แƒ‘แƒ˜แƒกแƒแƒก, แƒ แƒแƒช แƒแƒ™แƒšแƒ˜แƒ.

แƒขแƒ”แƒฅแƒกแƒขแƒจแƒ˜ แƒ›แƒแƒชแƒ”แƒ›แƒฃแƒšแƒ˜แƒ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ”แƒ‘แƒ˜ แƒ˜แƒ›แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘, แƒ—แƒฃ แƒกแƒแƒ˜แƒ“แƒแƒœ แƒแƒ แƒ˜แƒก แƒœแƒแƒกแƒ”แƒกแƒฎแƒ”แƒ‘แƒ˜ แƒ“แƒ แƒ แƒแƒขแƒแƒ›. แƒ˜แƒ›แƒ˜แƒขแƒแƒ› แƒ แƒแƒ› xneur แƒ™แƒแƒ“แƒ˜ โ€žแƒแƒ  แƒจแƒ—แƒแƒ›แƒแƒ’แƒแƒœแƒโ€œ, แƒแƒ•แƒ˜แƒฆแƒ” แƒ˜แƒก แƒกแƒแƒฌแƒงแƒ˜แƒก แƒฌแƒ”แƒ แƒขแƒ˜แƒšแƒแƒ“ แƒšแƒแƒšแƒแƒกแƒ•แƒ˜แƒฉแƒ”แƒ แƒ˜.

"/dev/input/"-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒแƒก แƒแƒฅแƒ•แƒก แƒ แƒแƒ’แƒแƒ แƒช แƒ—แƒแƒ•แƒ˜แƒกแƒ˜ แƒฃแƒžแƒ˜แƒ แƒแƒขแƒ”แƒกแƒแƒ‘แƒ”แƒ‘แƒ˜ (แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒฉแƒแƒœแƒก, แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒฃแƒ แƒ˜ แƒ’แƒแƒ›แƒ”แƒแƒ แƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒญแƒ”แƒ แƒ˜แƒก แƒฉแƒแƒ—แƒ•แƒšแƒ˜แƒ—) แƒ“แƒ แƒฃแƒแƒ แƒงแƒแƒคแƒ˜แƒ—แƒ˜ แƒ›แƒฎแƒแƒ แƒ”แƒ”แƒ‘แƒ˜. แƒฃแƒแƒ แƒงแƒแƒคแƒ˜แƒ—แƒ˜ แƒ›แƒฎแƒแƒ แƒ”แƒ”แƒ‘แƒ˜แƒ:

  • แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒฃแƒ แƒ˜ แƒ’แƒแƒ›แƒ”แƒแƒ แƒ”แƒ‘แƒ (แƒ›แƒแƒ•แƒšแƒ”แƒœแƒ”แƒ‘แƒ˜ "2" แƒ™แƒแƒ“แƒ˜แƒ—) แƒแƒ  แƒจแƒ”แƒ”แƒกแƒแƒ‘แƒแƒ›แƒ”แƒ‘แƒ x-แƒ—แƒแƒœ แƒ’แƒแƒ›แƒ”แƒแƒ แƒ”แƒ‘แƒแƒก.
  • X11 แƒ˜แƒœแƒขแƒ”แƒ แƒคแƒ”แƒ˜แƒกแƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ˜แƒ— แƒจแƒ”แƒงแƒ•แƒแƒœแƒ แƒแƒ  แƒฉแƒแƒœแƒก (แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, VNC แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก).
  • แƒกแƒแƒญแƒ˜แƒ แƒแƒ root.

แƒ›แƒ”แƒแƒ แƒ”แƒก แƒ›แƒฎแƒ แƒ˜แƒ•, แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ X แƒ›แƒแƒ•แƒšแƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒฌแƒ”แƒ แƒ "XSelectExtensionEvent()"-แƒ˜แƒ—. แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ’แƒแƒ“แƒแƒฎแƒ”แƒ“แƒแƒ— xinput แƒ™แƒแƒ“แƒ˜. แƒ›แƒ” แƒ•แƒ”แƒ  แƒ•แƒ˜แƒžแƒแƒ•แƒ” แƒ›แƒกแƒ’แƒแƒ•แƒกแƒ˜ แƒแƒ แƒแƒคแƒ”แƒ แƒ˜ แƒฌแƒแƒกแƒแƒกแƒ•แƒšแƒ”แƒšแƒแƒ“ แƒ“แƒ แƒฃแƒฎแƒ”แƒจ แƒ’แƒแƒœแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒแƒก แƒ›แƒแƒจแƒ˜แƒœแƒ•แƒ” แƒ“แƒแƒกแƒญแƒ˜แƒ แƒ“แƒ C โ€‹โ€‹แƒ™แƒแƒ“แƒ˜แƒก แƒแƒกแƒ˜ แƒฎแƒแƒ–แƒ˜. แƒฏแƒ”แƒ  แƒ’แƒแƒ“แƒแƒ“แƒ’แƒ˜แƒ—.

"แƒกแƒแƒžแƒ˜แƒ แƒ˜แƒกแƒžแƒ˜แƒ แƒ" แƒ’แƒแƒ›แƒแƒ›แƒแƒ•แƒแƒšแƒ˜ แƒ’แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ•แƒ˜แƒ แƒขแƒฃแƒแƒšแƒฃแƒ แƒ˜ แƒ™แƒšแƒแƒ•แƒ˜แƒแƒขแƒฃแƒ แƒ˜แƒก แƒฎแƒ แƒแƒฎแƒœแƒ˜แƒ—. แƒ›แƒแƒ“แƒšแƒแƒ‘แƒ keybd_event-แƒ˜แƒก แƒแƒ•แƒขแƒแƒ แƒก, แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒ‘แƒกแƒขแƒ แƒแƒฅแƒชแƒ˜แƒ แƒ˜แƒฅ แƒซแƒแƒšแƒ˜แƒแƒœ แƒ›แƒแƒฆแƒแƒšแƒ˜ แƒ“แƒแƒœแƒ˜แƒกแƒแƒ แƒ“แƒ แƒจแƒ”แƒ›แƒ“แƒ’แƒแƒ›แƒ˜ แƒ’แƒแƒ“แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒ แƒ›แƒแƒฃแƒฌแƒ”แƒ•แƒก. แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, แƒ›แƒ” แƒ•แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘ แƒ›แƒแƒ แƒฏแƒ•แƒ”แƒœแƒ Win แƒ™แƒšแƒแƒ•แƒ˜แƒจแƒก แƒ›แƒ”-3 แƒ แƒ˜แƒ’แƒ˜แƒก แƒจแƒ”แƒกแƒแƒ แƒฉแƒ”แƒ•แƒแƒ“. แƒ“แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ›แƒแƒ แƒชแƒฎแƒ”แƒœแƒ Win แƒ’แƒแƒ“แƒแƒ”แƒชแƒ”แƒ›แƒ แƒฃแƒ™แƒแƒœ.

แƒชแƒœแƒแƒ‘แƒ˜แƒšแƒ˜ แƒ‘แƒแƒ’แƒ”แƒ‘แƒ˜

  • แƒฉแƒ•แƒ”แƒœ แƒแƒ แƒแƒคแƒ”แƒ แƒ˜ แƒ•แƒ˜แƒชแƒ˜แƒ— "แƒ™แƒแƒ›แƒžแƒแƒ–แƒ˜แƒขแƒฃแƒ แƒ˜" แƒจแƒ”แƒงแƒ•แƒแƒœแƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘ (แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜: ยฝ). แƒ”แƒก แƒแƒฎแƒšแƒ แƒแƒ  แƒแƒ แƒ˜แƒก แƒกแƒแƒญแƒ˜แƒ แƒ.
  • แƒฉแƒ•แƒ”แƒœ แƒแƒ แƒแƒกแƒฌแƒแƒ แƒแƒ“ แƒ•แƒ—แƒแƒ›แƒแƒจแƒแƒ‘แƒ— แƒกแƒฌแƒแƒ  แƒ›แƒแƒ’แƒ”แƒ‘แƒแƒก. แƒฉแƒ”แƒ›แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒ”แƒก แƒแƒ แƒฆแƒ•แƒ”แƒ•แƒก แƒแƒฅแƒชแƒ”แƒœแƒขแƒก.
  • แƒแƒ  แƒแƒ แƒ˜แƒก แƒ›แƒ™แƒแƒคแƒ˜แƒ แƒจแƒ”แƒงแƒ•แƒแƒœแƒ˜แƒก แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜. แƒแƒ›แƒ˜แƒก แƒœแƒแƒชแƒ•แƒšแƒแƒ“, แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ: Compare(), CtrlSequence(), RepeatSequence(), SpaceSequence(). แƒ›แƒแƒ“แƒšแƒแƒ‘แƒ nsmcan แƒ—แƒฅแƒ•แƒ”แƒœแƒ˜ แƒ›แƒแƒ•แƒšแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก: แƒจแƒ”แƒกแƒฌแƒแƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ™แƒแƒ“แƒจแƒ˜ แƒ“แƒ แƒแƒฅ. แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒฃแƒšแƒ˜ แƒแƒšแƒ‘แƒแƒ—แƒแƒ‘แƒ˜แƒ—, แƒ—แƒฅแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ“แƒแƒ˜แƒญแƒ˜แƒ แƒแƒ— แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜ แƒ’แƒแƒ›แƒแƒชแƒ•แƒšแƒ˜แƒกแƒแƒก.
    แƒแƒ› แƒ”แƒขแƒแƒžแƒ–แƒ” แƒแƒ  แƒ•แƒ˜แƒชแƒ˜ "แƒ แƒแƒ’แƒแƒ " แƒ“แƒ แƒ›แƒ˜แƒ•แƒ”แƒกแƒแƒšแƒ›แƒ”แƒ‘แƒ˜ แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ  แƒจแƒ”แƒ›แƒแƒ—แƒแƒ•แƒแƒ–แƒ”แƒ‘แƒแƒก.
  • (แฒ แƒฆแƒ›แƒ”แƒ แƒ—แƒ) แƒแƒ แƒฎแƒ”แƒ‘แƒ˜แƒก แƒ™แƒแƒœแƒ™แƒฃแƒ แƒ”แƒœแƒขแƒฃแƒšแƒ˜ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ (keyboardEvents, miceEvents).

แƒ“แƒแƒกแƒ™แƒ•แƒœแƒ

แƒ™แƒแƒ“แƒ”แƒฅแƒกแƒ˜ แƒฃแƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ”แƒกแƒ˜ แƒžแƒ แƒแƒชแƒ”แƒ“แƒฃแƒ แƒฃแƒšแƒ˜แƒ. แƒ“แƒ แƒฉแƒ”แƒ›แƒœแƒแƒ˜แƒ แƒ˜ แƒกแƒฃแƒšแƒ”แƒšแƒ˜. แƒแƒกแƒ” แƒ แƒแƒ›, แƒ—แƒแƒ•แƒก แƒ•แƒแƒ›แƒจแƒ•แƒ˜แƒ“แƒ”แƒ‘ แƒ˜แƒ› แƒ˜แƒ›แƒ”แƒ“แƒ˜แƒ—, แƒ แƒแƒ› แƒ—แƒ˜แƒ—แƒฅแƒ›แƒ˜แƒก แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ แƒ˜ แƒขแƒ”แƒฅแƒœแƒ˜แƒ™แƒแƒกแƒ˜ แƒจแƒ”แƒซแƒšแƒ”แƒ‘แƒก แƒ“แƒแƒแƒกแƒ แƒฃแƒšแƒแƒก แƒ˜แƒก, แƒ แƒแƒช แƒ›แƒแƒก แƒกแƒฃแƒ แƒก. แƒ“แƒ แƒแƒ›แƒ˜แƒก แƒฌแƒงแƒแƒšแƒแƒ‘แƒ˜แƒ—, แƒ”แƒก แƒžแƒ แƒแƒ“แƒฃแƒฅแƒขแƒ˜ แƒแƒ  แƒ“แƒแƒ˜แƒฆแƒฃแƒžแƒ”แƒ‘แƒ แƒ›แƒฎแƒแƒ แƒ“แƒแƒญแƒ”แƒ แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”, แƒ แƒแƒ’แƒแƒ แƒช แƒฃแƒ›แƒ”แƒขแƒ”แƒกแƒแƒ‘แƒ แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒ’แƒแƒกแƒแƒ แƒ—แƒแƒ‘แƒแƒ“.

แƒ’แƒ˜แƒกแƒฃแƒ แƒ•แƒ”แƒ‘แƒ— แƒฌแƒแƒ แƒ›แƒแƒขแƒ”แƒ‘แƒแƒก!

แƒฌแƒงแƒแƒ แƒ: www.habr.com

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ