āĻ˛āĻŋāĻ¨āĻžāĻ•ā§āĻ¸ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻĒā§āĻ¨ā§āĻŸā§‹ āĻ¸ā§āĻ‡āĻšāĻžāĻ°ā§‡āĻ° āĻ¨āĻ¤ā§āĻ¨ āĻ…ā§āĻ¯āĻžāĻ¨āĻžāĻ˛āĻ—: xswitcher

xneur āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ā§‡āĻ° āĻ¸āĻŽāĻžāĻĒā§āĻ¤āĻŋ āĻ†āĻŽāĻžāĻ•ā§‡ āĻ—āĻ¤ āĻ›āĻ¯āĻŧ āĻŽāĻžāĻ¸ā§‡ āĻ•āĻŋāĻ›ā§āĻŸāĻž āĻ•āĻˇā§āĻŸ āĻĻāĻŋāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ (āĻ†āĻŽāĻžāĻ° āĻĄā§‡āĻ¸ā§āĻ•āĻŸāĻĒāĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ OpenSUSE 15.1 āĻāĻ° āĻ†āĻŦāĻŋāĻ°ā§āĻ­āĻžāĻŦā§‡āĻ° āĻ¸āĻžāĻĨā§‡: xneur āĻ¸āĻ•ā§āĻˇāĻŽ āĻšāĻ˛ā§‡, āĻ‰āĻ‡āĻ¨ā§āĻĄā§‹āĻ—ā§āĻ˛āĻŋ āĻĢā§‹āĻ•āĻžāĻ¸ āĻšāĻžāĻ°āĻžāĻ¯āĻŧ āĻāĻŦāĻ‚ āĻ•ā§€āĻŦā§‹āĻ°ā§āĻĄ āĻ‡āĻ¨āĻĒā§āĻŸ āĻ¸āĻš āĻ¸āĻŽāĻ¯āĻŧā§‡ āĻŽāĻœāĻžāĻ° āĻāĻ˛āĻ•āĻžāĻ¨).

"āĻ“āĻš, āĻ…āĻ­āĻŋāĻļāĻžāĻĒ, āĻ†āĻŽāĻŋ āĻ†āĻŦāĻžāĻ° āĻ­ā§āĻ˛ āĻ˛ā§‡āĻ†āĻ‰āĻŸā§‡ āĻŸāĻžāĻ‡āĻĒ āĻ•āĻ°āĻž āĻļā§āĻ°ā§ āĻ•āĻ°ā§‡āĻ›āĻŋ" - āĻ†āĻŽāĻžāĻ° āĻ•āĻžāĻœā§‡ āĻāĻŸāĻŋ āĻĒā§āĻ°āĻžāĻ¯āĻŧāĻļāĻ‡ āĻ…āĻļāĻžāĻ˛ā§€āĻ¨āĻ­āĻžāĻŦā§‡ āĻ˜āĻŸā§‡āĨ¤ āĻāĻŦāĻ‚ āĻāĻŸāĻŋ āĻ‡āĻ¤āĻŋāĻŦāĻžāĻšāĻ• āĻ•āĻŋāĻ›ā§ āĻ¯ā§‹āĻ— āĻ•āĻ°ā§‡ āĻ¨āĻžāĨ¤

