Rezolvarea problemei cu comutarea prin alt+shift în Linux, în aplicațiile Electron

Salut, colegi!

Vreau să-mi împărtășesc soluția unei probleme menționate în titlu. Inspirat de un coleg, am scris acest articol. brnovk, care nu s-a dat înapoi și mi-a propus o soluție parțială (pentru mine). Am realizat un 'workaround' care m-a ajutat. Împărtășesc asta cu voi.

Descrierea problemei

Am folosit Ubuntu 18.04 pentru lucru și, în ultima vreme, am observat că atunci când schimb layout-ul cu alt+shift în aplicații precum Visual Studio Code, Skype, Slack și altele create cu Electron, apare următoarea problemă: focusul de pe câmpul de introducere trece la bara de sus a ferestrei (meniu). Din alte motive, am trecut la Fedora + KDE și am realizat că problema nu a dispărut. În căutarea unei soluții, am găsit un articol minunat. Reparăm Skype cu propriile mâini. Îi mulțumesc foarte mult tovarășului brnovk, care a descris în detaliu problema și a împărtășit metoda lui de rezolvare. Însă metoda specificată în articol a rezolvat problema doar pentru o singură aplicație, și anume Skype. Era important pentru mine să rezolv și problema cu Visual Studio Code, deoarece să scrii mesaje cu un meniu săltăreț este, deși enervant, nu atât de grav când te ocupi de dezvoltare. În plus, colegul a propus o soluție în care meniul aplicației dispare complet, iar eu nu aș vrea să pierd meniul din VS Code.

Am încercat să înțeleg despre ce este vorba.

Așa că am decis să aloc timp pentru a înțelege problema. Voi descrie pe scurt ce cale am parcurs; poate cineva mai bine informat în această chestiune mă va ajuta să clarific dificultățile cu care m-am confruntat.

Am deschis Visual Studio Code și am început să apas diferite combinații de Alt+, observând reacția aplicației. Practic, în toate cazurile, toate combinațiile, cu excepția Alt+Shift, au funcționat fără pierderea focusului. Aveam impresia că cineva 'mănâncă' Shift-ul apăsat după ce am ținut Alt-ul, iar aplicația crede că am apăsat Alt-ul, apoi nu am apăsat nimic, am eliberat Alt-ul și aceasta mi-a pierdut focusul în meniu, ceea ce părea logic pentru ea.

Am deschis setările pentru schimbarea layout-ului tastaturii (știți, acel lung lista cu opțiuni de bifare și diverse setări pentru taste) și am configurat schimbarea layout-ului prin apăsarea tastei Alt, fără apăsări suplimentare.

Rezolvarea problemei cu comutarea prin alt+shift în Linux, în aplicațiile Electron

După aceasta, Alt+Tab a încetat să funcționeze pentru comutarea ferestrelor. A funcționat doar Tab, adică cineva din nou mi-a "mâncat" Alt. Cine este acest „cineva” nu mai rămăsese întrebări, dar nu am nici o idee despre ce pot face cu el.

Dar deoarece trebuia să rezolv problema într-un fel, atunci mi-a venit în minte soluția:

  1. În setări, dezactivați hotkey-ul pentru schimbarea aranjamentului tastaturii (debifați toate căsuțele din secțiunea Schimbare la un alt aranjament);
  2. Creează-ți propriul hotkey, care să îmi schimbe aranjamentul

Descrierea soluției

Pentru început, vom instala un program care permite atribuirea de comenzi tastelor Xbindkeys. Din păcate, instrumentele standard nu mi-au permis să creez un hotkey pentru o combinație de tip Alt+Shift printr-o interfață frumoasă. Se poate face pentru Alt+S, Alt+1, Alt+shift+Y etc., dar pentru sarcina noastră nu se potrivește.

sudo dnf install xbindkeysrc

Mai multe informații despre aceasta sunt pe ArchWiki
Apoi, vom crea un exemplu de fișier de configurare pentru program. Exemplul este destul de scurt, cu câteva comenzi, exact ceea ce trebuie pentru a înțelege cum să lucrăm cu el:

xbindkeys -d > ~/.xbindkeysrc

După cum se poate observa din exemplul care se află în fișier, trebuie să indicăm hotkey-ul pe care dorim să-l folosim și comanda care trebuie să fie executată. Arată simplu.


# Examples of commands:
"xbindkeys_show"
  control+shift + q
# set directly keycode (here control + f with my keyboard)
"xterm"
  c:41 + m:0x4

Ca hotkey, puteți folosi o scriere ușor de înțeles sau utiliza codurile tastelor. La mine a funcționat doar cu coduri, dar nimeni nu vă interzice să experimentați puțin.

Pentru a obține codurile, trebuie să folosiți comanda:

xbindkeys -k

Se va deschide o fereastră mică "X". Trebuie să apăsați tastele doar atunci când fereastra are focus! Numai în acest caz veți vedea în terminal ceva de genul:


[podkmax@localhost ~]$ xbindkeys -k
Apăsați combinația de taste sau/și faceți clic sub fereastră.
Puteți folosi una dintre cele două linii după "NoCommand"
în $HOME/.xbindkeysrc pentru a lega o tastă.
"(Funcția schemei)"
    m:0x4 + c:39
    Control + s

În cazul meu, combinația pentru tastele Alt+Shift arată astfel:

m:0x8 + c:50

Acum trebuie să facem astfel încât atunci când apăsăm această combinație, să aibă loc exact schimbarea aranjamentului. Am găsit doar o singură comandă funcțională pentru schimbarea aranjamentului:


setxkbmap ru
setxkbmap us

După cum se poate observa din exemplu, aceasta poate activa doar unul sau altul dintre aranjamente, așa că nu mi-a venit în minte altceva decât să scriu un script.


vim ~/layout.sh
#!\/bin\/bash
LAYOUT=$(setxkbmap -print | awk -F + '/xkb_symbols/ {print $2}')
if [ "$LAYOUT" == "ru" ]
        then `/usr/bin/setxkbmap us`
        else `/usr/bin/setxkbmap ru`
fi

Acum, dacă fișierele .xbindkeysrc și layout.sh se află în aceeași directoare, formatul final al fișierului .xbindkeysrc arată astfel:


# Examples of commands:

"xbindkeys_show"
  control+shift + q

# set directly keycode (here control + f with my keyboard)
"xterm"
  c:41 + m:0x4

# specify a mouse button
"xterm"
  control + b:2
#А вот то, что добавил я
"./layout.sh"
  m:0x8 + c:50

După aceasta, aplicăm modificările:


xbindkeys -p

Și se poate verifica. Nu uitați să dezactivați orice opțiuni de comutare a layout-ului în setările implicite.

Rezultatul

Colegi, sper ca acest articol să ajute pe cineva să scape rapid de problema enervantă. Eu personal mi-am petrecut întreaga zi liberă încercând să înțeleg și să rezolv problema într-un fel, astfel încât să nu mă mai distrag de la lucru. Am scris acest articol cu scopul de a economisi timp și nervi altora. Mulți dintre voi folosiți o metodă alternativă de comutare a layout-ului și nu înțelegeți care este problema. Mi-ar plăcea să pot comuta folosind Alt+Shift. Și vreau să funcționeze exact așa. Dacă împărtășești opinia mea și te-ai confruntat cu această problemă, acest articol ar trebui să te ajute.

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster