Løsning på problemet med at skifte ved hjælp af alt+shift i Linux, i applikationer bygget med Electron

Hej kolleger!

Jeg vil dele min løsning på problemet, som nævnes i overskriften. Jeg blev inspireret til at skrive denne artikel af en kollega brnovk, som ikke sparede på kræfterne og foreslog en delvis (for mig) løsning på problemet. Jeg lavede mit eget "hack", som hjalp mig. Her deler jeg det med jer.

Beskrivelse af problemet

Jeg brugte Ubuntu 18.04 til arbejde, og for nylig bemærkede jeg, at når jeg skiftede layout ved hjælp af alt+shift i applikationer som Visual Studio Code, Skype, Slack og andre, der er lavet med Electron, opstod der følgende problem: fokus fra indtastningsfeltet gik til menulinjen øverst i vinduet. Af andre grunde skiftede jeg til Fedora + KDE og indså, at problemet ikke var forsvundet. I min søgen efter en løsning fandt jeg en fantastisk artikel Reparer Skype selv. En stor tak til kameraten brnovk, som detaljeret forklarede problemet og delte sin metode til løsning. Men den metode, der blev nævnt i artiklen, løste kun problemet med én applikation, nemlig Skype. For mig var det også vigtigt at finde ud af, hvordan jeg skulle håndtere Visual Studio Code, fordi det at skrive beskeder med en springende menu, selvom det er irriterende, ikke er så slemt, hvis man arbejder med udvikling. Derudover foreslog kollegaen en løsning, hvor applikationens menu forsvinder helt, og jeg ville ikke rigtig miste menuen i VS Code.

Jeg har prøvet at forstå, hvad der er galt

Så jeg besluttede at afsætte tid til at finde ud af det. Nu vil jeg kort beskrive, hvordan jeg greb det an; måske kan nogen, der er mere vidende om emnet, hjælpe med at afklare de vanskeligheder, jeg stødte på.

Jeg åbnede Visual Studio Code og begyndte at trykke på forskellige kombinationer af Alt+, mens jeg observerede reaktionen fra applikationen. Praktisk talt i alle tilfælde fungerede alle kombinationer, undtagen Alt+Shift, uden at miste fokus. Jeg fik indtrykket af, at nogen opfanger det trykkede Shift, der fulgte efter at have holdt Alt nede, og applikationen tænkte, at jeg trykkede Alt, derefter ikke trykkede noget, slap Alt, og så tabte den glædeligt mit fokus til sin menu, hvilket virkede logisk for den.

Jeg åbnede indstillingerne for skift af tastaturlayout (du ved, den lange liste med afkrydsningsfelter og forskellige indstillinger for tasterne) og indstillede skift af layout til Alt-tasten uden yderligere tryk.

Løsning på problemet med at skifte ved hjælp af alt+shift i Linux, i applikationer bygget med Electron

Efter dette stoppede Alt+Tab med at fungere til vindueskift. Kun Tab fungerede, hvilket betød, at nogen 'spiste' mit Alt. Hvem denne 'nogen' var, var der ingen tvivl om, men jeg havde ingen idé om, hvad jeg kunne gøre ved det.

Men da problemet skulle løses, kom jeg på løsningen:

  1. Deaktiver genvejstasten til skift af tastaturlayout i indstillingerne (fjern alle afkrydsningsfelter i sektionen Skift til et andet layout);
  2. Opret en egen genvejstast, der skifter mit layout

Beskrivelse af løsningen

Først skal vi installere et program, der muliggør tildeling af kommandoer til tasterne, Xbindkeys. Desværre kunne de indbyggede værktøjer ikke give mig en pæn brugergrænseflade til at oprette en genvej for kombinationer som Alt+Shift. Man kan lave én til Alt+S, Alt+1, Alt+Shift+Y osv., men dette passer ikke til vores opgave.

sudo dnf install xbindkeysrc

Du kan finde mere information om det på ArchWiki
Derefter opretter vi et eksempel på konfigurationsfilen til programmet. Eksemplet er ret kort og har blot et par kommandoer, der giver os det nødvendige for at forstå, hvordan vi arbejder med det:

xbindkeys -d > ~/.xbindkeysrc

Som det fremgår af eksemplet i filen, skal vi angive den genvejstast, vi ønsker at bruge, og den kommando, der skal udføres. Det ser enkelt ud.


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

Som genvejstast kan man bruge en menneskelig læsbar skrivemåde eller bruge tastekoder. Jeg fik det kun til at fungere med koder, men ingen forhindrer dig i at eksperimentere lidt.

For at få koderne skal du bruge kommandoen:

xbindkeys -k

Et lille 'X'-vindue åbner sig. Tasterne skal kun trykkes, når dette vindue er i fokus! Kun i dette tilfælde vil du se noget som dette i terminalen:


[podkmax@localhost ~]$ xbindkeys -k
Tryk på tasterne eller klik under vinduet.
Du kan bruge en af de to linjer efter "NoCommand"
i $HOME/.xbindkeysrc til at binde en tast.
"(Scheme function)"
    m:0x4 + c:39
    Control + s

I mit tilfælde ser kombinationen for tasterne Alt+Shift således ud:

m:0x8 + c:50

Nu skal vi sørge for, at når denne kombination trykkes, gør den netop det, nemlig skifter layout. Jeg fandt kun én fungerende kommando til angivelse af layout:


setxkbmap ru
setxkbmap us

Som det fremgår af eksemplet, kan den kun aktivere en bestemt tastaturopsætning, så udover at skrive et script kom jeg ikke på noget andet.


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

Nu, hvis filerne .xbindkeysrc og layout.sh ligger i samme bibliotek, ser den endelige version af filen .xbindkeysrc sådan ud:


# 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

Derefter anvender vi ændringerne:


xbindkeys -p

Og så kan du teste det. Glem ikke at deaktivere eventuelle indstillinger for skift af tastaturopsætning i de almindelige indstillinger.

Resultat

Kolleger, jeg håber, at denne artikel kan hjælpe nogen hurtigt med at slippe af med det irriterende problem. Personligt brugte jeg hele min fridag på at forstå og løse problemet på en eller anden måde, så jeg ikke længere blev distraheret af det i arbejdstiden. Jeg skrev denne artikel for at spare nogen tid og nerver. Mange af jer bruger en alternativ metode til at skifte tastaturopsætning og forstår ikke, hvad problemet er. Jeg kan godt lide at skifte ved hjælp af Alt+Shift. Og jeg vil have, at det fungerer på den måde. Hvis du deler min mening og har stødt på dette problem, skal denne artikel hjælpe dig.

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster