Linux-д зориулсан Punto Switcher-ийн шинэ аналог: xswitcher

Xneur-ийн дэмжлэгийн төгсгөл нь надад сүүлийн зургаан сарын хугацаанд бага зэрэг зовлон учруулсан. (Миний ширээний компьютер дээр OpenSUSE 15.1 гарч ирснээр: xneur-г идэвхжүүлсэн үед цонхнууд анхаарлаа алдаж, гарны оролттой үед инээдтэй анивчдаг).

"Өө, хараал ид, би дахиад буруу байрлалаар бичиж эхлэв" - миний ажилд энэ нь ихэвчлэн зохисгүй тохиолддог. Мөн энэ нь эерэг зүйл нэмдэггүй.

Linux-д зориулсан Punto Switcher-ийн шинэ аналог: xswitcher
Үүний зэрэгцээ би (дизайнерын хувьд) юу хүсч байгаагаа маш тодорхой томъёолж чадна. Гэхдээ би (эхлээд Punto Switcher-ээс, дараа нь Windows Vista-ийн ачаар эцэст нь Linux руу, xneur-аас) яг нэг зүйлийг хүсч байсан. Дэлгэц дээрх хог хаягдал буруу байрлалтай байгааг мэдээд (энэ нь ихэвчлэн шинэ үг бичихийн төгсгөлд тохиолддог) "Түр зогсоох/Завсарлага" дээр гишгээрэй. Мөн хэвлэсэн зүйлээ аваарай.

Одоогийн байдлаар бүтээгдэхүүн нь хамгийн оновчтой (миний бодлоор) функциональ / нарийн төвөгтэй байдлын харьцаатай байна. Хуваалцах цаг боллоо.

TL.DR

Дараа нь бүх төрлийн техникийн дэлгэрэнгүй мэдээлэл байх тул эхлээд - "хүрэх" холбоос тэвчээргүй хүмүүсийн хувьд.

Одоогоор дараах зан үйл хатуу кодлогдсон байна:

  • “Завсарлага/Завсарлага”: сүүлчийн үгийг буцааж, идэвхтэй цонхны байршлыг (0-ээс 1-ийн хооронд) сольж, дахин залгана.
  • "Юу чгүйгээр зүүн Ctrl": идэвхтэй цонхны байршлыг сэлгэдэг (0 ба 1 хооронд).
  • "Юу чгүйгээр зүүн тийш шилжих": идэвхтэй цонхны №0 байрлалыг асаана.
  • "Юу чгүйгээр баруун тийш шилжих": идэвхтэй цонхны №1 байрлалыг асаана.

Би одооноос эхлэн зан төлөвийг өөрчлөхөөр төлөвлөж байна. Санал хүсэлтгүйгээр энэ нь сонирхолтой биш юм (ямар ч байсан би үүнд сайн байна). Хабре дээр ижил төстэй асуудалтай үзэгчдийн хангалттай хувь байх болно гэдэгт би итгэж байна.

NB Учир нь Одоогийн хувилбарт keylogger-г "/dev/input/"-д хавсаргасан байгаа бөгөөд xswitcher-ийг үндсэн эрхээр ажиллуулах ёстой:

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, RSS дээр ≈12 MB).

Дэлгэрэнгүй мэдээллийг харах

Одоо - дэлгэрэнгүй.

Хадгалах газар бүхэлдээ миний тэжээвэр амьтдын төсөлд зориулагдсан байсан бөгөөд би өөр нэг төсөл эхлүүлэхээс залхуу байна. Тиймээс, бүх зүйл овоолсон (зөвхөн хавтсанд) бөгөөд AGPL ("урвуу патент") хамрагдсан.

xswitcher кодыг голанг хэлээр бичсэн бөгөөд C хэлийг хамгийн бага хэмжээгээр оруулав. Энэ арга нь хамгийн бага хүчин чармайлт гаргахад хүргэнэ гэж үздэг (одоогоор). Cgo-г ашиглан дутуу байгаа зүйлээ холбох чадварыг хадгалахын зэрэгцээ.

Уг бичвэр нь хаанаас, яагаад зээлсэн тухай тайлбарыг агуулдаг. Учир нь xneur код "надад урам зориг өгөөгүй" гэж би үүнийг эхлэл болгон авсан loloswitcher.

"/dev/input/"-г ашиглах нь давуу талтай (автомат давтах товчлуурыг оруулаад бүх зүйл харагдах болно) болон сул талуудтай. Сул талууд нь:

  • Автомат давталт ("2" кодтой үйл явдал) нь x-тэй давталттай хамааралгүй.
  • X11 интерфэйсээр дамжуулан оролт харагдахгүй байна (жишээ нь VNC ингэж ажилладаг).
  • Үндэс хэрэгтэй.

Нөгөөтэйгүүр, "XSelectExtensionEvent()"-ээр дамжуулан X үйл явдалд бүртгүүлэх боломжтой. Та харж болно xinput код. Би үүнтэй төстэй зүйл олж чадаагүй бөгөөд бүдүүлэг хэрэгжүүлэлт тэр даруй зуун мөр С кодыг авсан. Одоохондоо хойш тавь.

Одоогийн байдлаар "урвуу" гаралтыг виртуал гарыг шураглах замаар хийж байна. keybd_event-ийн зохиогчид баярлалаа, гэхдээ хийсвэрлэл нь хэтэрхий өндөр түвшинд байгаа тул цаашид дахин хийх шаардлагатай болно. Жишээлбэл, би баруун Win товчлуурыг ашиглан 3-р мөрийг сонгоно. Мөн зөвхөн зүүн Win-ийг буцааж дамжуулдаг.

Мэдэгдэж буй алдаанууд

  • Бид "нийлмэл" оролтын талаар юу ч мэдэхгүй (жишээ нь: ½). Яг одоо хэрэггүй.
  • Бид зөв Win-ыг буруу тоглож байна. Миний хувьд энэ нь тодотголыг эвддэг.
  • Тодорхой оролт задлан шинжилдэггүй. Үүний оронд хэд хэдэн функц байдаг: Compare(), CtrlSequence(), RepeatSequence(), SpaceSequence(). Спасибо nsmcan Таны анхаарал халамж: код болон энд үүнийг зассан. Тодорхой магадлалаар та солихдоо алдаа гаргаж болно.
    Энэ үед би "хэрхэн" гэдгийг мэдэхгүй байгаа бөгөөд аливаа санал хүсэлтийг хүлээж авах болно.
  • (Өө бурхан минь) сувгуудын өрсөлдөөнт хэрэглээ (keyboardEvents, moceEvents).

дүгнэлт

Код нь хамгийн энгийн процедур юм. Бас над шиг тэнэг. Тиймээс бараг ямар ч техникч хүссэн зүйлээ хийж чадна гэж найдаж өөрийгөө магтдаг. Үүний ачаар энэ бүтээгдэхүүн ихэнх зугаа цэнгэлийнх шиг дэмжлэггүйгээр мөхөхгүй.

Амжилт хүсье!

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх