No Code AI(肉寇)AI自動化兩日精通|實體6小時+線上6小時
|

如何把樹莓派設定成Kiosk資訊亭模式

   

作者:陸向陽

用樹莓派電腦來打造Kiosk資訊亭(圖片來源:樹莓派官網)

所謂Kiosk資訊亭、資訊服務亭可能太學名,但各位多少使用過便利店的ibon、FamiPort吧?那就是服務亭,或者現在在麥當勞、漢堡王的點餐機也算是。

資訊亭的背後其實就是嵌入式電腦,有的也是用樹莓派,現在公眾場合常用到的數位看板(Digital Signage)也是。想把樹莓派變成資訊亭的背後電腦,好像就是把樹莓派的HDMI輸出接到顯示器,然後把樹莓派放到顯示器後面即可,這確實沒錯,但軟體設定上卻有許多細節步驟,以下簡單說明。

首先,假定各位已經把一些基礎搞定了,包含樹莓派硬體(以第四代樹莓派為主)安裝、格式化記憶卡(建議最少16GB)、把Raspberry Pi OS(要選擇有桌面環境的版本)放入等。然後要設定主機名稱,例如kioskpi.local,接著是設定一組帳號密碼(假定使用者為pi,密碼為123),若要使用無線的話則設定一個SSID。

之後在本機端進入終端機(terminal)模式,或者是用有線無線方式遠端登入也可以,先將剛安裝好的Raspberry Pi OS進行一次相關更新,更新後重新開機:

$ sudo apt update
$ sudo apt full-upgrade
$ sudo reboot

接著要安裝兩個應用程式:xdotool、unclutter,前者用來模擬鍵盤滑鼠等操作,後者用來消除螢幕上的滑鼠指標:

$ sudo apt install xdotool unclutter

安裝後,為了讓往後樹莓派一開機就進入桌面環境,而且是不用再輸入帳號密碼就進入,需要對樹莓派進行組態配置設定:

$ sudo raspi-config

編輯往後要執行的Script檔案

進入畫面選單後,選擇1. System Options,然後選S5 Boot/Auto Login,再選B4 Desktop Autologin — Desktop GUI。

樹莓派的組態設定畫面1(圖片來源:樹莓派官網)

樹莓派的組態設定畫面2 (圖片來源:樹莓派官網)

完成上述後再一次重新開機。然後要設定往後開機就進入的Kiosk畫面,假設是用網頁瀏覽器交替顯示兩個頁面,每10秒交替,對此要編輯一個往後要執行的Script檔案:

$ sudo nano /home/pi/kiosk.sh


#!/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.raspberrypi.com/ https://time.is/London &

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

以下簡單說明這個檔案內的命令,#!/bin/bash是告知作業系統,以下我們要用bash來解析與執行命令。

而三行命令xset s noblank、xset s off、xset -dpms是用來關閉螢幕保護程式,Kiosk模式下不需要用。至於unclutter -idle 0.5 -root &這行就是用來關閉滑鼠游標的,畢竟Kiosk多是以觸控螢幕的方式互動操作,不需要游標。

接下來兩行sed開頭的命令是用來阻止各種彈出視窗的,以免影響Kiosk互動操作的觀感。而/usr/bin/chromium-browser…這一行是要求Chromium全螢幕交替顯示兩個網址畫面,一是顯示樹莓派官網,另一是顯示倫敦時間。

建立服務檔案

再來用一個while指令是讓兩個網頁每10秒交替顯示,不然一直在同一個畫面也挺無聊的。接著,為了讓樹莓派每次開機就自動執行上述指令,即我們再建立一個服務檔案,建立命令與檔案內容如下:

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


[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

服務檔案內就會自動去執行更之前建立的kiosk.sh檔了。至於這個服務功能要開啟、要開始服務、要停止服務等,則可以分別使用以下三個命令:

服務開啟➝$ sudo systemctl enable kiosk.service

開始服務➝$ sudo systemctl start kiosk.service

停止服務➝$ sudo systemctl stop kiosk.service

上述可以說是做了許多自動化設定、防呆設定(例如讓游標消失),但Kiosk還需要些防駭設定,避免被駭客入侵,首先是關閉、開啟所有USB埠的命令列:

關閉➝$ echo ‘1-1’ | sudo tee /sys/bus/usb/drivers/usb/unbind

開啟➝$ echo ‘1-1’ | sudo tee /sys/bus/usb/drivers/usb/bind

有線乙太網路的關閉與開啟則為:

關閉➝$ sudo ifconfig eth0 down

開啟➝$ sudo ifconfig eth0 up

除了親手下指令外,最好一開機就自動關閉這些,這樣就需要設定一下rc.local檔案:

$ sudo nano /etc/rc.local


#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

echo '1-1' | sudo tee /sys/bus/usb/drivers/usb/unbind

sudo ifconfig eth0 down

exit 0

小結

透過以上設定,每次開機就會自動停用USB與乙太網路。另外,較新款的樹莓派有藍牙功能,關閉方式則是編輯config.txt檔案:

$ sudo nano /boot/config.txt

在檔案的最底下再增加一行,內容為:dtoverlay=disable-bt

另外,我們是用帳號密碼登入到樹莓派,如果帳密外流就麻煩了,因此也可以用ssh-keygen方式產生公私鑰對,以核對私鑰的方式來登入。最後,還可以設定記憶卡為唯讀方式運作,避免被駭客、惡意程式入侵,也避免其他的誤寫入。

(責任編輯:謝嘉洵)

陸向陽

訂閱MakerPRO知識充電報

與40000位開發者一同掌握科技創新的技術資訊!

Author: 陸向陽

從電子科系畢業後,即以媒體人的角色繼續這段與「電子科技」的不解之緣。歷任電子技術專書作者、電子媒體記者、分析師等角色,並持續寫作不殆。近來投入Arduino、Raspberry Pi等開放硬體的研究與教程介紹。

Share This Post On
468 ad

Submit a Comment

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *