启动访客会话时选择语言

启动访客会话时选择语言

我陷入了一个棘手的境地。

我正在设置一台公用计算机,希望人们使用访客帐户登录。需要使用计算机的人说着多种不同的语言。

该电脑是旧的,目前运行的是 Lubuntu 15.10,Lightdm 登录。

但是,由于只有通过注销并重新登录帐户才能切换系统语言,而且一旦注销,访客帐户的数据就会被清除......这有点像第 22 条军规。

我可能需要使用某种脚本语言选择器来解决这个问题。我看到两种可能的解决方案,它们构成了我的问题:

有没有办法无需完全注销即可更改系统语言?

或者,是否可以在登录期间启动脚本?我正在考虑几种不同的来宾帐户/skel 替代方案,并在登录期间创建符号链接。

答案1

可以在会话中更改环境变量 LANG 和 LANGUAGE,但这不会影响已在运行的进程。因此,没有实际的方法可以在不注销的情况下执行此操作。

考虑到 lightdm-gtk-greeter 已经有一个语言选择器,可以在您登录普通帐户时选择语言,最优雅的解决方案可能是以某种方式利用该功能。但不知道怎么做...

以下示例解决方案使用包装器脚本让用户通过 zenity 对话框选择显示语言。示例包括英语和瑞典语;当然,您必须安装您使用的语言。此解决方案应适用于更高版本的 Ubuntu 上的 unity-greeter 和 lightdm-gtk-greeter。我在 15.10 和 16.04 上进行了测试。

创建/etc/guest-session/choose-language-wrapper.sh,并赋予其以下内容:

#!/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 "$@"

并使其可执行:

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

然后通过创建此文件使 lightdm 使用包装器脚本:

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

下次重启后,从接待程序启动访客会话时应该会出现 zenity 对话框。

相关内容