āĻ˛āĻŋāĻ¨āĻžāĻ•ā§āĻ¸ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻĒā§āĻ¨ā§āĻŸā§‹ āĻ¸ā§āĻ‡āĻšāĻžāĻ°ā§‡āĻ° āĻ¨āĻ¤ā§āĻ¨ āĻ…ā§āĻ¯āĻžāĻ¨āĻžāĻ˛āĻ—: xswitcher
āĻāĻ•āĻ‡ āĻ¸āĻŽāĻ¯āĻŧā§‡, āĻ†āĻŽāĻŋ (āĻāĻ•āĻœāĻ¨ āĻĄāĻŋāĻœāĻžāĻ‡āĻ¨ āĻ‡āĻžā§āĻœāĻŋāĻ¨āĻŋāĻ¯āĻŧāĻžāĻ° āĻšāĻŋāĻ¸āĻžāĻŦā§‡) āĻ†āĻŽāĻŋ āĻ¯āĻž āĻšāĻžāĻ‡ āĻ¤āĻž āĻ¸ā§āĻĒāĻˇā§āĻŸāĻ­āĻžāĻŦā§‡ āĻĒā§āĻ°āĻŖāĻ¯āĻŧāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°āĻŋāĨ¤ āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ†āĻŽāĻŋ āĻšā§‡āĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛āĻžāĻŽ (āĻĒā§āĻ°āĻĨāĻŽā§‡ āĻĒāĻžāĻ¨ā§āĻŸā§‹ āĻ¸ā§āĻ‡āĻšāĻžāĻ° āĻĨā§‡āĻ•ā§‡, āĻāĻŦāĻ‚ āĻ¤āĻžāĻ°āĻĒāĻ°ā§‡, āĻ‰āĻ‡āĻ¨ā§āĻĄā§‹āĻœ āĻ­āĻŋāĻ¸ā§āĻ¤āĻžāĻ•ā§‡ āĻ§āĻ¨ā§āĻ¯āĻŦāĻžāĻĻ, āĻ…āĻŦāĻļā§‡āĻˇā§‡ āĻ˛āĻŋāĻ¨āĻžāĻ•ā§āĻ¸ā§‡ āĻ¸ā§āĻ¯ā§āĻ‡āĻš āĻ•āĻ°āĻž, xneur āĻĨā§‡āĻ•ā§‡) āĻ āĻŋāĻ• āĻāĻ•āĻŸāĻŋ āĻœāĻŋāĻ¨āĻŋāĻ¸āĨ¤ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻ¨ā§‡ āĻ†āĻŦāĻ°ā§āĻœāĻ¨āĻž āĻ­ā§āĻ˛ āĻ˛ā§‡āĻ†āĻ‰āĻŸā§‡ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ āĻ¤āĻž āĻŦā§āĻāĻ¤ā§‡ āĻĒā§‡āĻ°ā§‡ (āĻāĻŸāĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ¤ āĻāĻ•āĻŸāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻļāĻŦā§āĻĻ āĻŸāĻžāĻ‡āĻĒ āĻ•āĻ°āĻžāĻ° āĻļā§‡āĻˇā§‡ āĻ˜āĻŸā§‡), "āĻĒāĻœ/āĻŦā§āĻ°ā§‡āĻ•" āĻ āĻ¸ā§āĻŸāĻĒ āĻ•āĻ°ā§āĻ¨āĨ¤ āĻāĻŦāĻ‚ āĻ†āĻĒāĻ¨āĻŋ āĻĒā§āĻ°āĻŋāĻ¨ā§āĻŸ āĻ•āĻŋ āĻĒāĻžāĻ¨.

āĻāĻ‡ āĻŽā§āĻšā§āĻ°ā§āĻ¤ā§‡, āĻĒāĻŖā§āĻ¯āĻŸāĻŋāĻ° āĻ¸āĻ°ā§āĻŦā§‹āĻ¤ā§āĻ¤āĻŽ (āĻ†āĻŽāĻžāĻ° āĻĻā§ƒāĻˇā§āĻŸāĻŋāĻ•ā§‹āĻŖ āĻĨā§‡āĻ•ā§‡) āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻžāĻ°āĻŋāĻ¤āĻž/āĻœāĻŸāĻŋāĻ˛āĻ¤āĻžāĻ° āĻ…āĻ¨ā§āĻĒāĻžāĻ¤ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻāĻŸāĻž āĻ­āĻžāĻ— āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ.

TL.DR

āĻĒāĻ°ā§‡ āĻ¸āĻŦ āĻ§āĻ°āĻŖā§‡āĻ° āĻĒā§āĻ°āĻ¯ā§āĻ•ā§āĻ¤āĻŋāĻ—āĻ¤ āĻŦāĻŋāĻŦāĻ°āĻŖ āĻĨāĻžāĻ•āĻŦā§‡, āĻ¤āĻžāĻ‡ āĻĒā§āĻ°āĻĨāĻŽā§‡ - āĻ˛āĻŋāĻ™ā§āĻ• "āĻ¸ā§āĻĒāĻ°ā§āĻļ āĻ•āĻ°āĻ¤ā§‡" āĻ…āĻ§ā§ˆāĻ°ā§āĻ¯ā§‡āĻ° āĻœāĻ¨ā§āĻ¯

āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ā§‡ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤ āĻ†āĻšāĻ°āĻŖ āĻšāĻžāĻ°ā§āĻĄāĻ•ā§‹āĻĄ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡:

  • "āĻĒāĻœ/āĻŦā§āĻ°ā§‡āĻ•": āĻļā§‡āĻˇ āĻļāĻŦā§āĻĻāĻŸāĻŋ āĻŦā§āĻ¯āĻžāĻ•āĻ¸ā§āĻĒā§‡āĻ¸ āĻ•āĻ°ā§‡, āĻ¸āĻ•ā§āĻ°āĻŋāĻ¯āĻŧ āĻ‰āĻ‡āĻ¨ā§āĻĄā§‹āĻ¤ā§‡ āĻ˛ā§‡āĻ†āĻ‰āĻŸāĻŸāĻŋ āĻ¸ā§āĻ¯ā§āĻ‡āĻš āĻ•āĻ°ā§‡ (0 āĻāĻŦāĻ‚ 1 āĻāĻ° āĻŽāĻ§ā§āĻ¯ā§‡) āĻāĻŦāĻ‚ āĻ†āĻŦāĻžāĻ° āĻĄāĻžāĻ¯āĻŧāĻžāĻ˛ āĻ•āĻ°ā§‡āĨ¤
  • "āĻ•āĻŋāĻ›ā§ āĻ›āĻžāĻĄāĻŧāĻžāĻ‡ Ctrl āĻŦāĻžāĻŽ": āĻ¸āĻ•ā§āĻ°āĻŋāĻ¯āĻŧ āĻ‰āĻ‡āĻ¨ā§āĻĄā§‹āĻ¤ā§‡ āĻ˛ā§‡āĻ†āĻ‰āĻŸāĻŸāĻŋ āĻ¸ā§āĻ‡āĻš āĻ•āĻ°ā§‡ (0 āĻāĻŦāĻ‚ 1 āĻāĻ° āĻŽāĻ§ā§āĻ¯ā§‡)āĨ¤
  • "āĻ•āĻŋāĻ›ā§ āĻ›āĻžāĻĄāĻŧāĻžāĻ‡ āĻŦāĻžāĻŽ āĻļāĻŋāĻĢāĻŸ": āĻ¸āĻ•ā§āĻ°āĻŋāĻ¯āĻŧ āĻ‰āĻ‡āĻ¨ā§āĻĄā§‹āĻ¤ā§‡ āĻ˛ā§‡āĻ†āĻ‰āĻŸ āĻ¨āĻ‚ 0 āĻšāĻžāĻ˛ā§ āĻ•āĻ°ā§‡āĨ¤
  • "āĻ•āĻŋāĻ›ā§ āĻ›āĻžāĻĄāĻŧāĻžāĻ‡ āĻĄāĻžāĻ¨ āĻļāĻŋāĻĢāĻŸ": āĻ¸āĻ•ā§āĻ°āĻŋāĻ¯āĻŧ āĻ‰āĻ‡āĻ¨ā§āĻĄā§‹āĻ¤ā§‡ āĻ˛ā§‡āĻ†āĻ‰āĻŸ āĻ¨āĻ‚ 1 āĻšāĻžāĻ˛ā§ āĻ•āĻ°ā§‡āĨ¤

