概要
Raspberry PiのWeb Browser(Midori)をFullscreenで起動してKiosk端末化しました。時計盤はFlipClock.jsを改造して利用しています。いわゆるLAP(Linux/Apache/PHP)環境です。電源とHDMIとLANのケーブルが刺さっています。OSはRaspbian jessieを使いました。
用意する物
- Raspberry Pi (今回は 1 Model B を使用)
- SDカード8GB
- フルHDディスプレイ
- USBキーボード
- 電源ケーブル
- HDMIケーブル
- LANケーブル
OSのインストールと設定
OSはRaspbian jessieを使いました。公式サイトからRASPBIAN JESSIEをダウンロードして、installation guideに従って、SDカードを作成しました。
Raspberry PiにSDカードを差し込み、ディスプレイやキーボードやLANケーブルを接続して、電源をONすれば起動するはずです。
初期設定
起動したら、Ctrl-Alt-F1でtty1(ターミナル画面)へ。
raspi-config
$ sudo raspi-config
- ファイルシステムの容量の拡張
- タイムゾーン/キーボードの設定
- ホスト名の変更
- rootパスワードの変更
IP固定
$ sudo vi /etc/dhcpcd.conf
...
interface eth0
static ip_address=192.168.0.39/24
static routers=192.168.0.1
static domain_name_servers=8.8.8.8
接続テストする。
$ ping example.com
アップデート
$ sudo apt-get update
$ sudo apt-get upgrade
しばらく時間がかかる。
ログインユーザーの変更
今回の場合では、ユーザーpi
から新規ユーザーoden
に変更した。
$ sudo adduser oden
$ sudo usermod -aG adm,dialout,cdrom,sudo,audio,video,plugdev,games,users,input,netdev,spi,i2c,gpio oden
$ sudo visudo
$ sudo vi /etc/systemd/system/autologin@.service
$ sudo vi /etc/lightdm/lightdm.conf
$ sudo userdel -r pi
アプリケーションのインストールと設定
インストールしたアプリケーションは次の通りです。
- apache2
- php5
- samba
- midori
- fonts-ipaexfont
- unclutter
- xautomation
- open-jtalk
- open-jtalk-mecab-naist-jdic
- htsengine
- libhtsengine-dev
- hts-voice-nitech-jp-atr503-m001
一度ににインストールするなら
$ sudo apt-get install apache2 php5 samba midori fonts-ipaexfont unclutter xautomation open-jtalk open-jtalk-mecab-naist-jdic htsengine libhtsengine-dev hts-voice-nitech-jp-atr503-m001
しばらく時間がかかる。
apache2/php5のインストールと設定
$ sudo apt-get install apache2 php5
$ sudo chmod 777 /var/www/html
$ sudo vi /etc/apache2/envvars
...
# export APACHE_RUN_USER=www-data
export APACHE_RUN_USER=oden
# export APACHE_RUN_GROUP=www-data
export APACHE_RUN_GROUP=oden
...
Apache/PHPを介して、ディスプレイのオン/オフや音量調節やOpen JTalkにしゃべらせてみる為に、起動するユーザーをwww-data
から普通のユーザーoden
に変更しました。
sambaのインストールと設定
$ sudo apt-get install samba
$ sudo vi /etc/samba/smb.conf
...
[www]
comment = Home Directories
browseable = yes
read only = no
path = /var/www/html
force user = oden
create mask = 0775
directory mask = 0775
valid users = oden
...
画面上に表示したいファイルをsambaを介して変更できるようにしました。
Kiosk端末化
$ sudo apt-get install midori fonts-ipaexfont unclutter xautomation
$ vi ~/.config/lxsession/LXDE-pi/autostart
# @lxpanel --profile LXDE-pi
# @pcmanfm --desktop --profile LXDE-pi
# @xscreensaver -no-splash
@xset dpms 0 0 0
@xset s 0
@midori -e Fullscreen -a http://localhost/
画面のリロード
シェル
$ xte -x :0 'key F5'
PHP
<?php
header('Content-type: text/plain; charset=utf-8');
system("sleep 5; xte -x :0 'key F5'; echo \$?");
画面のオン/オフと音量調節
シェル
$ amixer -c 0 sset PCM 50% #音量
$ tvservice -o #画面オフ
$ tvservice -p; sleep 1; xset -display :0 dpms force on #画面オン
PHP
<?php
header('Content-type: text/plain; charset=utf-8');
if(isset($_GET['a'])) {
$a = intval($_GET['a']);
if ($a > 100) $a = 100;
if ($a < 10) $a = 10;
$a = (log10($a) - 1)*100;
system("amixer -c 0 sset PCM $a%");
}
if(isset($_GET['v'])) {
$v = $_GET['v'];
if ($v === "off") {
system("tvservice -o");
}
if ($v === "on") {
system("tvservice -p; sleep 1; xset -display :0 dpms force on");
}
system("xset -display :0 -q");
}
Open JTalkのインストールと設定
$ sudo apt-get install open-jtalk open-jtalk-mecab-naist-jdic htsengine libhtsengine-dev hts-voice-nitech-jp-atr503-m001
しゃべらせてみる
Meiちゃんをコマンドjsay [しゃべらせたい言葉]
でしゃべらせてみたい。
$ sudo mkdir /usr/local/share/hts_voice/mei/
$ sudo cp [ここにmei_normal.htsvoiceのパスを記入] /usr/local/share/hts_voice/mei/
$ sudo touch /usr/local/bin/jsay
$ sudo vi /usr/local/bin/jsay
$ sudo chmod +x /usr/local/bin/jsay
# !/bin/sh
CMDNAME=`basename $0`
if [ $# -lt 1 ]; then
echo "Usage: ${CMDNAME} [ text ]" 1>&2
exit 1
fi
TMPFILE=`mktemp /tmp/tmp.XXXXXX.wav`
DIC=/var/lib/mecab/dic/open-jtalk/naist-jdic/
VOICE=/usr/local/share/hts_voice/mei/mei_normal.htsvoice
echo "$1" | open_jtalk \
-x ${DIC} \
-m ${VOICE} \
-ow ${TMPFILE} && \
aplay --quiet ${TMPFILE}
rm -f ${TMPFILE}
exit 0
シェル
$ jsay ぽぽぽぽーん
PHP
<?php
if(isset($_GET['q'])) {
$q = $_GET['q'];
$q = str_replace("'", "\"", $q);
$q = mb_strimwidth($q, 0, 512, " 以下省略");
header('Content-type: text/plain; charset=utf-8');
system("jsay '$q'");
}