xneur အတွက် ပံ့ပိုးမှုအဆုံးသတ်ခြင်းသည် ပြီးခဲ့သည့် ခြောက်လအတွင်း ကျွန်ုပ်ကို နာကျင်စေခဲ့သည်။ (ကျွန်ုပ်၏ဒက်စတော့များပေါ်တွင် OpenSUSE 15.1 ထွန်းကားလာသည်နှင့်အမျှ xneur ကိုဖွင့်ထားသဖြင့်၊ windows သည် အာရုံစိုက်မှုမရှိတော့ဘဲ ကီးဘုတ်ထည့်သွင်းခြင်းဖြင့် အချိန်မီတုန်ခါသွားသည်).
"အိုး၊ ငါက အပြင်အဆင် မှားပြီး စာရိုက်နေပြန်ပြီ" - ဒါက ငါ့အလုပ်မှာ မတော်တရော် ဖြစ်တတ်တယ်။ ၎င်းသည် မည်သည့်အပြုသဘောမျှ မထည့်ပါ။

တစ်ချိန်တည်းမှာပဲ၊ ကျွန်တော် (ဒီဇိုင်းအင်ဂျင်နီယာတစ်ယောက်အနေနဲ့) ကျွန်တော်ဘာလိုချင်လဲဆိုတာကို ရှင်းရှင်းလင်းလင်း ဖော်ထုတ်နိုင်ပါတယ်။ ပြီးတော့ ကျွန်တော်လိုချင်တာက (ပထမဆုံး Punto Switcher ကနေပါ၊ ပြီးတော့ ကျေးဇူးတင်ပါတယ်) Windows Vista၊ နောက်ဆုံးတော့ ပြောင်းရွှေ့သွားပြီ Linux, xneur မှ) အတိအကျတစ်ခု။ မျက်နှာပြင်ပေါ်ရှိ အဓိပ္ပါယ်မရှိသော စကားလုံးများသည် မှားယွင်းသော အပြင်အဆင်တွင် ရှိနေကြောင်း သဘောပေါက်သည် (၎င်းသည် များသောအားဖြင့် စကားလုံးအသစ်တစ်လုံးကို ရိုက်ပြီးနောက်တွင် ဖြစ်လေ့ရှိသည်)၊ "Pause/Break" ကို နှိပ်ပြီး သင်ရိုက်နေသည့်အရာကို ရယူပါ။
လောလောဆယ်တွင် ထုတ်ကုန်တွင် အကောင်းဆုံး (ကျွန်တော့်အမြင်) လုပ်ဆောင်နိုင်စွမ်း/ရှုပ်ထွေးမှုအချိုးတစ်ခုရှိသည်။ မျှဝေချိန်တန်ပါပြီ။
TL;DR
နောက်ပိုင်းမှာ နည်းပညာဆိုင်ရာအသေးစိတ်အချက်တချို့ ရှိတော့မှာမို့ အရင်ဆုံး- စိတ်မရှည်သူများအတွက်
အောက်ပါအပြုအမူကို လောလောဆယ် hardcode လုပ်ထားပါသည်။
- "Pause/Break"- နောက်ဆုံးစကားလုံးကို Backspace လုပ်ပြီး အသုံးပြုနေသောဝင်းဒိုး (0 နှင့် 1 အကြား) တွင် အပြင်အဆင်ကို ပြောင်းပြီး ထပ်ရိုက်ပါ။
- "ဘယ်အရာကိုမှမပါဘဲ Ctrl ကိုဘယ်ဘက်"- တက်ကြွသောဝင်းဒိုး (0 နှင့် 1 အကြား) ရှိ အပြင်အဆင်ကို ပြောင်းသည်။
- "ဘယ်အရာကိုမှမပါဘဲ ဘယ် Shift"- ဖွင့်ထားသည့်ဝင်းဒိုးတွင် အပြင်အဆင် #0 ကိုဖွင့်သည်။
- "ဘာမှမပါဘဲ Right Shift"- အသုံးပြုနေသောဝင်းဒိုးတွင် အပြင်အဆင် #1 ကိုဖွင့်သည်။
အခုမှစပြီး အပြုအမူကို စိတ်ကြိုက်ပြင်ဖို့ စီစဉ်နေပါတယ်။ တုံ့ပြန်ချက်မရှိရင် စိတ်ဝင်စားစရာမဟုတ်ပါဘူး (အဲဒါကို ကျေနပ်ပါတယ်)။ Habr တွင် အလားတူပြဿနာများရှိသည့် ပရိသတ်၏ လုံလောက်သော ရာခိုင်နှုန်းရှိသည်ဟု ကျွန်တော်ထင်ပါတယ်။
NB လက်ရှိဗားရှင်းသည် keylogger ကို "/dev/input/" တွင် ပူးတွဲထားသောကြောင့် xswitcher ကို root လုပ်ပိုင်ခွင့်ဖြင့် စတင်ရပါမည်-
chown root:root xswitcher
chmod +xs xswitcherကျေးဇူးပြု. သတိပြုပါ: suid ပါသောဖိုင်၏ပိုင်ရှင်သည် root ဖြစ်ရပါမည်။
Paranoids (I am noခြွင်းချက်) တို့မှ မွေးထုတ်နိုင်ပါသည်။ site ပေါ်တွင်စုဝေး။ ဤကဲ့သို့သော တစ်ခုခု-
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 ပေါ်မူတည်၍)
၎င်းသည် မည်သည့်အခက်အခဲမှမရှိဘဲ အလုပ်လုပ်သည် (တစ်နေ့လျှင် ≈30 CPU စက္ကန့်၊ RSS တွင် ≈12 MB)။
အသေးစိတျ
ယခုအသေးစိတ်အချက်အလက်များအတွက်။
သိုလှောင်မှုတစ်ခုလုံးသည် မူလက ကျွန်ုပ်၏အိမ်မွေးတိရစ္ဆာန်ပရောဂျက်အတွက် ရည်ရွယ်ပြီး နောက်တစ်ခုဖန်တီးရန် အလွန်ပျင်းရိပါသည်။ ထို့ကြောင့်၊ အရာအားလုံးကို အမှိုက်ပုံ (ဖိုင်တွဲများတွင်သာ) စွန့်ပစ်ပြီး AGPL ("ပြောင်းပြန်မူပိုင်ခွင့်") ဖြင့် ဖုံးအုပ်ထားသည်။
xswitcher ကုဒ်ကို C ဖြန်းခြင်းများ အနည်းဆုံးဖြင့် golang ဖြင့် ရေးသားထားသည်။ ဤနည်းလမ်းသည် လုပ်သားအင်အားအနည်းဆုံး (ယခုအချိန်အထိ ကောင်းမွန်သည်) ဟု ယူဆပါသည်။ cgo မှတစ်ဆင့် လွဲမှားနေသည့်အရာများကို ချိတ်ဆက်နိုင်ဆဲဖြစ်သည်။
စာသားကို ဘယ်ကရသလဲ၊ ဘယ်ကချေးတာလဲ။ xneur ကုဒ် "ငါ့ကိုမလှုံ့ဆော်ခဲ့" ကတည်းက၊ ငါအစမှတ်အဖြစ်ယူခဲ့သည်။ .
"/dev/input/" ကိုအသုံးပြုခြင်းတွင် ၎င်း၏အားသာချက်များ (အလိုအလျောက်ပြန်လုပ်သည့်ခလုတ်အပါအဝင် အရာအားလုံးကိုမြင်နိုင်သည်) နှင့် အားနည်းချက်များရှိသည်။ အားနည်းချက်များမှာ အောက်ပါအတိုင်းဖြစ်သည်။
- အလိုအလျောက်ပြန်လုပ်ခြင်း (ကုဒ် "2" ပါသည့် ဖြစ်ရပ်များ) သည် X နှင့် ထပ်ခါထပ်ခါ ဆက်စပ်မှုမရှိပါ။
- X11 အင်တာဖေ့စ်များမှတစ်ဆင့် ထည့်သွင်းခြင်းကို မမြင်နိုင် (ဥပမာ၊ ဤသည်မှာ VNC အလုပ်လုပ်ပုံဖြစ်သည်)။
- Root လိုပါတယ်။
အခြားတစ်ဖက်တွင် သင်သည် "XSelectExtensionEvent()" မှတစ်ဆင့် X ဖြစ်ရပ်များသို့ စာရင်းသွင်းနိုင်ပါသည်။ မှာကြည့်ရှုနိုင်ပါတယ်။ . သွားရန်အတွက် ဆင်တူသည့်အရာတစ်ခုကို ကျွန်ုပ်မတွေ့ခဲ့ဘဲ ကြမ်းတမ်းသော အကောင်အထည်ဖော်မှုသည် ကျွန်ုပ်အား C ကုဒ်စာကြောင်းတစ်ရာကို ချက်ချင်းပေးခဲ့သည်။ လောလောဆယ်တော့ ဘေးဖယ်ထားလိုက်တယ်။
ပကတိ ကီးဘုတ်ပေါ်တွင် ခလုတ်နှိပ်ခြင်းဖြင့် "back" အထွက်ကို လက်ရှိလုပ်ဆောင်နေပါသည်။ keybd_event ၏ ရေးသားသူအား ကျေးဇူးတင်သော်လည်း ထိုနေရာတွင် အဆင့်မြင့်မားလွန်းသော စိတ်ကူးစိတ်သန်းများ ရှိနေသဖြင့် ၎င်းကို နောက်ပိုင်းတွင် ပြန်လည်လုပ်ဆောင်ရမည်ဖြစ်ပါသည်။ ဥပမာအားဖြင့်၊ ကျွန်ုပ်၏ကိစ္စတွင်၊ ညာဘက် Win key သည် 3rd အတန်းကိုရွေးချယ်သည်။ ဘယ်ဘက် Win key ကိုသာ ပြန်ပို့သည်။
သိပြီးသားကိစ္စများ
- "ပေါင်းစပ်" ထည့်သွင်းမှုအကြောင်း ကျွန်ုပ်တို့ ဘာမှမသိပါ (ဥပမာ- ½)။ လောလောဆယ် မလိုအပ်ပါဘူး။
- မမှန်မကန် မျိုးပွားတာ မှန်ပါတယ်။ ငါ့ကိစ္စတွင်၊ ၎င်းသည် လေယူလေသိမ်းနေရာချထားမှုကို ပျက်ပြားစေသည်။
- ရှင်းရှင်းလင်းလင်း ထည့်သွင်း ပိုင်းခြားခြင်း မရှိပါ။ ယင်းအစား၊ လုပ်ဆောင်ချက်များစွာရှိပါသည်- Compare(), CtrlSequence(), RepeatSequence(), SpaceSequence()။ Спасибо မင်းရဲ့အာရုံအတွက်- ငါ အဲဒါကို ကုဒ်နဲ့ ဒီမှာပြင်ထားတယ်။ အစားထိုးသည့်အခါတွင် အမှားအယွင်းများကို ဖမ်းမိနိုင်ခြေ ရှိပါသည်။
ဤအချိန်တွင် ကျွန်ုပ်သည် "မည်ကဲ့သို့ဖြစ်သင့်သည်" ကို မသိသည့်အပြင် အကြံပြုချက်တစ်စုံတစ်ရာ ရရှိသည့်အတွက် ဝမ်းမြောက်မိပါသည်။ - (သြော် ထိတ်လန့်စရာ) ချန်နယ်များကို တစ်ပြိုင်နက်အသုံးပြုခြင်း (ကီးဘုတ်ဖြစ်ရပ်များ၊ ကြွက်ဖြစ်ရပ်များ)။
ကောက်ချက်
ကုဒ်သည် အရိုးရှင်းဆုံး လုပ်ထုံးလုပ်နည်းဖြစ်သည်။ ငါကဲ့သို့ မိုက်မဲ၏။ ဒီတော့ နည်းပညာသမားတိုင်းနီးပါး သူတို့လိုချင်တာကို ပြီးအောင်ရေးနိုင်လိမ့်မယ်လို့ မျှော်လင့်ရင်း ကိုယ့်ကိုယ်ကို ဖြေသိမ့်လိုက်တယ်။ ဤကျေးဇူးကြောင့်၊ ဤထုတ်ကုန်သည် အပျော်တမ်းသက်သက်ကဲ့သို့ ပံ့ပိုးမှုမရှိဘဲ ပျက်သုဉ်းမည်မဟုတ်ပါ။
ကံကောင်းပါစေ!
source: www.habr.com
