Установите ibus
в свою систему.
Запустите его в каком-нибудь сценарии запуска:
ibus-daemon -drx
А теперь немного поделки. Когда вы привязываете Caps _Lock к изменению раскладки, регистр тоже будет меняться. Чтобы предотвратить такое поведение, нужна опция Map Caps. Одно решение :
setxkbmap -option 'lv3:caps_switch_latch'
Перейдите к настройкам ibus, чтобы изменить необходимые раскладки и ярлыки. Когда вы нажимаете Caps, он определяется как ISO_Level3_Shift
. Все сделано!
ПРИМЕЧАНИЕ:
Изменить /etc/X11/xorg.conf.d/00-keyboard.conf
для постоянной опции xkb
Section "InputClass"
Identifier "system-keyboard"
MatchIsKeyboard "on"
Option "XkbOptions" "lv3:caps_switch_latch"
EndSection
УПД:
Со временем я нашел еще два способа, основанные на независимом слушателе горячих клавиш. Первый подход использует xbindkeys и xdotool, у него есть отставание.
; layout
(xbindkey '(release "c:66") "xdotool key Super_L+space")
Второй через D -Шина вместо xdotool, описание тут
#!/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
Предположим, что у вас есть исходный код, в котором все эти переменные имеют жестко -закодированные значения:
perl -nE 'say for m<(?:[/]([^/]+)[/]?){7}>g' src/*