如何在Raspbian中设置“信息亭”模式?


10

我想以一种“信息亭”模式设置我的Raspberry Pi,在该模式下它可以启动到一个全屏应用程序中。我知道我的命令行方式,但是在定制linux引导行为方面是新手。我正在构建应用程序,并计划增加安全关闭Raspberry Pi的功能。为了将Raspberry Pi配置为仅运行一个应用程序,我需要做什么?

更新:明确地说,我不想打开网页。我也不想更改操作系统。我想学习如何配置操作系统(Raspbian)来启动自己的应用程序而不是X(尽管我的应用程序可能取决于后台的X渲染)。

Answers:


7

我从来没有尝试过,但是由于您似乎仍在寻找并且将近一个月没有得到答案,所以我会告诉您我将从哪里开始。

这个方法是古老的,但总体轮廓似乎是合理的。您不必完全相同地进行所有操作。它确实专注于使用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将更加简单。


与init保持联系的替代方法...

使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命令(它们是相关的但不相同)。


如果Raspbian使用/etc/inittab了,但大多数其他人不再使用了,他们将使用什么呢?
安德鲁

因此,如果我想在我的应用程序在前台运行时允许ssh访问,则需要确保.xinitrc脚本在此之后运行,对吗?
Andrew

Debian使用“ sysV” -ish初始化系统,并且inittab是所有这些的一部分。现在更常见的init守护程序是systemdupstart
goldilocks

WRT您的应用程序在前台运行,这仅仅是因为(sysV)init在启动下一个脚本之前等待这些脚本返回。因此,通常在init脚本中,如果要启动持久性服务,则可以通过后台(又称为fork)&。然后脚本本身退出,但是“后台”过程继续。“背景”仅是指执行链,而不是关于屏幕上显示的内容-您可以后台执行X调用(lightdm必须后台)...我将对此进行一些编辑。
goldilocks

WRT ssh,该ssh服务(在中链接/etc/rc[N].d)应该在您之前启动,以便运行(“在后台”)以应答连接。它仍然是一个多任务系统;)
goldilocks

2

看看这个“数字标牌”项目。它启动到GUI,然后打开HTML5驱动的浏览器。我还没有尝试过,但是我想。也许您可以将应用程序改为浏览器以全屏启动。

http://www.binaryemotions.com/raspberry-digital-signage/


感谢您的回答,但这看起来像是配置为显示浏览器的Raspbian的替代品。我想学习配置Raspbian的步骤。
安德鲁

在您的问题中没有提及Raspbian。尝试这个。pikiosk.tumblr.com/post/38721623944/…–
gurcanozturk

0

提及的Raspberry Digital Signage是一种操作系统,它显示全屏视图,仅限于指定的网页或幻灯片/视频播放列表,无法退出而只能重启机器。

实际上,它既可以显示Web视图(显示HTML / HTML5页面),也可以显示多媒体视图(图像幻灯片和视频播放器)。Web视图具有三个可能的子视图:Firefox,Chromium和Midori(具有Gnash支持)。

Chrome和Midori体验是2.0版的功能。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.