Raspberry Pi를 사용하여 말하는 Kiosk 터미널을 만드는 방법

개요



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
    
  • 파일 시스템 용량 확장
  • 시간대/키보드 설정
  • 호스트 이름 변경
  • 루트 암호 변경

  • IP 고정


    $ sudo vi /etc/dhcpcd.conf
    

    /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/[email protected] 
    $ 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-kr-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
    

    /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
    

    /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
    

    ~/.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



    /var/www/html/api/reload.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



    /var/www/html/api/av.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
    

    /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



    /var/www/html/api/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'");
    }
    

    좋은 웹페이지 즐겨찾기