āĻāĻ–āĻ¨ āĻĨā§‡āĻ•ā§‡ āĻ†āĻŽāĻŋ āĻ†āĻšāĻ°āĻŖ āĻ•āĻžāĻ¸ā§āĻŸāĻŽāĻžāĻ‡āĻœ āĻ•āĻ°āĻžāĻ° āĻĒāĻ°āĻŋāĻ•āĻ˛ā§āĻĒāĻ¨āĻž āĻ•āĻ°āĻ›āĻŋāĨ¤ āĻĒā§āĻ°āĻ¤āĻŋāĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻ›āĻžāĻĄāĻŧāĻž, āĻāĻŸāĻŋ āĻ†āĻ•āĻ°ā§āĻˇāĻŖā§€āĻ¯āĻŧ āĻ¨āĻ¯āĻŧ (āĻ†āĻŽāĻŋ āĻ¯āĻžāĻ‡āĻšā§‹āĻ• āĻāĻŸāĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻ­āĻžāĻ˛)āĨ¤ āĻ†āĻŽāĻŋ āĻŦāĻŋāĻļā§āĻŦāĻžāĻ¸ āĻ•āĻ°āĻŋ āĻ¯ā§‡ āĻšāĻžāĻŦā§āĻ°ā§‡āĻ¤ā§‡ āĻāĻ•āĻ‡ āĻ°āĻ•āĻŽ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻ¸āĻš āĻĻāĻ°ā§āĻļāĻ•āĻĻā§‡āĻ° āĻ¯āĻĨā§‡āĻˇā§āĻŸ āĻļāĻ¤āĻžāĻ‚āĻļ āĻĨāĻžāĻ•āĻŦā§‡āĨ¤

āĻŦāĻŋāĻļā§‡āĻˇ āĻĻā§āĻ°āĻˇā§āĻŸāĻŦā§āĻ¯ āĻ•āĻžāĻ°āĻŖ āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ āĻ¸āĻ‚āĻ¸ā§āĻ•āĻ°āĻŖā§‡, āĻ•ā§€āĻ˛āĻ—āĻžāĻ° "/dev/input/" āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸āĻ‚āĻ¯ā§āĻ•ā§āĻ¤, xswitcher āĻ…āĻŦāĻļā§āĻ¯āĻ‡ āĻ°ā§āĻŸ āĻ…āĻ§āĻŋāĻ•āĻžāĻ° āĻ¸āĻš āĻšāĻžāĻ˛ā§ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡:

chown root:root xswitcher
chmod +xs xswitcher

āĻĻāĻ¯āĻŧāĻž āĻ•āĻ°ā§‡ āĻ¨ā§‹āĻŸ āĻ•āĻ°ā§āĻ¨: āĻ¸ā§āĻ¯ā§āĻĄ āĻ¸āĻš āĻĢāĻžāĻ‡āĻ˛āĻŸāĻŋāĻ° āĻŽāĻžāĻ˛āĻŋāĻ• āĻ…āĻŦāĻļā§āĻ¯āĻ‡ āĻ°ā§āĻŸ āĻšāĻ¤ā§‡ āĻšāĻŦā§‡, āĻ•āĻžāĻ°āĻŖ āĻŽāĻžāĻ˛āĻŋāĻ• āĻ¯ā§‡ āĻ•ā§‡āĻ‰ āĻ¸ā§āĻŸāĻžāĻ°ā§āĻŸāĻ†āĻĒā§‡ āĻŽāĻžāĻŽāĻ˛āĻžāĻ¯āĻŧ āĻĒāĻ°āĻŋāĻŖāĻ¤ āĻšāĻŦā§‡āĨ¤

Paranoids (āĻ†āĻŽāĻŋ āĻ•ā§‹āĻ¨ āĻŦā§āĻ¯āĻ¤āĻŋāĻ•ā§āĻ°āĻŽ āĻ¨āĻ‡) āĻĨā§‡āĻ•ā§‡ āĻ•ā§āĻ˛ā§‹āĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨ āĻāĻ˛ā§‡āĻŦā§‡āĻ˛ā§‡ āĻāĻŦāĻ‚ āĻ¸āĻžāĻ‡āĻŸā§‡ āĻœāĻĄāĻŧā§‹ āĻ•āĻ°āĻžāĨ¤ āĻ¸ā§‡ āĻ°āĻ•āĻŽāĻ‡:

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 MB)āĨ¤

āĻŦāĻŋāĻ¸ā§āĻ¤āĻžāĻ°āĻŋāĻ¤ āĻĻā§‡āĻ–ā§āĻ¨

