Buongiorno, colleghi!
Voglio condividere la mia soluzione al problema indicato nel titolo. L'idea di scrivere questo articolo mi è venuta da un collega , che si è preso il tempo di proporre una soluzione parziale (per me). Ho creato un mio "workaround" che mi ha aiutato. Lo condivido con voi.
Descrizione del problema
Ho utilizzato Ubuntu 18.04 per lavorare e ultimamente ho notato che, quando cambio layout usando alt+shift in applicazioni come Visual Studio Code, Skype, Slack e altre create con Electron, si verifica il seguente problema: il focus si sposta dal campo di input alla barra superiore della finestra (menu). Per altri motivi sono passato a Fedora + KDE e ho capito che il problema non era scomparso. Cercando una soluzione ho trovato un articolo fantastico . Un enorme grazie al compagno , che ha spiegato dettagliatamente il problema e ha condiviso il suo modo di risolverlo. Tuttavia, il metodo indicato nell'articolo risolveva il problema solo con una particolare applicazione, ovvero Skype. Per me era altrettanto critico capire come risolvere la situazione con Visual Studio Code, perché scrivere messaggi con un menu che salta, sebbene fastidioso, non è così grave se stai lavorando alla programmazione. Inoltre, il mio collega ha proposto una soluzione in cui il menu dell'app scomparirebbe completamente, e a me non piacerebbe molto perdere il menu in VS Code.
Ho cercato di capire qual è il problema
Così, ho deciso di dedicare del tempo per capire di cosa si tratta. Ora descriverò brevemente quale percorso ho seguito, magari qualcuno più esperto in materia potrà chiarire le difficoltà con cui mi sono imbattuto.
Ho aperto Visual Studio Code e ho iniziato a premere diverse combinazioni di tasti Alt+, osservando la reazione dell'applicazione. Praticamente in tutti i casi, tutte le combinazioni, tranne Alt+Shift, funzionavano senza perdere il focus. Sembrava che qualcuno stesse ingoiando il tasto Shift premuto dopo aver tenuto premuto Alt, e l'applicazione pensava che avessi premuto Alt, poi non avessi premuto nulla, avessi rilasciato Alt e così si spostava il mio focus sul suo menu, cosa che sembrava logica per essa.
Ho aperto le impostazioni di cambio layout tastiera (sapete, quel lungo elenco di caselle da spuntare e varie impostazioni per i tasti) e ho impostato il cambio layout con il tasto Alt, senza altre combinazioni.

Dopo di ciò, ha smesso di funzionare Alt+Tab per cambiare finestra. Solo Tab funzionava, cioè qualcuno ha di nuovo "mangiato" il mio Alt. Chi sia questo "qualcuno" non ci sono più dubbi, mentre su cosa fare con lui non ho idea.
Ma poiché era necessario risolvere il problema in qualche modo, allora mi è venuta in mente la soluzione:
- Nelle impostazioni disattivare la scorciatoia per cambiare layout della tastiera (deselezionare tutte le caselle nel riquadro Passa a un altro layout);
- Creare la mia personale scorciatoia che cambi il layout
Descrizione della soluzione
Per iniziare, installiamo un programma che consenta di assegnare comandi ai tasti, Xbindkeys. Sfortunatamente, gli strumenti standard non mi hanno permesso di creare una scorciatoia per combinazioni come Alt+Shift attraverso un'interfaccia elegante. Si possono creare per Alt+S, Alt+1, Alt+Shift+Y e così via, ma per il nostro obiettivo non è adatto.
sudo dnf install xbindkeysrc Maggiori dettagli su di esso sono disponibili su
Successivamente, creiamo un campione del file di configurazione per il programma. Il campione è piuttosto breve, con alcuni comandi, esattamente ciò che serve per capire come lavorarci:
xbindkeys -d > ~/.xbindkeysrcCome si può vedere dall'esempio contenuto nel file, dobbiamo specificare la scorciatoia 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 scorciatoia si può utilizzare una scrittura comprensibile o codici delle chiavi. A me ha funzionato solo con i codici, ma nessuno vi impedisce di sperimentare un po'.
Per ottenere i codici, bisogna usare il comando:
xbindkeys -kSi aprirà una piccola finestra "X". Bisogna premere i tasti solo quando questa finestra è in focus! Solo in questo caso vedrete nel terminale qualcosa di simile:
[podkmax@localhost ~]$ xbindkeys -k
Premere la combinazione di tasti o/ed effettuare un clic sotto la finestra.
È possibile utilizzare una delle due righe dopo "NoCommand"
nel $HOME/.xbindkeysrc per associare un tasto.
"(Funzione dello schema)"
m:0x4 + c:39
Control + s
Nel mio caso, la combinazione per i tasti Alt+Shift appare così:
m:0x8 + c:50Ora è necessario fare in modo che, premendo questa combinazione, si effettui effettivamente il cambio di layout. Ho trovato solo un comando funzionante per specificare il layout:
setxkbmap ru
setxkbmap us
Come si può vedere dall'esempio, può solo attivare un layout o l'altro, quindi nulla mi è venuto in mente tranne 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, il file .xbindkeysrc appare così:
# 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
Dopo di che, applichiamo le modifiche:
xbindkeys -p
E puoi controllare. Non dimenticare di disattivare tutte le opzioni per il cambio di layout nelle impostazioni di sistema.
Risultato
Colleghi, spero che questo articolo possa aiutare rapidamente qualcuno a liberarsi di questo fastidioso problema. Personalmente, ho passato tutto il mio giorno libero cercando di capire e risolvere il problema, in modo da non dovermi più distrarre durante il lavoro. Ho scritto questo articolo con l'obiettivo di risparmiare tempo e nervi a qualcuno. Molti di voi utilizzano un metodo alternativo per il cambio di layout e non capiscono qual è il problema. A me piace cambiare usando Alt+Shift. E voglio che funzioni proprio in questo modo. Se condividi la mia opinione e hai affrontato questo problema, questo articolo dovrebbe aiutarti.
Fonte: habr.com
