Selecione o idioma ao iniciar uma sessão de convidado

3

Eu me deparei com uma situação complicada.

Estou configurando um computador de acesso público, onde é desejável que as pessoas façam login usando a conta de convidado. As pessoas que precisam usar o computador falam muitas línguas diferentes.

O computador é antigo e está atualmente executando o Lubuntu 15.10, o login do Lightdm.

No entanto, como só é possível alternar os idiomas do sistema efetuando logout e back-in de uma conta, combinado com o fato de que a conta de convidado é apagada depois de ser desconectada ... Um pouco de captura 22.

Provavelmente vou ter que resolver isso usando algum tipo de selecionador de linguagem com script. Eu vejo duas soluções possíveis, e essas formam minha (s) pergunta (s):

Existe alguma maneira de alterar o idioma do sistema sem um logout completo?

Como alternativa, é possível iniciar um script durante um login? Estou pensando em várias alternativas diferentes de guest-account / skel e fazendo um symlink durante o login.

    
por sverker wahlin 19.04.2016 / 21:27

1 resposta

2

É possível alterar as variáveis de ambiente LANG e LANGUAGE dentro da sessão, mas isso não afetará os processos em execução. Então não, não há maneira prática de fazer isso sem sair.

Considerando que o lightdm-gtk-greeter já possui um seletor de idioma para escolher o idioma quando você efetua login em uma conta comum, a solução mais elegante provavelmente seria de alguma forma fazer uso desse recurso. Não sei dizer como, embora ...

A solução de exemplo abaixo usa um script de wrapper para permitir que o usuário selecione o idioma de exibição por meio de um diálogo zenity. O exemplo inclui inglês e sueco; os idiomas que você usa devem ser instalados. Essa solução deve funcionar com o unity-greeter e o lightdm-gtk-greeter nas versões posteriores do Ubuntu. Eu testei em 15.10 e 16.04.

Crie /etc/guest-session/choose-language-wrapper.sh , dê este conteúdo a ele:

#!/bin/sh -e

# show zenity dialog only when launched from greeter
ONLYGUEST=true
for U in $(users); do
    if [ "${U%%-*}" != 'guest' ]; then
        ONLYGUEST=false
        break
    fi
done

if $ONLYGUEST && [ -x /usr/bin/zenity ]; then
    guestlang=$( zenity --list --title 'Select language' \
      --text 'Select language for the guest session' --radiolist \
      --column 'Pick' --column '' TRUE 'English' FALSE 'Swedish' )
    if [ "$guestlang" = 'English' ]; then
        echo 'export LANGUAGE=en_US' >> "$HOME/.profile"
        echo 'export LANG=en_US.UTF-8' >> "$HOME/.profile"
    elif [ "$guestlang" = 'Swedish' ]; then
        echo 'export LANGUAGE=sv' >> "$HOME/.profile"
        echo 'export LANG=sv_SE.UTF-8' >> "$HOME/.profile"
    fi
fi

exec /usr/lib/lightdm/lightdm-guest-session "$@"

e torná-lo executável:

sudo chmod +x /etc/guest-session/choose-language-wrapper.sh

Em seguida, faça o lightdm usar o script wrapper criando este arquivo:

$ cat /etc/lightdm/lightdm.conf.d/50-choose-guest-language.conf
[Seat:*]
guest-wrapper=/etc/guest-session/choose-language-wrapper.sh

Após a próxima reinicialização, a caixa de diálogo do zenity deve aparecer ao iniciar uma sessão de convidado a partir do greeter.

    
por Gunnar Hjalmarsson 20.04.2016 / 00:32