树莓派信息展示屏,用Kiosk模式运行Chromium显示网页信息

这个树莓派Kiosk教程,我将向您展示如何使用浏览器Chromium将树莓派配置为一个信息展示屏。

Raspberry-Pi-Kiosk.jpg

利用Chromium,因为它是最好的浏览器之一,并公开支持Kiosk功能。

通过按键控制也很方便,可以使用本指南中安装的xdotool进行模拟。

本指南将让你了解如何使用autologin任务和简单的bash脚本来执行任务。

请注意,要做这个教程,需要运行完整版的Raspbian,因为这依赖于它自带的GUI来操作。

设备清单

下面列出了我在这个树莓派Kiosk教程中使用的所有设备的完整清单,点击链接可以直达特别优惠购买。

建议

可选

设置Raspberry Pi Kiosk

1. 在开始本教程之前,首先删除一些Raspberry Pi Kiosk不需要的包。

删除这些软件包可以释放一些内存,并减少每次更新Raspberry Pi时更新的软件包数量。

只需在您的Raspberry Pi上运行以下三个命令。我将这些命令分成三个不同的命令,以便于复制和编写。

sudo apt-get purge wolfram-engine scratch scratch2 nuscratch sonic-pi idle3 -y
sudo apt-get purge smartsim java-common minecraft-pi libreoffice* -y

2. 现在已经从Raspberry Pi Kiosk中删除了这些众多的包,需要运行一些清理命令。

要删除任何不必要的滞留包,并清理本地的检索包库,在Raspberry Pi上运行以下两个命令。

sudo apt-get clean
sudo apt-get autoremove -y

3. 已经删除了大部分不必要的应用程序,现在必须确保我们的Raspbian安装是最新的。另外,确保已经启用了SSH,因为如果以后需要编辑文件,使用ssh是非常方便的。

我们可以在Raspberry Pi的终端中使用以下两个命令将所有的软件包更新到最新版本。

sudo apt-get update
sudo apt-get upgrade

4. 还需要安装xdotool。这个工具将允许bash脚本在没有人在设备上执行按键。另外还需要安装unclutter包,这能够将鼠标从显示屏上隐藏起来。

只需在Raspberry Pi上运行以下命令来安装软件包。

sudo apt-get install xdotool unclutter sed

5. 现在这些包已经安装好了,可以进入本教程的下一阶段。那就是设置Raspbian自动登录用户。

桌面自动登录是默认行为,但如果您出于某种原因更改了它,请按照接下来的几个步骤将其切换回来。否则,请跳到本教程的第6步。

5a. 在您的Raspberry Pi上运行以下命令来加载Raspi-config工具,使用这个工具来启用自动登录。

sudo raspi-config

5b. 现在在该工具中进入3 Boot Options -> B1 Desktop / CLI -> B4 Desktop Autologin

5c. 桌面自动登录现在应该已经启用,可以安全地退出 raspi 配置工具。

6. 已经启用了桌面自动登录,需要继续编写kiosk.sh脚本。

编写Raspberry Pi Kiosk脚本

该kiosk脚本将为Raspberry Pi Kiosk处理大部分工作,包括启动Chromium本身以及模拟按键。

在Raspberry Pi上运行以下命令,开始编写kiosk bash脚本。

nano /home/pi/kiosk.sh

1. 在这个文件中输入以下几行代码,我们将解释脚本的重要部分,以便能更好地根据自己的需要进行修改。

#!/bin/bash

第一行定义了命令行解释器(CLI)应该使用什么来尝试和执行这个文件。对于不想每次运行脚本时都要指定所需的特定应用程序的情况很有用。

xset s noblank
xset s off
xset -dpms

这三行相当重要,因为它们可以阻止Raspberry Pi的显示电源管理系统启动并使屏幕空白。

基本上,这三条命令都是设置当前xsession不空白屏保,然后完全禁用屏保。第三行则是禁用整个 “显示电源管理系统”,也就是说桌面界面绝对不能空白屏幕。

unclutter -idle 0.5 -root &

