Nós construímos sistemas embarcados baseados no Ubuntu 14.04, nos quais implementamos o comportamento do tipo quiosque usando uma sessão X personalizada. Aqui está o ffile da área de trabalho que define a sessão:
[Desktop Entry]
Encoding=UTF-8
Name=Kiosk Mode
Comment=AppName Kiosk Mode
Exec=/usr/share/xsessions/appNameKiosk.sh
Type=Application
E aqui está o script da sessão (appNameKiosk.sh);
#!/bin/bash
# Undefining the QT_QPA_PLATFORMTHEME environment variable disables the appmenu-qt5 package. That package is for putting
# the app menu up in the global bar rather than on the app. It has a bug and results in no menu anywhere. We want the
# menu on the app anyway.
export QT_QPA_PLATFORMTHEME=
metacity --replace &
# Set audio volume to max - user can reduce with physical knob if needed.
amixer set 'Master' 100%
# This sets the window decoration theme to our theme, which removes the title bar on maximized windows - hence on
# our main window.
gsettings set org.gnome.desktop.wm.preferences theme AppName
while true; do
~/AppName/bin/AppName.sh --kioskMode
result=$?
if [ $result -eq 125 ]; then
poweroff
fi
if [ $result -eq 122 ]; then
reboot
fi
sleep 3s
# Any exit code that does not specify a specific behavior, just causes the loop to restart the app.
done
O resultado líquido disso é que nenhuma área de trabalho da GUI foi inicializada. Por causa disso, não podemos inserir caracteres não ingleses em diálogos em nosso aplicativo.
Eu posso executar o sistema no modo de área de trabalho normal e usar a configuração Entrada de texto para configurar a alternância por vários idiomas. Em seguida, posso inserir caracteres para alemão, hebraico, russo, etc. com base no mapeamento de teclado que é ativado por meio do pressionamento de tecla especial (o padrão é 'Superespaço'). No entanto, ao executar no modo de quiosque, acabei de receber os caracteres em inglês.
Minha inferência é que o mapeamento chave é realizado por algum componente que é iniciado / instalado pela inicialização normal da sessão da área de trabalho (o gnome-session parece ser o que faz isso).
Como posso iniciar o mesmo componente no meu script?
EDIT: Para esclarecer, a questão não é como obter vários mapas de teclado ativados. Eu posso usar o modo de área de trabalho para fazer isso, se necessário. A questão é como realmente alternar entre eles uma vez no modo de quiosque. O pressionamento de tecla especial configurado no item de configurações Entrada de texto não tem efeito no modo de quiosque.