Risolvere il problema con il passaggio utilizzando alt+shift in Linux, nelle applicazioni Electron

Ciao, colleghi!

Voglio condividere la mia soluzione al problema indicato nel titolo. Ho preso spunto per scrivere questo articolo da un collega brnovk, che non è stato pigro e ha offerto una soluzione parziale (per me) al problema. Ho realizzato la mia “stampella” che mi ha aiutato. Condivido con te.

Descrizione del problema

Ho usato Ubuntu 18.04 per lavoro e recentemente ho notato che quando si cambia layout utilizzando alt+shift in applicazioni come Visual Studio Code, Skype, Slack e altre create utilizzando Electron, si verifica il seguente problema: il focus dal campo di input va in alto pannello della finestra (menu). Per altri motivi sono passato a Fedora + KDE e ho capito che il problema non era scomparso. Mentre cercavo una soluzione, ho trovato un articolo meraviglioso Come riparare Skype da solo. Molte grazie compagno brnovk, che ha parlato in dettaglio del problema e ha condiviso il suo metodo per risolverlo. Ma il metodo indicato nell'articolo ha risolto il problema con una sola applicazione, ovvero Skype. Per me è stato fondamentale anche comprendere Visual Studio Code, perché scrivere messaggi con un menu che salta, anche se fastidioso, non è tanto se sei coinvolto nello sviluppo. Inoltre, un collega ha suggerito una soluzione in cui il menu dell'applicazione scompare completamente e non vorrei davvero perdere il menu in VS Code.

Ho cercato di capire cosa c'è che non va

Quindi, ho deciso di prendermi il tempo per capire cosa stava succedendo. Ora descrivo brevemente il percorso che ho intrapreso, magari qualcuno più esperto in materia mi aiuterà a spiegare le difficoltà che ho incontrato.

Ho aperto Visual Studio Code e ho iniziato a premere diverse combinazioni Alt+<%qualcosa%> per vedere come rispondeva l'applicazione. In quasi tutti i casi, tutte le combinazioni tranne Alt+Shift hanno funzionato senza perdere il focus. Sembrava che qualcuno stesse mangiando il tasto Shift premuto, che seguiva dopo aver tenuto premuto Alt, e l'applicazione pensava che avessi premuto Alt, poi non avevo premuto nulla, ha rilasciato Alt e con gioia ha focalizzato la mia attenzione sul suo menu, il che sembrava abbastanza logico Esso.

Ho aperto le impostazioni per cambiare layout di tastiera (sai, questo lungo elenco con caselle di controllo e tutti i tipi di impostazioni per i tasti) e l'ho impostato per cambiare layout utilizzando il pulsante Alt, senza ulteriori clic.

Risolvere il problema con il passaggio utilizzando alt+shift in Linux, nelle applicazioni Electron

Successivamente, Alt+Tab per cambiare finestra ha smesso di funzionare. Ha funzionato solo Tab, cioè qualcuno ha “mangiato” di nuovo il mio Alt. Non c'erano più domande su chi fosse questo "qualcuno", ma non avevo idea di cosa si potesse fare con lui.

Ma poiché il problema doveva essere risolto in qualche modo, mi è venuta in mente una soluzione:

  1. Nelle impostazioni, disabilita il tasto di scelta rapida per cambiare layout di tastiera (deseleziona tutte le caselle di controllo nella sezione Passa a un altro layout);
  2. Crea il tuo tasto di scelta rapida che cambierebbe il layout per me

Descrizione della soluzione

Per prima cosa installiamo un programma che ti permetta di assegnare comandi ai tasti Xbindkeys. Sfortunatamente, gli strumenti standard non mi permettevano di creare un tasto di scelta rapida per una combinazione come Alt+Shift attraverso una bella interfaccia. Può essere fatto con Alt+S, Alt+1, Alt+shift+Y, ecc. ecc., ma questo non è adatto al nostro compito.

sudo dnf install xbindkeysrc

Maggiori dettagli a riguardo sono disponibili su ArchWiki
Successivamente, creeremo un file di impostazioni di esempio per il programma. L'esempio è piuttosto breve, con pochi comandi, proprio quello che ti serve per capire come lavorarci:

xbindkeys -d > ~/.xbindkeysrc

Come puoi vedere dall'esempio nel file, dobbiamo indicare il tasto di scelta rapida che vogliamo utilizzare e il comando che deve essere eseguito. Sembra semplice.


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

Come tasto di scelta rapida, puoi utilizzare la scrittura leggibile dall'uomo o utilizzare codici chiave. A me ha funzionato solo con i codici, ma nessuno ti vieta di sperimentare un po'.

Per ottenere i codici è necessario utilizzare il comando:

xbindkeys -k

Si aprirà una piccola finestra "X". Devi solo premere i tasti quando il focus è su questa finestra! Solo in questo caso vedrai qualcosa di simile nel terminale:


[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

Nel mio caso, la combinazione di tasti Alt+Maiusc è simile alla seguente:

m:0x8 + c:50

Ora dobbiamo assicurarci che quando si fa clic su questa combinazione, il layout cambi. Ho trovato un solo comando funzionante per specificare il layout:


setxkbmap ru
setxkbmap us

Come puoi vedere dall'esempio, può abilitare solo l'uno o l'altro layout, quindi non mi è venuto in mente altro che scrivere uno 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

Ora, se i file .xbindkeysrc e layout.sh si trovano nella stessa directory, la visualizzazione finale del file .xbindkeysrc sarà simile alla seguente:


# 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

Successivamente applichiamo le modifiche:


xbindkeys -p

E puoi controllare. Non dimenticare di disabilitare tutte le opzioni per cambiare layout nelle impostazioni standard.

risultato

Colleghi, spero che questo articolo possa aiutare qualcuno a liberarsi rapidamente di un fastidioso problema. Personalmente ho trascorso l'intera giornata libera cercando di capire e risolvere in qualche modo il problema, in modo da non esserne più distratto durante l'orario di lavoro. Ho scritto questo articolo per risparmiare tempo e nervi a qualcuno. Molti di voi utilizzano un metodo alternativo per cambiare layout e non capiscono quale sia il problema. Personalmente mi piace cambiare con Alt+Shift. Ed è così che voglio che funzioni. Se condividi la mia opinione e ti trovi di fronte a questo problema, questo articolo dovrebbe aiutarti.

Fonte: habr.com

Aggiungi un commento