āĻāĻ–āĻ¨ - āĻŦāĻŋāĻ¸ā§āĻ¤āĻžāĻ°āĻŋāĻ¤.

āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ¸āĻ‚āĻ—ā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛āĻŸāĻŋ āĻŽā§‚āĻ˛āĻ¤ āĻ†āĻŽāĻžāĻ° āĻĒā§‹āĻˇāĻž āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ‰āĻ¤ā§āĻ¸āĻ°ā§āĻ—ā§€āĻ•ā§ƒāĻ¤ āĻ›āĻŋāĻ˛ āĻāĻŦāĻ‚ āĻ†āĻŽāĻŋ āĻ…āĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻļā§āĻ°ā§ āĻ•āĻ°āĻ¤ā§‡ āĻ–ā§āĻŦ āĻ…āĻ˛āĻ¸āĨ¤ āĻ¸ā§āĻ¤āĻ°āĻžāĻ‚, āĻ¸āĻŦāĻ•āĻŋāĻ›ā§ āĻ¸ā§āĻ¤ā§‚āĻĒ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ (āĻļā§āĻ§ā§ āĻĢā§‹āĻ˛ā§āĻĄāĻžāĻ°ā§‡) āĻāĻŦāĻ‚ AGPL ("āĻŦāĻŋāĻĒāĻ°ā§€āĻ¤ āĻĒā§‡āĻŸā§‡āĻ¨ā§āĻŸ") āĻĻā§āĻŦāĻžāĻ°āĻž āĻ†āĻšā§āĻ›āĻžāĻĻāĻŋāĻ¤āĨ¤

xswitcher āĻ•ā§‹āĻĄāĻŸāĻŋ āĻ—ā§‹āĻ˛āĻ‚ āĻ­āĻžāĻˇāĻžāĻ¯āĻŧ āĻ˛ā§‡āĻ–āĻž āĻšāĻ¯āĻŧ, āĻ¯āĻžāĻ° āĻŽāĻ§ā§āĻ¯ā§‡ C āĻāĻ° āĻ¨ā§āĻ¯ā§‚āĻ¨āĻ¤āĻŽ āĻ…āĻ¨ā§āĻ¤āĻ°ā§āĻ­ā§āĻ•ā§āĻ¤āĻŋ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻ§āĻžāĻ°āĻŖāĻž āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ āĻ¯ā§‡ āĻāĻ‡ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ° āĻĢāĻ˛ā§‡ āĻ¸āĻ°ā§āĻŦāĻ¨āĻŋāĻŽā§āĻ¨ āĻĒāĻ°āĻŋāĻļā§āĻ°āĻŽ āĻšāĻŦā§‡ (āĻāĻ–āĻ¨ āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻāĻŸāĻŋ āĻ†āĻ›ā§‡)āĨ¤ cgo āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ¯āĻž āĻ…āĻ¨ā§āĻĒāĻ¸ā§āĻĨāĻŋāĻ¤ āĻ¤āĻž āĻ¸āĻ‚āĻ¯ā§‹āĻ— āĻ•āĻ°āĻžāĻ° āĻ•ā§āĻˇāĻŽāĻ¤āĻž āĻŦāĻœāĻžāĻ¯āĻŧ āĻ°āĻžāĻ–āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧāĨ¤

āĻĒāĻžāĻ ā§āĻ¯āĻŸāĻŋ āĻ•ā§‹āĻĨāĻž āĻĨā§‡āĻ•ā§‡ āĻāĻŦāĻ‚ āĻ•ā§‡āĻ¨ āĻ§āĻžāĻ° āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛ āĻ¤āĻžāĻ° āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻ•āĻžāĻ°āĻŖ xneur āĻ•ā§‹āĻĄ "āĻ†āĻŽāĻžāĻ•ā§‡ āĻ…āĻ¨ā§āĻĒā§āĻ°āĻžāĻŖāĻŋāĻ¤ āĻ•āĻ°ā§‡āĻ¨āĻŋ", āĻ†āĻŽāĻŋ āĻāĻŸāĻŋāĻ•ā§‡ āĻāĻ•āĻŸāĻŋ āĻ¸ā§‚āĻšāĻ¨āĻž āĻĒāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻšāĻŋāĻ¸ā§‡āĻŦā§‡ āĻ¨āĻŋāĻ¯āĻŧā§‡āĻ›āĻŋ loloswitcher.

