我们基于 ubuntu 14.04 构建了嵌入式系统,其中我们使用自定义 X 会话实现了 kiosk 模式类型的行为。以下是定义会话的桌面文件:
[Desktop Entry]
Encoding=UTF-8
Name=Kiosk Mode
Comment=AppName Kiosk Mode
Exec=/usr/share/xsessions/appNameKiosk.sh
Type=Application
这是会话脚本(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
最终结果是没有启动 GUI 桌面。因此,我们无法在应用程序的对话框中输入非英语字符。
我可以在普通桌面模式下运行系统,并使用文本输入配置来配置切换各种语言。然后,我可以根据通过特殊按键启用的键盘映射(默认为“超级空格”)输入德语、希伯来语、俄语等字符。然而,在信息亭模式下运行时,我只会得到英文字符。
我的推断是,键映射是由正常桌面会话启动时启动/安装的某些组件执行的(gnome-session 似乎就是执行该操作的组件)。
我如何在脚本中启动相同的组件?
编辑:澄清一下,问题不在于如何启用多个键盘映射。如果需要,我可以使用桌面模式来实现这一点。问题是在自助服务终端模式下,如何在它们之间实际切换。在文本输入设置项中配置的特殊按键在自助服务终端模式下无效。
答案1
您可以在/etc/default/keyboard
文件中设置多个布局。例如,如果您打开该文件进行编辑并设置
XKBLAYOUT="us,de,ru"
你应该能够在英语(美国)、德语和俄语之间切换,而无需先通过以下方式添加这些布局文本输入。