Instale ibus
em seu sistema.
Execute-o em algum script de inicialização:
ibus-daemon -drx
Agora, pequeno hack. Quando você liga o Caps_Lock para mudar o layout, o caso também será alterado.
Para evitar esse comportamento, é necessário ter a opção Caps do mapa.
Uma solução única:
setxkbmap -option 'lv3:caps_switch_latch'
Vá para as preferências do ibus para alterar os layouts e atalhos necessários.
Quando sua imprensa Caps foi definida como ISO_Level3_Shift
. Tudo está feito!
NOTA:
Edite /etc/X11/xorg.conf.d/00-keyboard.conf
para a opção xkb persistente
Section "InputClass"
Identifier "system-keyboard"
MatchIsKeyboard "on"
Option "XkbOptions" "lv3:caps_switch_latch"
EndSection
UPD:
Após o tempo eu encontrei duas outras formas, baseadas em ouvinte de atalho independente. A primeira abordagem usa xbindkeys e xdotool, tem um atraso.
; layout
(xbindkey '(release "c:66") "xdotool key Super_L+space")
Segundo via D-Bus em vez xdotool, descreveu aqui
#!/bin/sh
LANG=$(dbus-send \
--type=method_call \
--print-reply=literal \
--dest=com.deepin.daemon.InputDevices \
/com/deepin/daemon/InputDevice/Keyboard \
org.freedesktop.DBus.Properties.Get \
string:"com.deepin.daemon.InputDevice.Keyboard" \
string:"CurrentLayout" | awk '{print $2}')
if [[ $LANG = 'us;' ]]; then
dbus-send \
--type=method_call \
--dest=com.deepin.daemon.InputDevices \
/com/deepin/daemon/InputDevice/Keyboard \
org.freedesktop.DBus.Properties.Set \
string:"com.deepin.daemon.InputDevice.Keyboard" \
string:"CurrentLayout" \
variant:string:"ru;"
else
dbus-send \
--type=method_call \
--dest=com.deepin.daemon.InputDevices \
/com/deepin/daemon/InputDevice/Keyboard \
org.freedesktop.DBus.Properties.Set \
string:"com.deepin.daemon.InputDevice.Keyboard" \
string:"CurrentLayout" \
variant:string:"us;"
fi