Analog anyar Punto Switcher pikeun linux: xswitcher

Tungtung pangrojong xneur parantos nyababkeun kuring sangsara dina genep bulan katukang. (kalayan munculna OpenSUSE 15.1 dina desktop kuring: kalayan xneur diaktipkeun, windows leungit fokus sareng kedip-kedip lucu dina waktosna sareng input keyboard).

"Oh, sial, kuring mimiti ngetik deui dina tata letak anu salah" - dina karya kuring ieu sering kajantenan. Jeung teu nambahan nanaon positif.

Analog anyar Punto Switcher pikeun linux: xswitcher
Dina waktos anu sami, kuring (sakumaha insinyur desain) tiasa rada jelas ngarumuskeun naon anu dipikahoyong. Tapi kuring hayang (mimiti ti Punto Switcher, lajeng, hatur nuhun kana Windows Vista, tungtungna pindah ka Linux Ubuntu, ti xneur) persis hiji hal. Saanggeus sadar yén sampah dina layar aya dina perenah salah (ieu biasana lumangsung dina tungtung ngetikkeun kecap anyar), stomp on "Reureuh / putus". Sareng kéngingkeun naon anu anjeun cetak.

Di momen, produk ngabogaan optimal (ti sudut pandang kuring) fungsionalitas / rasio pajeulitna. Waktosna bagikeun.

TL.DR

Bakal aya sagala rupa rinci teknis engké, jadi mimitina - link "ngarampa" keur nu teu sabar.

Ayeuna paripolah di handap ieu hardcoded:

  • "Reureuh / putus": backspaces kecap panungtungan, pindah tata perenah dina jandela aktip (antara 0 jeung 1) sarta dial deui.
  • "Kénca Ctrl tanpa nanaon": pindah tata perenah dina jandela aktip (antara 0 jeung 1).
  • "Kénca Shift tanpa nanaon": ngahurungkeun perenah No.. 0 dina jandela aktip.
  • "Shift Katuhu tanpa nanaon": Ngahurungkeun perenah No.. 1 dina jandela aktip.

Ti ayeuna kuring rencana pikeun ngaropea kabiasaan. Tanpa eupan balik, éta henteu pikaresepeun (kuring henteu kunanaon). Kuring yakin yén dina Habré bakal aya perséntase cukup panongton kalawan masalah sarupa.

NB Sabab dina versi ayeuna, keylogger napel "/ dev / input /", xswitcher kudu dibuka kalawan hak root:

chown root:root xswitcher
chmod +xs xswitcher

Perhatikeun: Nu boga file kalawan suid kudu root, sabab saha wae nu bogana bakal robah jadi suid kana ngamimitian.

Paranoids (Kuring teu iwal) bisa clone tina sewang jeung ngumpul dina situs. Sapertos kitu:

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

Tambahkeun autostart kana rasa (gumantung kana DE).

Gawéna, "teu menta bubur" (≈30 detik CPU per poé, ≈12 MB dina RSS).

rinci

Ayeuna - rinci.

Sakabeh gudang asalna dedicated ka proyék piaraan kuring, jeung Abdi teuing puguh ngamimitian sejen. Janten, sadayana ditumpuk (ngan dina polder) sareng ditutupan ku AGPL ("patén sabalikna").

Kodeu xswitcher ditulis dina golang, kalawan inclusions minimal C. Hal ieu dianggap yén pendekatan ieu bakal ngahasilkeun jumlah sahenteuna usaha (sajauh eta boga). Bari ngajaga kamampuhan pikeun nyambungkeun naon leungit maké cgo.

Téks éta ngandung koméntar ngeunaan tempat injeuman sareng kunaon. Sabab kode xneur "teu mere ilham kuring", Kuring nyandak eta salaku titik awal loloswitcher.

Ngagunakeun "/ dev / input /" boga duanana kaunggulan na (sadayana katingali, kaasup kenop ulang otomatis dipencet) jeung kalemahan. Kakurangan nyaéta:

  • Ulang otomatis (kajadian nganggo kode "2") henteu pakait sareng pengulangan sareng x.
  • Input ngaliwatan interfaces X11 teu katempo (ieu kumaha VNC jalan, contona).
  • Peryogi akar.

Di sisi séjén, kasebut nyaéta dimungkinkeun pikeun ngalanggan X acara via "XSelectExtensionEvent ()". Anjeun tiasa ngintip kodeu xinput. Kuring teu manggihan nanaon jiga kieu for balik, sarta palaksanaan kasar geuwat nyandak saratus garis kode C. Sisihkeun pikeun ayeuna.

The "ngabalikeun" kaluaran ayeuna dijieun ngaliwatan screwing keyboard virtual. Hatur nuhun ka panulis keybd_event, tapi abstraksi aya teuing tingkat tinggi na kudu redone salajengna. Contona, kuring make kenop Win katuhu pikeun milih baris 3rd. Sarta ngan Win kénca dikirimkeun deui.

Bugs dipikawanoh

  • Kami henteu terang nanaon ngeunaan input "komposit" (conto: ½). Henteu diperyogikeun ayeuna.
  • Urang maén Win katuhu lepat. Bisi kuring, éta ngarecah tekenan.
  • Henteu aya parsing input anu jelas. Gantina, aya sababaraha fungsi: Bandingkeun (), CtrlSequence (), RepeatSequence (), SpaceSequence (). Спасибо nsmcan pikeun perawatan anjeun: dilereskeun dina kode jeung dieu. Kalayan kamungkinan anu tangtu, anjeun tiasa nyekel bug nalika ngagentos.
    Dina titik ieu kuring henteu terang "kumaha carana" sareng bakal ngabagéakeun saran naon waé.
  • (Duh Gusti) pamakéan kalapa saluran (keyboardEvents, miceEvents).

kacindekan

Kode nyaéta prosedural pangbasajanna. Jeung bodo kawas kuring. Ku kituna, kuring sanjung sorangan kalawan harepan yén ampir sagala teknisi bakal tiasa ngalengkepan naon anjeunna hayang. Sareng hatur nuhun kana ieu, produk ieu moal musnah tanpa dukungan, sapertos anu paling ngan ukur pikeun-senang.

Good tuah!

sumber: www.habr.com

Tambahkeun komentar