Rozwiązanie problemu z przełączaniem za pomocą alt+shift w systemie Linux, w aplikacjach Electron

Cześć koledzy!

Chcę podzielić się moim rozwiązaniem problemu wskazanego w tytule. Do napisania tego artykułu zainspirował mnie kolega brnovk, który nie był leniwy i zaproponował częściowe (dla mnie) rozwiązanie problemu. Zrobiłem własną „kulę”, która mi pomogła. Dzielę się z tobą.

Opis problemu

Do pracy korzystałem z Ubuntu 18.04 i ostatnio zauważyłem, że podczas przełączania układów za pomocą alt+shift w aplikacjach takich jak Visual Studio Code, Skype, Slack i innych, które zostały utworzone przy użyciu Electrona, pojawia się następujący problem: fokus z pola wejściowego przechodzi na górę panel okna (menu). Z innych powodów przeniosłem się do Fedory + KDE i zdałem sobie sprawę, że problem nie zniknął. Szukając rozwiązania, znalazłem wspaniały artykuł Jak samodzielnie naprawić Skype'a. Wielkie dzięki towarzyszu brnovk, który szczegółowo opowiedział o problemie i podzielił się swoją metodą jego rozwiązania. Ale metoda wskazana w artykule rozwiązała problem tylko w jednej aplikacji, a mianowicie w Skype. Dla mnie kluczowe było również zrozumienie kodu Visual Studio Code, ponieważ pisanie wiadomości za pomocą menu przeskakującego, choć denerwujące, nie jest tak bardzo istotne, jeśli jesteś zaangażowany w programowanie. Dodatkowo kolega zaproponował rozwiązanie, w którym menu aplikacji znika całkowicie, a ja nie bardzo chciałbym stracić menu w VS Code.

Próbowałem zrozumieć, co jest nie tak

Postanowiłem więc poświęcić trochę czasu, aby dowiedzieć się, co się dzieje. Teraz pokrótce opiszę drogę jaką obrałem, może ktoś bardziej obeznany w tej kwestii pomoże wyjaśnić trudności jakie napotkałem.

Otworzyłem Visual Studio Code i zacząłem uderzać w różne kombinacje Alt+<%coś%>, aby zobaczyć, jak aplikacja zareagowała. W prawie wszystkich przypadkach wszystkie kombinacje z wyjątkiem Alt+Shift działały bez utraty ostrości. Wydawało mi się, że ktoś jadł wciśnięty Shift, co nastąpiło po przytrzymaniu Alt, a aplikacja pomyślała, że ​​nacisnąłem Alt, po czym nic nie wcisnąłem, puścił Alt i radośnie przerzuciłem moją uwagę do swojego menu, co wydawało się całkiem logiczne To.

Otworzyłem ustawienia przełączania układów klawiatury (wiesz, ta długa lista z polami wyboru i wszelkiego rodzaju ustawieniami klawiszy) i ustawiłem je tak, aby przełączało układy za pomocą przycisku Alt, bez żadnych dodatkowych kliknięć.

Rozwiązanie problemu z przełączaniem za pomocą alt+shift w systemie Linux, w aplikacjach Electron

Potem Alt+Tab do przełączania okien przestał działać. Zadziałał tylko Tab, czyli znowu ktoś „zjadł” mojego Alta. Nie było już żadnych pytań o to, kim był ten „ktoś”, ale nie miałem pojęcia, co można z nim zrobić.

Ale ponieważ problem trzeba było jakoś rozwiązać, przyszło mi do głowy rozwiązanie:

  1. W ustawieniach wyłącz klawisz skrótu do przełączania układów klawiatury (odznacz wszystkie pola wyboru w sekcji Przełącz na inny układ);
  2. Utwórz własny skrót, który zmieni układ za mnie

Opis rozwiązania

Najpierw zainstalujmy program, który pozwala na przypisywanie poleceń do klawiszy Xbindkeys. Niestety standardowe narzędzia nie pozwoliły mi stworzyć skrótu klawiszowego dla kombinacji takiej jak Alt+Shift poprzez piękny interfejs. Można to zrobić dla Alt+S, Alt+1, Alt+shift+Y itp. itp., ale to nie nadaje się do naszego zadania.

sudo dnf install xbindkeysrc

Więcej szczegółów na ten temat można znaleźć na stronie ArchWiki
Następnie utworzymy przykładowy plik ustawień programu. Przykład jest dość krótki i zawiera kilka poleceń, czyli dokładnie to, czego potrzebujesz, aby dowiedzieć się, jak z nim pracować:

xbindkeys -d > ~/.xbindkeysrc

Jak widać na przykładzie w pliku musimy wskazać skrót, którego chcemy użyć oraz polecenie, które ma zostać wykonane. Wygląda prosto.


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

Jako klawisz skrótu możesz używać pisma czytelnego dla człowieka lub używać kodów klawiszy. U mnie zadziałało tylko z kodami, ale nikt nie zabrania trochę poeksperymentować.

Aby otrzymać kody należy użyć komendy:

xbindkeys -k

Otworzy się małe okno „X”. Wystarczy nacisnąć klawisze, gdy fokus znajduje się w tym oknie! Tylko w tym przypadku w terminalu zobaczysz coś takiego:


[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

W moim przypadku kombinacja klawiszy Alt+Shift wygląda następująco:

m:0x8 + c:50

Teraz musimy się upewnić, że po kliknięciu tej kombinacji układ się przełączy. Znalazłem tylko jedno działające polecenie określające układ:


setxkbmap ru
setxkbmap us

Jak widać na przykładzie może włączyć tylko taki czy inny układ, więc nic innego nie przychodziło mi do głowy jak napisanie skryptu.


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

Teraz, jeśli pliki .xbindkeysrc i układ.sh znajdują się w tym samym katalogu, ostateczny widok pliku .xbindkeysrc wygląda następująco:


# 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

Następnie stosujemy zmiany:


xbindkeys -p

I możesz sprawdzić. Nie zapomnij wyłączyć opcji przełączania układów w ustawieniach standardowych.

Łączny

Koledzy, mam nadzieję, że ten artykuł pomoże komuś szybko pozbyć się irytującego problemu. Osobiście cały wolny dzień spędziłem na próbach rozwiązania problemu w jakiś sposób, aby nie rozpraszał mnie już w godzinach pracy. Napisałem ten artykuł, aby zaoszczędzić komuś czasu i nerwów. Wielu z Was korzysta z alternatywnej metody przełączania układów i nie rozumie w czym tkwi problem. Osobiście lubię przełączać się za pomocą Alt+Shift. I tak chcę, żeby to działało. Jeśli podzielasz moją opinię i borykasz się z tym problemem, ten artykuł powinien Ci pomóc.

Źródło: www.habr.com

Dodaj komentarz