Normalmente, o idioma atual é exibido na bandeja do sistema pelo editor do método de entrada. Por exemplo, ibus ou fcitx. E se você tiver um aplicativo de bandeja do sistema, ele estará lá.
Se quisesse obter o layout sem usar o método de entrada, você poderia desembolsar para o setxkbmap como aqui .
Quaisquer comandos que você queira executar, você pode fazê-lo a partir do FvwmScript ou apenas atualizar um botão em FvwmButtons.
Para apenas o idioma um, adicione isso à sua configuração do fvwm:
DestroyModuleConfig FvwmButtonLanguage: *
*FvwmButtonLanguage: (Id button0, Title "ZZ")
Então você pode agendar uma tarefa periódica para ela (também na sua configuração do fvwm):
Schedule 1000 PipeRead "echo SendToModule FvwmButtonLanguage ChangeButton button0 Title $(setxkbmap -query | grep layout | cut -f2 -d: )"
Ou execute um script (supondo que você tenha o Módulo FvwmCommandS carregado na sua função de início) para atualizar o botão que contém o seguinte:
while true ; do FvwmCommand "SendToModule FvwmButtonLanguage ChangeButton button0 Title $(setxkbmap -query | grep layout | cut -f2 -d: )" ; sleep 1 ; done
Se você atualizar sua pergunta para fornecer outro exemplo, atualizarei esta resposta com um exemplo completo.