GPi Case - ES용 시계


개요

얼마전 라즈겜동의 구퓌님이 AM에서 스크린세이버를 이용하여 시계를 만드시는 것을 보고, 꽤 유용한듯하여 ES에서 비슷하게 따라해봤습니다.

방법은 간단한데요..
1분마다 시간이 들어간 이미지를 생성해주고, ES에서 사용되는 스크린세이버 기능중 이미지 슬라이드를 설정하는 방법입니다.
참고로 중년점프에서 losernator이 배포해주신 gpiCase 이미지 기반에서 확인하였습니다.

다운로드

기본 설정

첨부된 파일을 라즈베리파이에 저장합니다.
"Danger on the Motorway.otf" 파일도 구글링해서 추가해주세요. 참고로 저는 /home/pi/kimstar/imageWatch/ 디렉토리에 저장하였습니다. imageWatch.py 에서 경로 등의 설정을 수정합니다.

# 이미지 갯수
random_range = 12

# 폰트 색깔, 마지막 128은 50% 반투명입니다.
font_color = (255,255,255,128)

# 폰트 파일
font_name = 'Danger on the Motorway.otf'

# 폰트 크기
font_size = 38

# 폰트 위치
font_location = (90,25)

# 디렉토리 위치
directory = '/home/pi/kimstar/imageWatch/'

# 반복 초
duration = 60

Pillow 설치

이미지 처리를 위해 Pillow를 설치합니다.

$ sudo apt-get update
$ sudo apt-get install python3-pip
$ pip3 install Pillow

슬라이드쇼 기본 이미지 디렉토리 생성

$ mkdir /home/pi/.emulationstation/slideshow
$ mkdir /home/pi/.emulationstation/slideshow/image

슬라이드쇼 설정

  • start 버튼 > UI SETTINGS > SCREENSAVER SETTINGS > SCREENSAVER AFTER : 1 (or 적당한 값)
  • start 버튼 > UI SETTINGS > SCREENSAVER SETTINGS > SCREENSAVER CONTROLS : ON
  • start 버튼 > UI SETTINGS > SCREENSAVER SETTINGS > SCREENSAVER BEHAVIOR : SLIDESHOW
  • start 버튼 > UI SETTINGS > SCREENSAVER SETTINGS > SLIDESHOW SCREENSAVER SETTINGS > SWAP IMAGE AFTER : 60s (or 적당한 값)
  • start 버튼 > UI SETTINGS > SCREENSAVER SETTINGS > SLIDESHOW SCREENSAVER SETTINGS > USE CUSTOM IMAGES : ON

자동실행을 위해 autostart.sh을 편집

$ sudo vi /opt/retropie/configs/all/autostart.sh

python3 /home/pi/kimstar/imageWatch.py &
emulationstation #auto

게임실행중 체크를 위한 로그 생성

게임이 실행될때 runcommand.log 파일에 실행하는 시스템명을 첫줄에 기록하고, 게임이 중단되면 runcommand.log 내용을 지웁니다.
imageWatch.py 에서는 이 값을 읽어서 게임중일때는 이미지 생성을 하지 않습니다.

$ vi /opt/retropie/configs/all/runcommand-onstart.sh
~~~
echo "$1" >&2

$ vi /opt/retropie/configs/all/runcommand-onend.sh
~~~
sed '1,$d' /dev/shm/runcommand.log > /dev/shm/runcommand.log

적용 화면

ES 화면에서 설정한 시간동안 기다리거나, 기기 목록에서 SELECT 버튼을 눌러 스크린세이버로 진입합니다.
아래는 적용했을때의 모습입니다.

참고자료

2026.04.14 - 코드 수정

runcommand 없이 게임실행 중인지 체크하는 로직으로 변경하였습니다. pip3 install psutil 를 사용하여 psutil을 설치해야 동작합니다.

from PIL import Image, ImageDraw, ImageFont
from datetime import datetime
import random
import time
import psutil

random_range = 12
font_color = (255,255,255,128)
font_file_name = 'Danger on the Motorway.otf'
font_size = 38
font_location = (90,25)
directory = '/home/pi/kimstar/imageWatch/'
duration = 60
emulators = ['retroarch', 'ppsspp', 'mupen64plus']

def is_game_running():
    for proc in psutil.process_iter(['name']):
        if proc.info['name'] in emulators:
            return True
    return False

def generator_image():
	try:
		rand_file_name = directory + 'imageWatch_' + str(random.randint(1,random_range)) + '.png'
		#print(rand_file_name)    
		base = Image.open(rand_file_name).convert('RGBA')
		txt = Image.new('RGBA', base.size, (255,255,255,0))
		fnt = ImageFont.truetype(directory + font_file_name, font_size)
		d = ImageDraw.Draw(txt)
		d.text(font_location, datetime.now().strftime('%H:%M'), font=fnt, fill=font_color)
		out = Image.alpha_composite(base, txt)
		out.save('/home/pi/.emulationstation/slideshow/media/imageWatch.png', 'PNG')
	except Exception as ex:
		print("Exception: ", ex)	

while True:
	if not is_game_running():
		generator_image()

	time.sleep(duration)

광고

2개의 댓글

댓글 남기기