Например в Ubuntu, если использовать приложения на Electron, такие как Skype, VSCode, Atom, OnlyOffice, то можно столкнутся с неприятным багом, когда нажатие Alt+Shift открывает меню.
Как я это исправил:
- Отключить в настройках все бинды на Alt+Shift, в том числе и переключение раскладки в Gnome Tweaks
- Создать файл /usr/bin/switch-keyboard-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 if [ "$LAYOUT" == "ru" ]; then gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell --method org.gnome.Shell.Eval "imports.ui.status.keyboard.getInputSourceManager().inputSources[0].activate()" else gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell --method org.gnome.Shell.Eval "imports.ui.status.keyboard.getInputSourceManager().inputSources[1].activate()" fi
- Сделать
chmod +x /usr/bin/switch-keyboard-layout.sh
- В домашнюю папку вписать файл keybinder.py
#!/usr/bin/env python3 import subprocess import sys # defining keys & strings to be used key = "org.gnome.settings-daemon.plugins.media-keys custom-keybindings" subkey1 = key.replace(" ", ".")[:-1]+":" item_s = "/"+key.replace(" ", "/").replace(".", "/")+"/" firstname = "custom" # get the current list of custom shortcuts get = lambda cmd: subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8") array_str = get("gsettings get "+key) # in case the array was empty, remove the annotation hints command_result = array_str.lstrip("@as") current = eval(command_result) # make sure the additional keybinding mention is no duplicate n = 1 while True: new = item_s+firstname+str(n)+"/" if new in current: n = n+1 else: break # add the new keybinding to the list current.append(new) # create the shortcut, set the name, command and shortcut key cmd0 = 'gsettings set '+key+' "'+str(current)+'"' cmd1 = 'gsettings set '+subkey1+new+" name '"+sys.argv[1]+"'" cmd2 = 'gsettings set '+subkey1+new+" command '"+sys.argv[2]+"'" cmd3 = 'gsettings set '+subkey1+new+" binding '"+sys.argv[3]+"'" for cmd in [cmd0, cmd1, cmd2, cmd3]: subprocess.call(["/bin/bash", "-c", cmd])
- Запустить из домашней папки после чего keybinder.py удалить, или дальше использовать
python3 keybinder.py 'keyboard layout switch' '/usr/bin/switch-keyboard-layout.sh' '<Alt>Shift_L'
Можете предлагать свои варианты!