Linux සඳහා Punto Switcher හි නව ඇනෙලොග්: xswitcher

xneur සහයෝගයේ අවසානය පසුගිය මාස හය තුළ මට යම් දුක් වේදනා ඇති කළේය. (මගේ ඩෙස්ක්ටොප් වල OpenSUSE 15.1 පැමිණීමත් සමඟ: xneur සක්‍රීය කර ඇති විට, windows අවධානය නැති වී යන අතර යතුරුපුවරු ආදානය සමඟ කාලයත් සමඟම විහිළු කරයි).

“අනේ අපොයි, මම නැවතත් වැරදි පිරිසැලසුමක ටයිප් කිරීමට පටන් ගත්තා” - මගේ කාර්යයේදී මෙය බොහෝ විට අශෝභන ලෙස සිදු වේ. තවද එය ධනාත්මක කිසිවක් එකතු නොකරයි.

Linux සඳහා Punto Switcher හි නව ඇනෙලොග්: xswitcher
ඒ අතරම, මට (නිර්මාණ ඉංජිනේරුවෙකු ලෙස) මට අවශ්‍ය දේ ඉතා පැහැදිලිව සකස් කළ හැකිය. නමුත් මට අවශ්‍ය වූයේ (මුලින්ම Punto Switcher වෙතින්, පසුව, Windows Vista වලට ස්තුති වන්නට, අවසානයේ Linux වෙත මාරු වීම, xneur වෙතින්) හරියටම එක දෙයකි. තිරයේ ඇති කසළ වැරදි පිරිසැලසුමක ඇති බව අවබෝධ කර ගැනීමෙන් (මෙය සාමාන්‍යයෙන් සිදුවන්නේ නව වචනයක් ටයිප් කිරීමෙන් පසුවය), “විරාමය/බිඳීම” මත පතිත කරන්න. සහ ඔබ මුද්රණය කළ දේ ලබා ගන්න.

මේ මොහොතේ, නිෂ්පාදනයට ප්‍රශස්ත (මගේ දෘෂ්ටි කෝණයෙන්) ක්‍රියාකාරීත්වය / සංකීර්ණතා අනුපාතය ඇත. බෙදා ගැනීමට කාලයයි.

TL.DR

පසුව සියලු ආකාරයේ තාක්ෂණික විස්තර ඇත, එබැවින් පළමුව - සබැඳිය "ස්පර්ශ කිරීමට" නොඉවසිලිමත් අය සඳහා.

දැනට පහත හැසිරීම දෘඪ කේත කර ඇත:

  • "විරාමය/බිඳීම": අවසාන වචනය පසුකර, සක්‍රිය කවුළුවේ පිරිසැලසුම මාරු කර (0 සහ 1 අතර) නැවත අමතන්න.
  • "කිසිවක් නොමැතිව වම් Ctrl": ක්රියාකාරී කවුළුවෙහි පිරිසැලසුම මාරු කරයි (0 සහ 1 අතර).
  • "කිසිවක් නොමැතිව වම් Shift": ක්රියාකාරී කවුළුවෙහි පිරිසැලසුම අංක 0 සක්රිය කරයි.
  • "කිසිවක් නොමැතිව දකුණු මාරුව": ක්රියාකාරී කවුළුවෙහි පිරිසැලසුම අංක 1 සක්රිය කරයි.

මෙතැන් සිට මම හැසිරීම රිසිකරණය කිරීමට සැලසුම් කරමි. ප්‍රතිපෝෂණ නොමැතිව, එය සිත්ගන්නා සුළු නොවේ (මම කෙසේ හෝ එය සමඟ හොඳින් සිටිමි). Habré හි සමාන ගැටළු ඇති ප්‍රේක්ෂකයන්ගෙන් ප්‍රමාණවත් ප්‍රතිශතයක් සිටිනු ඇතැයි මම විශ්වාස කරමි.

සැ.යු. නිසා වත්මන් අනුවාදයේ, keylogger "/dev/input/" වෙත අමුණා ඇත, xswitcher මූල අයිතිවාසිකම් සමඟ දියත් කළ යුතුය:

chown root:root xswitcher
chmod +xs xswitcher

කරුණාවෙන් සලකන්න: suid සහිත ගොනුවේ හිමිකරු root විය යුතුය, මන්ද අයිතිකරු කවුරුන් වුවත්, ආරම්භයේදීම ඔහු සියදිවි නසාගැනීම් බවට පත් කරනු ලැබේ.

Paranoids (මම ව්යතිරේකයක් නොවේ) සිට ක්ලෝන කළ හැක 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, RSS හි ≈12 MB).

විස්තරностей

දැන් - විස්තර.

සම්පූර්ණ ගබඩාව මුලින් මගේ සුරතල් ව්‍යාපෘතිය සඳහා කැප කර ඇති අතර, තවත් එකක් ආරම්භ කිරීමට මට කම්මැලියි. එබැවින්, සියල්ල ගොඩ ගසා ඇත (හුදෙක් ෆෝල්ඩරවල) සහ AGPL ("ප්‍රතිලෝම පේටන්ට් බලපත්‍රය") මගින් ආවරණය කර ඇත.

xswitcher කේතය golang භාෂාවෙන් ලියා ඇත, C හි අවම ඇතුළත් කිරීම් සහිතව. මෙම ප්‍රවේශය අවම උත්සාහයක ප්‍රතිඵලයක් වනු ඇතැයි උපකල්පනය කෙරේ (මෙතෙක් එය තිබේ). Cgo භාවිතයෙන් නැතිවූ දේ සම්බන්ධ කිරීමේ හැකියාව පවත්වා ගනිමින්.

එය ණයට ගත්තේ කොහෙන්ද සහ ඇයිද යන්න පිළිබඳ අදහස් පෙළෙහි අඩංගු වේ. නිසා xneur කේතය “මාව ආශ්වාදයක් කළේ නැත”, මම එය ආරම්භක ලක්ෂ්‍යයක් ලෙස ගත්තෙමි loloswitcher.

"/dev/input/" භාවිතා කිරීමෙන් එහි වාසි (සියල්ලම දිස්වේ, එබූ ස්වයංක්‍රීය පුනරාවර්තන යතුර ඇතුළුව) සහ අවාසි යන දෙකම ඇත. අවාසි වන්නේ:

  • ස්වයංක්‍රීය පුනරාවර්තනය (“2” කේතය සහිත සිදුවීම්) x සමඟ පුනරාවර්තනය සමඟ සහසම්බන්ධ නොවේ.
  • X11 අතුරුමුහුණත් හරහා ආදානය දෘශ්‍යමාන නොවේ (උදාහරණයක් ලෙස VNC ක්‍රියා කරන ආකාරය මෙයයි).
  • root අවශ්‍යයි.

අනෙක් අතට, "XSelectExtensionEvent()" හරහා X සිදුවීම් වලට දායක විය හැක. ඔබට එබිකම් කරන්න පුළුවන් xinput කේතය. මම යන්න සඳහා මෙවැනි කිසිවක් සොයා නොගත් අතර, දළ වශයෙන් ක්රියාත්මක කිරීම වහාම C කේතයේ පේළි සියයක් ගෙන ඇත. දැනට ඒක පැත්තකින් තියන්න.

"ප්‍රතිලෝම" ප්‍රතිදානය දැනට අථත්‍ය යතුරුපුවරුව ඉස්කුරුප්පු කිරීම හරහා සිදු කෙරේ. Keybd_event හි කතුවරයාට ස්තූතියි, නමුත් එහි වියුක්තය ඉතා ඉහළ මට්ටමක පවතින අතර එය තවදුරටත් ප්‍රතිනිර්මාණය කිරීමට සිදුවේ. උදාහරණයක් ලෙස, මම 3 වන පේළිය තේරීමට නිවැරදි Win යතුර භාවිතා කරමි. සහ වම් Win පමණක් ආපසු සම්ප්රේෂණය වේ.

දන්නා දෝෂ

  • අපි "සංයුක්ත" ආදානය ගැන කිසිවක් නොදනිමු (උදාහරණ: ½). එය දැන් අවශ්ය නොවේ.
  • අපි හරි වින් එක වැරදියට සෙල්ලම් කරනවා. මගේ නඩුවේදී, එය අවධාරණය බිඳ දමයි.
  • පැහැදිලි ආදාන විග්‍රහ කිරීමක් නොමැත. ඒ වෙනුවට, කාර්යයන් කිහිපයක් තිබේ: Compare(), CtrlSequence(), RepeatSequence(), SpaceSequence(). ස්තුතියි nsmcan ඔබගේ රැකවරණය සඳහා: කේතය සහ මෙහි එය නිවැරදි කර ඇත. නිශ්චිත සම්භාවිතාවක් සහිතව, ප්රතිස්ථාපනය කිරීමේදී ඔබට දෝෂ අල්ලා ගත හැකිය.
    මෙම අවස්ථාවේදී මම "කෙසේද" යන්න නොදන්නා අතර ඕනෑම යෝජනාවක් සාදරයෙන් පිළිගනිමි.
  • (අනේ දෙවියනේ) නාලිකාවල තරඟකාරී භාවිතය (යතුරු පුවරු සිදුවීම්, මීයන් සිදුවීම්).

නිගමනය

කේතය සරලම ක්රියා පටිපාටියයි. ඒ වගේම මම වගේ මෝඩයි. එබැවින්, ඕනෑම කාර්මික ශිල්පියෙකුට පාහේ ඔහුට අවශ්‍ය දේ සම්පූර්ණ කිරීමට හැකි වනු ඇතැයි මම බලාපොරොත්තු වෙමි. මෙයට ස්තූතිවන්ත වන්නට, විනෝදය සඳහා පමණක් මෙන් මෙම නිෂ්පාදනය සහාය නොමැතිව විනාශ නොවනු ඇත.

සුබ පැතුම්!

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න