"/dev/input/" āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻžāĻ° āĻ‰āĻ­āĻ¯āĻŧ āĻ¸ā§āĻŦāĻŋāĻ§āĻž āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ (āĻšāĻžāĻĒāĻž āĻ¸ā§āĻŦāĻ¯āĻŧāĻ‚āĻ•ā§āĻ°āĻŋāĻ¯āĻŧ-āĻĒā§āĻ¨āĻ°āĻžāĻŦā§ƒāĻ¤ā§āĻ¤āĻŋ āĻ•ā§€ āĻ¸āĻš āĻ¸āĻŦāĻ•āĻŋāĻ›ā§āĻ‡ āĻĻā§ƒāĻļā§āĻ¯āĻŽāĻžāĻ¨) āĻāĻŦāĻ‚ āĻ…āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻ—ā§āĻ˛āĻŋāĨ¤ āĻ…āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻ—ā§āĻ˛āĻŋ āĻšāĻ˛:

  • āĻ¸ā§āĻŦāĻ¤āĻƒ-āĻĒā§āĻ¨āĻ°āĻžāĻŦā§ƒāĻ¤ā§āĻ¤āĻŋ (āĻ•ā§‹āĻĄ “2” āĻ¸āĻš āĻ‡āĻ­ā§‡āĻ¨ā§āĻŸ) x āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻĒā§āĻ¨āĻ°āĻžāĻŦā§ƒāĻ¤ā§āĻ¤āĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•āĻ¯ā§āĻ•ā§āĻ¤ āĻ¨āĻ¯āĻŧāĨ¤
  • X11 āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ā§‡āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻ‡āĻ¨āĻĒā§āĻŸ āĻĻā§ƒāĻļā§āĻ¯āĻŽāĻžāĻ¨ āĻ¨āĻ¯āĻŧ (āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§‚āĻĒ, VNC āĻāĻ‡āĻ­āĻžāĻŦā§‡ āĻ•āĻžāĻœ āĻ•āĻ°ā§‡)āĨ¤
  • āĻ°ā§āĻŸ āĻĻāĻ°āĻ•āĻžāĻ°āĨ¤

āĻ…āĻ¨ā§āĻ¯āĻĻāĻŋāĻ•ā§‡, "XSelectExtensionEvent()" āĻāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ X āĻ‡āĻ­ā§‡āĻ¨ā§āĻŸāĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻ¸āĻĻāĻ¸ā§āĻ¯āĻ¤āĻž āĻ¨ā§‡āĻ“āĻ¯āĻŧāĻž āĻ¸āĻŽā§āĻ­āĻŦāĨ¤ āĻ†āĻĒāĻ¨āĻŋ āĻ‰āĻāĻ•āĻŋ āĻĻāĻŋāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨ xinput āĻ•ā§‹āĻĄ. āĻ†āĻŽāĻŋ āĻ¯āĻžāĻ“āĻ¯āĻŧāĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ° āĻŽāĻ¤ā§‹ āĻ•āĻŋāĻ›ā§ āĻ–ā§āĻāĻœā§‡ āĻĒāĻžāĻ‡āĻ¨āĻŋ, āĻāĻŦāĻ‚ āĻ°ā§āĻ•ā§āĻˇ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻ…āĻŦāĻŋāĻ˛āĻŽā§āĻŦā§‡ āĻ¸āĻŋ āĻ•ā§‹āĻĄā§‡āĻ° āĻāĻ•āĻļ āĻ˛āĻžāĻ‡āĻ¨ āĻ¨āĻŋāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛āĨ¤ āĻ†āĻĒāĻžāĻ¤āĻ¤ āĻāĻ•āĻĒāĻžāĻļā§‡ āĻ°āĻžāĻ–ā§āĻ¨āĨ¤

"āĻŦāĻŋāĻĒāĻ°ā§€āĻ¤" āĻ†āĻ‰āĻŸāĻĒā§āĻŸ āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ā§‡ āĻ­āĻžāĻ°ā§āĻšā§āĻ¯āĻŧāĻžāĻ˛ āĻ•ā§€āĻŦā§‹āĻ°ā§āĻĄ āĻ¸ā§āĻ•ā§āĻ°ā§ āĻ•āĻ°āĻžāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧāĨ¤ keybd_event āĻāĻ° āĻ˛ā§‡āĻ–āĻ•āĻ•ā§‡ āĻ§āĻ¨ā§āĻ¯āĻŦāĻžāĻĻ, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ¸ā§‡āĻ–āĻžāĻ¨ā§‡ āĻŦāĻŋāĻŽā§‚āĻ°ā§āĻ¤āĻ¤āĻž āĻ–ā§āĻŦāĻ‡ āĻ‰āĻšā§āĻš-āĻ¸ā§āĻ¤āĻ°ā§‡āĻ° āĻāĻŦāĻ‚ āĻāĻŸāĻŋāĻ•ā§‡ āĻ†āĻŦāĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§‚āĻĒ, āĻ†āĻŽāĻŋ 3āĻ¯āĻŧ āĻ¸āĻžāĻ°āĻŋ āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻšāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻĄāĻžāĻ¨ Win āĻ•ā§€ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻŋāĨ¤ āĻāĻŦāĻ‚ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻŦāĻžāĻŽ Win āĻĢāĻŋāĻ°ā§‡ āĻĒā§āĻ°ā§‡āĻ°āĻŖ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ.

āĻĒāĻ°āĻŋāĻšāĻŋāĻ¤ āĻŦāĻžāĻ—

  • āĻ†āĻŽāĻ°āĻž "āĻ¯ā§ŒāĻ—āĻŋāĻ•" āĻ‡āĻ¨āĻĒā§āĻŸ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ•āĻŋāĻ›ā§āĻ‡ āĻœāĻžāĻ¨āĻŋ āĻ¨āĻž (āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ: ÂŊ)āĨ¤ āĻāĻŸāĻž āĻāĻ–āĻ¨ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻ¨ā§‡āĻ‡.
  • āĻ†āĻŽāĻ°āĻž āĻ¸āĻ āĻŋāĻ• āĻ‰āĻ‡āĻ¨ āĻ­ā§āĻ˛āĻ­āĻžāĻŦā§‡ āĻ–ā§‡āĻ˛āĻ›āĻŋāĨ¤ āĻ†āĻŽāĻžāĻ° āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡, āĻāĻŸāĻž āĻœā§‹āĻ° āĻ­āĻžāĻ™ā§āĻ—ā§‡.
  • āĻ•ā§‹āĻ¨ āĻ¸ā§āĻĒāĻˇā§āĻŸ āĻ‡āĻ¨āĻĒā§āĻŸ āĻĒāĻžāĻ°ā§āĻ¸āĻŋāĻ‚ āĻ¨ā§‡āĻ‡. āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤ā§‡, āĻŦā§‡āĻļ āĻ•āĻ¯āĻŧā§‡āĻ•āĻŸāĻŋ āĻĢāĻžāĻ‚āĻļāĻ¨ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡: āĻ¤ā§āĻ˛āĻ¨āĻž(), CtrlSequence(), RepeatSequence(), SpaceSequence()āĨ¤ ĐĄĐŋĐ°ŅĐ¸ĐąĐž nsmcan āĻ†āĻĒāĻ¨āĻžāĻ° āĻ¯āĻ¤ā§āĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯: āĻ•ā§‹āĻĄā§‡ āĻāĻŦāĻ‚ āĻāĻ–āĻžāĻ¨ā§‡ āĻāĻŸāĻŋ āĻ¸āĻ‚āĻļā§‹āĻ§āĻ¨ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻāĻ•āĻŸāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻ¸āĻŽā§āĻ­āĻžāĻŦāĻ¨āĻžāĻ° āĻ¸āĻžāĻĨā§‡, āĻĒā§āĻ°āĻ¤āĻŋāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻ†āĻĒāĻ¨āĻŋ āĻŦāĻžāĻ— āĻ§āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤
    āĻāĻ‡ āĻŽā§āĻšā§āĻ°ā§āĻ¤ā§‡ āĻ†āĻŽāĻŋ "āĻ•ā§€āĻ­āĻžāĻŦā§‡" āĻœāĻžāĻ¨āĻŋ āĻ¨āĻž āĻāĻŦāĻ‚ āĻ•ā§‹āĻ¨ā§‹ āĻĒāĻ°āĻžāĻŽāĻ°ā§āĻļāĻ•ā§‡ āĻ¸ā§āĻŦāĻžāĻ—āĻ¤ āĻœāĻžāĻ¨āĻžāĻŦāĨ¤
  • (āĻ“āĻš āĻˆāĻļā§āĻŦāĻ°) āĻšā§āĻ¯āĻžāĻ¨ā§‡āĻ˛ā§‡āĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻ¯ā§‹āĻ—āĻŋāĻ¤āĻžāĻŽā§‚āĻ˛āĻ• āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° (āĻ•ā§€āĻŦā§‹āĻ°ā§āĻĄ āĻ‡āĻ­ā§‡āĻ¨ā§āĻŸ, āĻŽāĻžāĻ‡āĻ¸ āĻ‡āĻ­ā§‡āĻ¨ā§āĻŸ)āĨ¤