这一行会运行之前安装的名为unclutter的程序。只要鼠标闲置时间超过0.5秒,这个程序就会把鼠标从显示屏上隐藏起来。

可以将空闲计时器调整到你想要的秒数,每个小数点都是秒的几分之一。

如果想立即删除鼠标,那么就把命令中的-idle 0.5去掉。

sed -i 's/"exited_cleanly":false/"exited_cleanly":true/' /home/pi/.config/chromium/Default/Preferences
sed -i 's/"exit_type":"Crashed"/"exit_type":"Normal"/' /home/pi/.config/chromium/Default/Preferences

这两行脚本使用sed来搜索Chromium偏好文件,并清除使警告栏出现的标志。

如果Chromium崩溃或突然关闭,上面这几行字将确保不必掌握鼠标和键盘来清除通常会出现在浏览器顶部的警告栏。

/usr/bin/chromium-browser --noerrdialogs --disable-infobars --kiosk https://pimylifeup.com https://www.adafruit.com &

这一行用参数启动Chromium。通过这些参数,让你知道你可以修改什么,以及如何修改它。

--kiosk

这个标志将Chromium设置为在Kiosk模式下运行,这将它锁定在一个特定的功能集上,只允许有限的访问网络浏览器和任何其他操作系统的功能。

Chromium的kiosk功能完全控制了屏幕,将Chromium最大化到屏幕的全部大小,并阻止用户输入被操作系统接受,有效地将终端用户困在沙盒内。

--noerrdialogs

这个选项告诉Chromium,它不应该向最终用户显示任何错误对话框。

如果不想让最终用户知道Chromium是否出了什么问题,这一点是至关重要的,这会清除 “exited_cleanly “和 “exit_type “状态。

--disable-infobars

用它来禁止Chromium向终端用户显示信息栏。

信息栏可以被Chromium用来发送通知,比如Chromium不是默认网络浏览器。当然,由于将其作为一个服务器,不需要用户知道Chromium可能想要显示的信息。

https://www.labno3.com/ https://www.raspberrypi.org/

这些是脚本将打开的两个网页,每个网页将在一个新的标签页中打开。可以在这个列表中添加额外的网页/标签,用空格隔开。

while true; do
      xdotool keydown ctrl+Tab; xdotool keyup ctrl+Tab;
      sleep 15
done

这几行运行一个非常简单的无限循环,使用xdotool来模仿按Ctrl + Tab。使Chromium切换到下一个标签。

当xdotool执行完按键后,它会让循环睡眠15秒。要改变循环在再次执行xdotool命令之前的睡眠时间,只需更改sleep 15命令即可。

也可以使用这个方法来添加屏幕刷新,当你想显示实时比分时,这可能很重要。这个命令应该像下面所示的那样。

xdotool keydown ctrl+r; xdotool keyup ctrl+r;

2. 一旦输入了Raspberry Pi kiosk脚本的所有代码,它看起来应该和下面显示的有些相似。

#!/bin/bash
xset s noblank
xset s off
xset -dpms

unclutter -idle 0.5 -root &

sed -i 's/"exited_cleanly":false/"exited_cleanly":true/' /home/pi/.config/chromium/Default/Preferences
sed -i 's/"exit_type":"Crashed"/"exit_type":"Normal"/' /home/pi/.config/chromium/Default/Preferences

/usr/bin/chromium-browser --noerrdialogs --disable-infobars --kiosk https://www.labno3.com/ https://www.raspberrypi.org/ &

while true; do
   xdotool keydown ctrl+Tab; xdotool keyup ctrl+Tab;
   sleep 10
done

3. 确定一切正确,按CTRL + X然后按Y,最后按ENTER键保存文件。

设置Raspberry Pi Kiosk在启动时启动

1. 在开始之前,需要先利用下面的命令来计算出当前的显示值是多少。这个值是用来让操作系统知道Chromium服务要显示到什么屏幕上,如果没有这个值,屏幕就会加载失败或者加载到错误的屏幕上。

运行以下命令来查看”$DISPLAY “系统变量的值。

