Neien Analog vum Punto Switcher fir Linux: xswitcher

D'Enn vun der xneur Ënnerstëtzung huet mir e puer Leed an de leschte sechs Méint verursaacht. (mat dem Advent vun OpenSUSE 15.1 op meng Desktops: mat xneur aktivéiert, verléieren d'Fënstere Fokus a flikker lëschteg an der Zäit mat Tastaturinput).

"Oh, verdammt, ech hunn erëm ugefaang an de falsche Layout ze tippen" - a menger Aarbecht geschitt dat onanstänneg dacks. An et bréngt näischt Positives derbäi.

Neien Analog vum Punto Switcher fir Linux: xswitcher
Zur selwechter Zäit kann ech (als Designingenieur) ganz kloer formuléieren wat ech wëll. Mee ech wollt (fir d'éischt vum Punto Switcher, an dann, dank Windows Vista, endlech op Linux wiesselen, vun xneur) genau eng Saach. Nodeems Dir gemierkt hutt datt den Dreck um Écran am falschen Layout ass (dëst geschitt normalerweis um Enn vun engem neie Wuert tippen), stompt op "Pause / Break". A kritt wat Dir gedréckt hutt.

Am Moment huet de Produit den optimalen (vu menger Siicht) Funktionalitéit / Komplexitéit Verhältnis. Et ass Zäit ze deelen.

TL.DR

Et ginn all méiglech technesch Detailer méi spéit, also als éischt - link "to touch" fir déi Ongedëlleg.

De Moment ass de folgende Verhalen hardcoded:

  • "Pause / Break": réckelt dat lescht Wuert zréck, wiesselt de Layout an der aktiver Fënster (tëscht 0 an 1) a wielt erëm.
  • "Lénks Ctrl ouni näischt": wiesselt de Layout an der aktiver Fënster (tëscht 0 an 1).
  • "Left Shift ouni eppes": schalt Layout Nr 0 an der aktiver Fënster op.
  • "Recht Verréckelung ouni eppes": schalt Layout Nr 1 an der aktiver Fënster op.

Vun elo un plangen ech d'Verhalen unzepassen. Ouni Feedback ass et net interessant (Ech sinn souwisou gutt domat). Ech gleewen datt op Habré e genuch Prozentsaz vum Publikum mat ähnleche Probleemer gëtt.

NB Well an der aktueller Versioun ass de Keylogger un "/dev/input/" befestegt, xswitcher muss mat root Rechter lancéiert ginn:

chown root:root xswitcher
chmod +xs xswitcher

Opgepasst: De Besëtzer vun der Datei mat suid muss root sinn, well wien och de Besëtzer ass, gëtt beim Start an Süd ëmgewandelt.

Paranoiden (Ech si keng Ausnahm) kënnen aus klonen anerer gesot a montéieren op der Plaz. Esou:

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

Füügt Autostart fir ze schmaachen (je no DE).

Et funktionnéiert, "fragt net fir Porridge" (≈30 Sekonnen CPU pro Dag, ≈12 MB an RSS).

Méi Detailer

Elo - d'Detailer.

De ganze Repository war ursprénglech fir mäi Hausdéierprojet gewidmet, an ech sinn ze faul fir en aneren unzefänken. Also, alles gëtt opgepaakt (nëmmen an Dossieren) an ofgedeckt vun AGPL ("Reverse Patent").

Den xswitcher-Code gëtt a Golang geschriwwen, mat minimalen Inklusiounen vu C. Et gëtt ugeholl datt dës Approche am mannsten Effort wäert (bis elo huet et). Wärend d'Fäegkeet behalen ze verbannen wat fehlt mat cgo.

Den Text enthält Kommentaren iwwer wou et ausgeléint gouf a firwat. Well den xneur Code "huet mech net inspiréiert", Ech hunn et als Ausgangspunkt geholl loloswitcher.

D'Benotzung vun "/dev/input/" huet souwuel seng Virdeeler (alles ass sichtbar, inklusiv de gedréckte Auto-Widderhuelungsschlëssel) an Nodeeler. D'Nodeeler sinn:

  • Auto-Widderhuelung (Evenementer mam Code "2") korreléiert net mat Widderhuelung mat x.
  • Input duerch X11 Schnëttplazen ass net siichtbar (dëst ass wéi VNC Wierker, zum Beispill).
  • Braucht root.

Op der anerer Säit ass et méiglech op X Eventer iwwer "XSelectExtensionEvent()" ze abonnéieren. Dir kënnt kucken op xinput Code. Ech hunn näischt wéi dëst fonnt fir ze goen, an déi rau Ëmsetzung huet direkt honnert Zeilen C Code geholl. Setzt et fir de Moment op der Säit.

De "ëmgedréint" Ausgang gëtt momentan duerch Schrauwen vun der virtueller Tastatur gemaach. Merci dem Auteur vun keybd_event, mä d'abstraktioun do ass ze héich-Niveau a muss weider nei gemaach ginn. Zum Beispill benotzen ech de richtege Win Schlëssel fir déi 3. Zeil ze wielen. An nëmmen de lénksen Win gëtt zréck iwwerdroen.

Bekannt Bugs

  • Mir wëssen näischt iwwer "komposit" Input (Beispill: ½). Et ass elo net néideg.
  • Mir spillen déi richteg Gewënn falsch. A mengem Fall brécht et den Akzent.
  • Et gëtt keng kloer Input Parsing. Amplaz ginn et verschidde Funktiounen: Compare (), CtrlSequence (), RepeatSequence (), SpaceSequence (). Spass nsmcan fir Är Suergfalt: korrigéiert et am Code an hei. Mat enger gewësser Wahrscheinlechkeet kënnt Dir Bugs beim Ersetzen fangen.
    Zu dësem Zäitpunkt weess ech net "wéi" a géif all Virschléi begréissen.
  • (Oh Gott) kompetitiv Notzung vu Kanäl (KeyboardEvents, miceEvents).

Konklusioun

De Code ass déi einfachst Prozedur. An domm wéi ech. Also, ech flaach mech mat der Hoffnung datt bal all Techniker fäeg ass ze kompletéieren wat e wëllt. An dank dësem wäert dëst Produkt net ouni Ënnerstëtzung stierwen, wéi déi meescht just-fir-Spaass.

Vill Gléck!

Source: will.com

Setzt e Commentaire