ОК, я нашел решение. Это на самом деле не идеально, но оно получает желаемое поведение.
Во-первых, я сбросил полное состояние конфигурации клавиатуры, используя
$ xkbcomp $DISPLAY - > now.xkb
Затем я нашел строки
interpret Overlay1_Enable+AnyOfOrNone(all) { action= LockControls(controls=Overlay1); };
и изменил его на
interpret Overlay1_Enable+AnyOfOrNone(all) { action= SetControls(controls=Overlay1); };
что предотвращает «залипание» модификатора, т.е. он применяется только тогда, когда вы удерживаете клавишу нажатой.
Затем я взял ключ, который раньше был моим ISO_Level5_Shift:
key <TAB> { type= "ONE_LEVEL", symbols[Group1]= [ ISO_Level5_Shift ] };
и изменил его на Overlay1_Enable:
key <TAB> { type= "ONE_LEVEL", symbols[Group1]= [ Overlay1_Enable ] };
Затем для каждого ключа, где я хотел, чтобы изменение вступило в силу, я добавил определение наложения:
key <AD07> { type= "EIGHT_LEVEL", overlay1= <PGUP>, symbols[Group1]= [ g, G, asterisk, G, Prior, G, Greek_gamma, Greek_GAMMA ] };
Затем заново применил все это с
$ xkbcomp now.xkb $DISPLAY
Полезная документация: