2018년에 구형 소형 노트북에 linux를 desktop이 없이 console 화면을 이용하는 환경으로 설치하고, 간단하게 구성한 dashboard 겸 온라인 라디오 플레이어에 대한 기술적인 내용들을 이곳에 정리하고자 한다.
기본 아이디어는 아래와 같다.
- 리눅스를 설치하고, dashboard로 표출하고 싶은 그림 파일들을 주기적으로 다운로드 받아서, 한개의 그림으로 만드는 shell script를 구성한다.
- 더불어서 청취하고자 하는 TBS FM, KBS1 FM, MBC FM를 들을 수 있게 해주는 shell script와 볼륨을 키웠다, 줄였다 할 수 있게 해주는 shell script를 준비한다.
- 리눅스가 부팅하면 자동으로 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
와 같이 설정하면 된다 (참고).
추가로 개선할 수 있는 것들
- IR 리모콘을 활용할 수 있으며, 이 경우 IR 리모콘과 FIM의 key를 묶어서 라디오 채널 전환이나 중단, 볼륨 조절 등에 이용할 수 있다.
- bluetooth 스피커를 활용하는 것도 생각할 수 있는데, 라디오의 경우 현재는 구형 노트북의 내장 스피커를 이용하나, bluetooth 외부 스피커를 활용하는 것도 가능하다.