Reševanje težave s preklopom z alt+shift Linux, v elektronskih aplikacijah

Pozdravljeni kolegi!

Rad bi delil svojo rešitev problema, omenjenega v naslovu. K pisanju tega članka me je navdihnil kolega. Brnovk, ki si je vzel trud in mi ponudil delno (zame) rešitev problema. Ustvaril sem svojo "goljufijo", ki mi je pomagala. Delim jo z vami.

Opis problema

Использовал Ubuntu 18.04 для работы и в последнее время заметил, что при переключении раскладки по alt+shift в таких приложениях, как Visual Studio Code, Skype, Slack и прочих, которые созданы с помощью Electron возникает следующая проблема: фокус с поля ввода, переходит к верхней панели окна (меню). По иным причинам переехал в Fedora + KDE и понял, что проблема никуда не делась. В поисках решения нашёл замечательную статью Popravljanje Skypea z lastnimi rokamiNajlepša hvala, tovariš. Brnovk, ki je podrobno opisal težavo in delil svojo rešitev. Vendar je rešitev, opisana v članku, delovala le z eno aplikacijo, Skypeom. Zame je bilo ključnega pomena tudi, da sem razumel Visual Studio Code, saj je pošiljanje sporočil s skakalnim menijem sicer nadležno, vendar ni tako hudo, če razvijaš. Poleg tega je kolega predlagal rešitev, s katero meni aplikacije popolnoma izgine, in res nisem hotel izgubiti menija v VS Code.

Poskušal sem razumeti, kaj se dogaja.

Zato sem se odločil, da si vzamem čas in ugotovim, kaj se dogaja. Na kratko bom opisal pot, ki sem jo ubral; morda mi lahko kdo, ki je bolj podkovan na tem področju, pomaga razjasniti težave, s katerimi sem se srečal.

Odprl sem Visual Studio Code in začel pritiskati različne kombinacije Alt+<%something%> ter opazoval odziv aplikacije. V skoraj vseh primerih so vse kombinacije razen Alt+Shift delovale brez izgube fokusa. Zdelo se je, kot da nekaj požira tipko Shift, ki sem jo pritisnil po tem, ko sem držal Alt, in aplikacija je mislila, da sem pritisnil Alt, nato pa ni pritisnila ničesar, spustila Alt in veselo premaknila moj fokus na svoj meni, kar se ji je zdelo povsem logično.

Odprl sem nastavitve preklapljanja razporeditve tipkovnice (saj veste, tisti dolgi seznam s potrditvenimi polji in vsemi mogočimi nastavitvami za tipke) in nastavil preklapljanje razporeditve na tipko Alt, brez dodatnega pritiska.

Reševanje težave s preklopom z alt+shift Linux, v elektronskih aplikacijah

Po tem je Alt+Tab prenehal delovati za preklapljanje med okni. Delal je samo Tab, kar je pomenilo, da mi je nekdo spet "jedel" tipko Alt. Ni bilo več vprašanja, kdo je ta "nekdo", vendar nisem imel pojma, kaj naj z njim storim.

Ker pa je bilo treba problem nekako rešiti, se je na misel pojavila rešitev:

  1. V nastavitvah onemogočite bližnjico za preklapljanje med razporeditvami tipkovnice (počistite vsa potrditvena polja v razdelku Preklopi na drugo razporeditev);
  2. Ustvari mojo bližnjico, ki bi spremenila mojo postavitev

Opis rešitve

Najprej namestimo Xbindkeys, program, ki omogoča dodeljevanje ukazov tipkam. Žal mi vgrajena orodja niso omogočila ustvarjanja bližnjice za kombinacijo, kot je Alt+Shift, z uporabo privlačnega vmesnika. Lahko jo ustvarite za Alt+S, Alt+1, Alt+shift+Y in tako naprej, vendar to ni primerno za naše namene.

sudo dnf install xbindkeysrc

Več podrobnosti o tem najdete na ArchWiki
Nato ustvarimo vzorčno datoteko z nastavitvami za program. Je precej kratka, z le nekaj ukazi, ravno tisto, kar potrebujete za razumevanje uporabe:

xbindkeys -d > ~/.xbindkeysrc

Kot lahko vidite iz primera v datoteki, moramo določiti bližnjico, ki jo želimo uporabiti, in ukaz, ki ga je treba izvesti. Izgleda preprosto.


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

Kot bližnjico lahko uporabite človeku berljivo črkovanje ali kode tipk. Kode tipk so bile edino, kar je delovalo zame, vendar lahko malo eksperimentirate.

Za pridobitev kod morate uporabiti ukaz:

xbindkeys -k

Odprlo se bo majhno okno z oznako »X«. Tipke pritiskajte le, ko je to okno v fokusu! Šele takrat boste v terminalu videli nekaj takega:


[podkmax@localhost ~]$ xbindkeys -k
Press combination of keys or/and click under the window.
You can use one of the two lines after "NoCommand"
in $HOME/.xbindkeysrc to bind a key.
"(Scheme function)"
    m:0x4 + c:39
    Control + s

V mojem primeru kombinacija tipk Alt + Shift izgleda takole:

m:0x8 + c:50

Zdaj moram narediti tako, da bo s pritiskom na to kombinacijo dejansko preklopila razporeditev tipkovnice. Našel sem le en delujoč ukaz za določanje razporeditve:


setxkbmap ru
setxkbmap us

Kot lahko vidite iz primera, lahko omogoči le eno ali drugo postavitev, zato mi na misel ni prišlo nič drugega kot pisanje skripte.


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

Če se datoteke .xbindkeysrc in layout.sh nahajajo v istem imeniku, je končni videz datoteke .xbindkeysrc videti takole:


# 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

Po tem uporabimo spremembe:


xbindkeys -p

In lahko preverite. Ne pozabite onemogočiti možnosti preklapljanja postavitve v privzetih nastavitvah.

Skupaj

Kolegi, upam, da bo ta članek nekomu pomagal hitro rešiti nadležno težavo. Osebno sem cel vikend poskušal ugotoviti in nekako rešiti težavo, da mi med delovnim časom ne bi bilo treba več skrbeti zanjo. Ta članek sem napisal, da bi nekomu prihranil čas in frustracije. Mnogi med vami uporabljate alternativni način preklapljanja med razporeditvami tipkovnice in ne razumete težave. Osebno imam raje Alt+Shift in želim, da deluje tako. Če delite moje mnenje in imate to težavo, vam bo ta članek pomagal.

Vir: www.habr.com

Kupite zanesljivo gostovanje za strani z DDoS zaščito, VPS VDS strežniki 🔥 Kupite zanesljivo spletno gostovanje z zaščito DDoS, VPS VDS strežniki | ProHoster