Answers:
我从来没有尝试过,但是由于您似乎仍在寻找并且将近一个月没有得到答案,所以我会告诉您我将从哪里开始。
这个方法是古老的,但总体轮廓似乎是合理的。您不必完全相同地进行所有操作。它确实专注于使用Web浏览器作为核心,但这在这里基本上无关紧要(即,放松一下,这不是另一个“网络亭”)。
它指的是/etc/inittab
大多数Linux发行版都不再使用的,但是碰巧debian wheezy(raspbian)会使用。这个想法是,您将使用运行级别4作为信息亭,并将其设置为默认值。您可以这样做,也可以只使用当前的默认值(我认为是2或3)。我现在运行的raspbian已被我修改,因此我不确定/etc/rc[N].d
目录之间的原始区别是什么-对应于7个运行级别。您想使用一种不会启动图形登录(lightdm
)的方法,或者lightdm
要从该运行级别中删除。您最好也以正确的方式来做这种事情(请参阅参考资料man update-rc.d
)。
然后,按照操作方法的这一部分,您要创建自己的启动服务(即init)脚本,以在不登录的情况下启动X和应用程序。但是,不要那样做。您需要遵循debian,因此请参阅/etc/init.d/README
。另外,您根本不需要使用窗口管理器(尽管fvwm
它仍然很棒,但是尤其是针对这种情况的方法,因此,请牢记这一点),因为.xinitrc
这样:
#!/bin/sh
myApp
将仅在纯X中运行您的应用-这非常非常纯:没有菜单,没有标题栏,没有工具栏等,或者是用户启动其他应用或获取Shell的方式。它只是提供一个游标。
这样做的问题是,如果您从启动直接进入桌面,那将是超级用户桌面。实际上,X实例的uid始终为0,但是从xinitrc运行的应用程序以启动X的用户身份运行-在这种情况下,X是由init启动的,因此该用户将是root用户(尽管从技术上讲root用户未登录) )。因此,上面的xinitrc在以下情况下会更好:
su -c myApp pi
它将以pi用户(从技术上来说也未登录)运行您的应用。
由于从技术上讲,没有人登录,即使信息亭用户杀死X(例如通过ctrl-alt-delete
),他们也只会留在登录提示符下。操作方法超出了范围,服务初始化脚本在前台以X开头(请参阅下面的注释),以便退出时,服务脚本继续运行shutdown -r now
。
请记住,可以物理访问(正常)计算机的人总是可以规避您实现的任何安全性,因此,您在此真正要做的并不是使其变得太容易并防止发生严重事故。
还请记住,由于引导服务将在前台执行此操作,因此之后不会再运行其他服务,因此请确保它绝对是最后一个。很重要!实际上,您可以使用它/etc/rc.local
,因为通常可以保证这是最后一个;)这样可以节省您一些时间。
注:其实在如何做它的另一个脚本,/root/kiosk
从本节。注意,这只是引用.xinitrc
上面(3.4)部分中显示的脚本的一行。只需在启动脚本中直接添加这样的一行即可。如前所述,您的(初步)xinitrc将更加简单。
使X调用成为前台的目的只是为了阻止初始化脚本的执行,直到X退出为止,以便脚本(shutdown
)的下一行将运行:
startx
shutdown -r now
在这里,我使用的startx
不是操作方法/usr/X11R6/bin/xinit /root/kiosk.xinitrc ....
行。这将使用$HOME/.xinitrc
,而$ HOME将是/root
。可以肯定的是,startx也是一个阻塞调用,因此在X退出之前,它shutdown
不会运行。如果相反,您这样做:
startx &
shutdown -r now
X会运行,但是关机也会立即运行(显然没有意义)。
如果您不关心是否需要关机,则不必使用该技巧-如前所述,用户最终只会看到登录提示。但这似乎是一个有用的主意,因为您可以使用将其关闭ctrl-alt-backspace
。如果您的应用程序是可关闭的,另一个想法是startx &
在init脚本中使用,该脚本会在后台运行它并允许init正常继续运行(这很好; X仍将运行并可以控制显示-“ backgrounded”是一个也许是一个令人困惑的术语)。在init脚本中,shutdown
而不是在ininit 脚本 中:
#!/bin/sh
#/root/.xinitrc
su -c myApp pi
shutdown -r now
同样的把戏,不同的地方。现在,当有人关闭时myApp
,将发生关机(但如果他们杀死X,则不会)。您也可以同时使用两种方法,但是实际上我更喜欢这种方法,因为这意味着您可以退出X并获得登录名,这有时可能很有用,并且还可以轻松地从GUI关闭系统。
&
即使.xinitrc之后没有关闭,也不要在其背景下()myApp 背景,因为在完成.xinitrc之后,X退出;)那里的最后一次调用必须保留在前台(通常是DE或窗口)经理)。
初始化脚本和.xinitrc
是类似的概念。一个由运行init
,是Linux上的进程1(这是内核启动的唯一进程)。另一个由X服务器运行。请注意,有.xinitrc文件和xinitrc命令(它们是相关的但不相同)。
.xinitrc
脚本在此之后运行,对吗?
inittab
是所有这些的一部分。现在更常见的init守护程序是systemd
和upstart
。
init
在启动下一个脚本之前等待这些脚本返回。因此,通常在init脚本中,如果要启动持久性服务,则可以通过后台(又称为fork)&
。然后脚本本身退出,但是“后台”过程继续。“背景”仅是指执行链,而不是关于屏幕上显示的内容-您可以后台执行X调用(lightdm
必须后台)...我将对此进行一些编辑。
ssh
服务(在中链接/etc/rc[N].d
)应该在您之前启动,以便运行(“在后台”)以应答连接。它仍然是一个多任务系统;)
看看这个“数字标牌”项目。它启动到GUI,然后打开HTML5驱动的浏览器。我还没有尝试过,但是我想。也许您可以将应用程序改为浏览器以全屏启动。
/etc/inittab
了,但大多数其他人不再使用了,他们将使用什么呢?