구형 소형 노트북으로 dashboard 겸 라디오 플레이어 만들기

2018년에 구형 소형 노트북에 linux를 desktop이 없이 console 화면을 이용하는 환경으로 설치하고, 간단하게 구성한 dashboard 겸 온라인 라디오 플레이어에 대한 기술적인 내용들을 이곳에 정리하고자 한다.

기본 아이디어는 아래와 같다.

  1. 리눅스를 설치하고, dashboard로 표출하고 싶은 그림 파일들을 주기적으로 다운로드 받아서, 한개의 그림으로 만드는 shell script를 구성한다.
  2. 더불어서 청취하고자 하는 TBS FM, KBS1 FM, MBC FM를 들을 수 있게 해주는 shell script와 볼륨을 키웠다, 줄였다 할 수 있게 해주는 shell script를 준비한다.
  3. 리눅스가 부팅하면 자동으로 dashboardadmin이라는 미리 설정해둔 계정으로 autologin해서 자동으로 관련된 dashboard 첫 그림 파일을 만들고, 주기적으로 갱신되게 만든 후에, FIM으로 dashboard 그림 파일을 보여주게 한다.

dashboard 그림 파일 제작을 위한 shell script

download_all_images.sh 은 관련된 그림들을 모두 획득 후에 이를 montage를 이용해서 한개의 그림 파일로 만든다. 이 shell script는 여러개의 shell script를 이용하는 wrapper로 이용된다. 여러분이 원하는 방식으로 원하는 그림 파일을 만들면 된다.

#!/bin/bash

while true
do

source /home/dashboardadmin/Script/download_xxx.sh

source /home/dashboardadmin/Script/download_yyy.sh

source /home/dashboardadmin/Script/download_zzz.sh

source /home/dashboardadmin/Script/download_uuu.sh

### Checking the update time ###

source /home/dashboardadmin/Script/produce_update_time.sh

##### combining images #####

source /home/dashboardadmin/Script/montage_images.sh

USESLEEP="$[ ( ( $RANDOM % 10 ) + 5 ) ]m"
echo "... sleeping "$USESLEEP
sleep $USESLEEP

done

참고로 produce_update_time.sh은 아래와 같이 현재 시각을 그림 파일로 만든다.

#!/bin/bash 

convert -background white -fill black -font NanumGothic -pointsize 24 label:"$(date)" /home/dashboardadmin/update_time.png

청취하고자 하는 라디오 방송을 위한 shell script

ffplay를 이용하여 특정 라디오 방송을 온라인으로 청취할 수 있는 shell script를 준비하는데, shell script의 기본적인 구성은 아래와 같다. 이미 존재하는 player를 죽이고 새롭게 ffplay를 실행시키는 것으로, 이미 다른 방송이 출력되고 있다고 손쉽게 중단하고 새로운 방송으로 전환이 된다.

/usr/bin/killall -q rtmpdump ffplay

ffplay -nodisp -loglevel -8 -noinfbuf $useurl &> /dev/null &

혹은

rtmpdump --quiet --live -r $useurl | ffplay -nodisp -loglevel -8 -noinfbuf -i - &> /dev/null &

pgrep rtmpdump > /home/dashboardadmin/rtmpdump.pid
pgrep ffplay > /home/dashboardadmin/ffplay.pid

더불어서 아래와 같이 라디오 방송 청취를 중단시키는 stop.sh와, 볼륨을 높이고, 낮추는데 쓸 수 있는 volume_up.sh와 volume_down.sh도 준비한다. 이들 shell script들은 다음에 볼 수 있듯이 FIM에서 특정 키와 연결시켜서 특정 키를 누르면 실행되도록 구성될 것이다.

stop.sh

#!/bin/bash

pid_rtmpdump=$(cat /home/dashboardadmin/rtmpdump.pid)
pid_mplayer=$(cat /home/dashboardadmin/mplayer.pid)

/bin/kill -s 9 $pid_rtmpdump $pid_mplayer &> /dev/null

volume_up.sh

#!/bin/bash

amixer set 'Master' 10%+ >& /dev/null

volume_down.sh

#!/bin/bash

amixer set 'Master' 10%- >& /dev/null

FIM 환경 설정 및 autologin 구성

우선 dashboardadmin이 framebuffer를 이용해서 노트북 디스플레이에 그림 파일을 직접 보여줄 수 있도록 할 필요가 있다. 이를 위해서 아래와 같이 그룹 권한을 부여한다. useradd dashboardadmin video

FIM의 환경 설정 파일(참고)을 dashboardadmin 계정의 홈 디렉토리 아래에 .fimrc 파일로 아래와 같이 구성한다. 여기서 앞서 설명된 라디오 청취 shell script가 특정 키보드 키와 연결되게 된다. .fimrc의 내용은 아래와 같다.

bind 'C-t' "system '/home/dashboardadmin/Script/listen_TBS_FM.sh'";
bind 'C-k' "system '/home/dashboardadmin/Script/listen_KBS1_FM.sh'";
bind 'C-m' "system '/home/dashboardadmin/Script/listen_MBC_FM.sh'";
bind 's' "system '/home/dashboardadmin/Script/stop.sh'";
bind 'PageUp' "system '/home/dashboardadmin/Script/volume_up.sh'";
bind 'PageDown' "system '/home/dashboardadmin/Script/volume_down.sh'";
_display_status=0;

dashboardadmin으로 autologin이 되면 바로 실행이 되어야 하는 내용을 아래와 같이 .bashrc로 구성한다. 여기서 dashboard_image.png가 만들어져서 표출되는 그림 파일에 해당한다.

if [ $(tty) == "/dev/tty1" ]
then
        rm -f /home/dashboardadmin/dashboard_image*.png /home/dashboardadmin/*.pid
        /home/dashboardadmin/Script/download_xxx.sh
        /home/dashboardadmin/Script/download_yyy.sh
        /home/dashboardadmin/Script/download_zzz.sh
        /home/dashboardadmin/Script/download_uuu.sh
        /home/dashboardadmin/Script/produce_update_time.sh
        /home/dashboardadmin/Script/montage_images.sh
        nohup /home/dashboardadmin/Script/download_all_images.sh >& /dev/null &
        while true; do fim /home/dashboardadmin/dashboard_image.png; done
fi

이렇게 구성이 되면, tty1 console에서 실제 autologin이 되도록 아래와 같이 파일을 만든다. Ubuntu의 경우에는, /etc/systemd/system/getty@tty1.service.d/override.conf 에

[Service]
ExecStart=
ExecStart=-/sbin/agetty --autologin dashboardadmin --noclear %I

와 같이 설정하면 된다 (참고).

추가로 개선할 수 있는 것들

  1. IR 리모콘을 활용할 수 있으며, 이 경우 IR 리모콘과 FIM의 key를 묶어서 라디오 채널 전환이나 중단, 볼륨 조절 등에 이용할 수 있다.
  2. bluetooth 스피커를 활용하는 것도 생각할 수 있는데, 라디오의 경우 현재는 구형 노트북의 내장 스피커를 이용하나, bluetooth 외부 스피커를 활용하는 것도 가능하다.