echo $DISPLAY

记住这个值,在本节的第3步中需要它。

2. 为了让的Raspberry Pi Kiosk在开机时启动,需要运行下面的命令来创建一个服务文件。

这个服务文件将告诉操作系统要执行什么文件,以及希望在启动软件之前GUI可用。

sudo nano /lib/systemd/system/kiosk.service

3. 在信息屏服务文件中,输入以下几行文字。

这几行是定义信息屏服务的内容,要在系统加载到操作系统时运行kiosk.sh脚本。

在输入这些行时,可能需要修改 “Environment=DISPLAY=:“行,将 “0 “替换为你在本节步骤1中使用的命令的值。


[Unit]
Description=Chromium Kiosk
Wants=graphical.target
After=graphical.target

[Service]
Environment=DISPLAY=:0.0
Environment=XAUTHORITY=/home/pi/.Xauthority
Type=simple
ExecStart=/bin/bash /home/pi/kiosk.sh
Restart=on-abort
User=pi
Group=pi

[Install]
WantedBy=graphical.target

输入到文件中后,按CTRL + X,然后按Y,再按ENTER键保存文件。

4. 现在已经为我们的Raspberry Pi Kiosk创建了服务文件,运行以下命令来启用它。

启用该服务,将允许Chromium Kiosk在启动时自动启动,并启用systemd to service manager来监控它。

sudo systemctl enable kiosk.service

5. 启用Kiosk服务后,可以选择重新启动Raspberry Pi,或者通过运行以下命令来启动服务。

sudo systemctl start kiosk.service

6. 如果想检查Raspberry Pi Kiosk的服务状态,可以运行下面的命令。

这个命令会返回有关服务的各种信息,包括之前从软件中返回的线路,可以帮助你在服务失败时调试出什么问题。

sudo systemctl status kiosk.service

如果该命令显示状态为 “Active: active (running)”,那么现在一切都应该正常工作,Raspberry Pi Chromium Kiosk应该已经启动并正常运行。

7. 现在,一切都已准备就绪并正常运行,如果有任何原因你想停止服务运行,可以利用以下命令。

sudo systemctl stop kiosk.service

停止kiosk服务,服务管理器将杀死与之相关的所有进程。这个命令将停止kiosk.sh脚本的运行,同时也终止打开的Chromium浏览器。

8. 最后,如果想禁用Kiosk,可以利用以下命令。

sudo systemctl disable kiosk.service

该命令将停止Kiosk服务在启动时的运行,直到你重新启用它。

在Raspberry Pi Kiosk上强制执行分辨率

1. 可能想做的一件事是强制执行Raspberry Pi要使用的分辨率。设置分辨率可以相当方便,因为Raspberry Pi的内置检测有时会有点不准确。

要开始设置分辨率,必须首先通过运行以下命令加载Raspberry Pi配置工具。

sudo raspi-config

2. 在配置工具中,要先进入 “7 Advanced Options“。

3. 现在在高级选项部分,应该看到一个标有 “A5 Resolution“的选项,选择该选项。

4. 在这里找到并选择最适合你的屏幕的分辨率,然后按回车键。

5. 设置好分辨率后,需要重新启动Raspberry Pi。首先按ESC键退出配置工具,然后在Raspberry Pi的终端上输入以下命令。

sudo reboot

6. Raspberry Pi现在应该重新启动并以指定的分辨率运行。

有很多方法可以扩展这个教程。例如,可以在Raspberry Pi上设置一个网络服务器,让它为Kiosk提供本地网页显示。

现在,你应该已经让你的Raspberry Pi成功启动到Chromium的Kiosk模式。如果你对这个Raspberry Pi Kiosk教程有任何问题,或者想留下反馈,那么欢迎在下面留言。

平均: 0 / 5. votes: 0

到目前为止还没有投票!成为第一位评论此文章。

欢迎转载,请留下出处链接:Labno3 » 树莓派信息展示屏,用Kiosk模式运行Chromium显示网页信息

赞 (0)

评论

2+5=