如何在系统启动时创建某种“CLI Kiosk 模式”?

如何在系统启动时创建某种“CLI Kiosk 模式”?

我创建了一个脚本,执行后,用户会看到一个空白屏幕,他只能打字,就像打字机一样。这是一个 Python 脚本,我打算最终将其移植到纯 Bash。

现在我想生成一个 LiveUSB,该脚本在启动时运行,并且启动时您可以做的唯一一件事就是键入文本(当然您应该能够以某种方式关闭系统)。我什至不需要任何 GUI,或者用户绕过这个“主屏幕”的任何方式。我希望它成为一个单一用途的“Kiosk 模式”CLI 环境。这类似于pyroom,仅在操作系统级别,没有 GUI。

所以问题是(我对启动配置不太有经验):实现这一目标的典型步骤是什么?我应该把脚本放在哪里,如何告诉引导系统在启动时立即运行它?

答案1

您可以通过修改程序的选项来设置自动登录到终端getty;如果您使用agetty,则添加--autologin <username>,如图所示这里

然后,您可以将该用户的登录 shell 设置为您喜欢的任何内容。它不应列出,/etc/shells以便用户无法使用 更改它chsh。假设您希望防止用户进入普通 shell(从而能够执行任意操作),您需要确保他们无法从您的程序中到达那里。如果您的程序是登录 shell,那么退出只会结束会话并返回getty(然后可能会再次自动登录回同一个程序)。

答案2

您可以更换init使用一个运行脚本的简单程序。我设置了一个 Ubuntu 15.04 VM 并编写了这个简单的程序,另存为init.c

int main() {
  system("/bin/bash -c /init.sh");
  return 0;
}

和一个简单的脚本:

#!/bin/bash
echo Start:
while read line; do
  echo -n "Upside down: "
  echo $line | tr '[unbqdphymwaefjg]' '[nuqbpdyhwmeajf6]'
done
init 0

并以 root 身份编译并安装它(确保在已创建快照的虚拟机中执行此操作,或者知道如何修复系统):

gcc init.c -o init
sudo cp init /init
sudo ln -sf /init /sbin/init
sudo cp init.sh /init.sh

然后重新启动,我得到了提示,但没有简单的方法可以突破。

在此输入图像描述

您应该能够将其与原始设备制造商安装程序删除一堆不必要的东西,制作一个漂亮的小ISO。

相关内容