āĻ‰āĻĒāĻ¸āĻ‚āĻšāĻžāĻ°

āĻ•ā§‹āĻĄ āĻšāĻ˛ āĻ¸āĻŦāĻšā§‡āĻ¯āĻŧā§‡ āĻ¸āĻšāĻœ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ—āĻ¤āĨ¤ āĻ†āĻ° āĻ†āĻŽāĻžāĻ° āĻŽāĻ¤ āĻŦā§‹āĻ•āĻžāĨ¤ āĻ¸ā§āĻ¤āĻ°āĻžāĻ‚, āĻ†āĻŽāĻŋ āĻāĻ‡ āĻ†āĻļāĻž āĻ¨āĻŋāĻ¯āĻŧā§‡ āĻ¨āĻŋāĻœā§‡āĻ•ā§‡ āĻšāĻžāĻŸā§āĻ•āĻžāĻ° āĻ•āĻ°āĻŋ āĻ¯ā§‡ āĻĒā§āĻ°āĻžāĻ¯āĻŧ āĻ•ā§‹āĻ¨āĻ“ āĻĒā§āĻ°āĻ¯ā§āĻ•ā§āĻ¤āĻŋāĻŦāĻŋāĻĻ āĻ¯āĻž āĻšāĻžāĻ¨ āĻ¤āĻž āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ•āĻ°āĻ¤ā§‡ āĻ¸āĻ•ā§āĻˇāĻŽ āĻšāĻŦā§‡āĻ¨āĨ¤ āĻāĻŦāĻ‚ āĻāĻŸāĻŋāĻ° āĻœāĻ¨ā§āĻ¯ āĻ§āĻ¨ā§āĻ¯āĻŦāĻžāĻĻ, āĻāĻ‡ āĻĒāĻŖā§āĻ¯āĻŸāĻŋ āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻ›āĻžāĻĄāĻŧāĻž āĻ§ā§āĻŦāĻ‚āĻ¸ āĻšāĻŦā§‡ āĻ¨āĻž, āĻ¯ā§‡āĻŽāĻ¨āĻŸāĻŋ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻŽāĻœāĻž āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯āĨ¤

āĻ¸ā§ŒāĻ­āĻžāĻ—ā§āĻ¯ āĻ•āĻžāĻŽāĻ¨āĻž āĻ•āĻ°āĻ›āĻŋ!

āĻ‰āĻ¤ā§āĻ¸: www.habr.com

āĻāĻ•āĻŸāĻŋ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻœā§āĻĄāĻŧā§āĻ¨