![如何在系统启动时创建某种“CLI Kiosk 模式”?](https://linux22.com/image/75725/%E5%A6%82%E4%BD%95%E5%9C%A8%E7%B3%BB%E7%BB%9F%E5%90%AF%E5%8A%A8%E6%97%B6%E5%88%9B%E5%BB%BA%E6%9F%90%E7%A7%8D%E2%80%9CCLI%20Kiosk%20%E6%A8%A1%E5%BC%8F%E2%80%9D%EF%BC%9F.png)
我创建了一个脚本,执行后,用户会看到一个空白屏幕,他只能打字,就像打字机一样。这是一个 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。