POSA_LEAKSMS/raspberry_pi_zero2w_display/systemd/display-dashboard.service
cw2007 42a6ee4bb0 feat(display): Zero 2 W ST7789 상태 디스플레이 노드
Pi Zero 2 W + ST7789 패널에 노드 상태(누수/온습도/미세먼지·오프라인·정체)를 상시 표시하는
디스플레이 노드 신설. 배포 전 렌더 검증 원칙에 따라 합성 최악 프레임 11종을 패널 실해상도로
render_preview/ 에 PNG 로 선렌더.

- st7789_driver.py · display_dashboard.py · render_preview.py(합성 프레임 생성)
- install.sh · vendor.sh · systemd/display-dashboard.service · 배선(WIRING)·연결테스트
- render_preview/01~11: 요약/통합/메트릭/오프라인/stale/legacy-무PM 최악 케이스
2026-07-19 10:47:00 +09:00

51 lines
1.7 KiB
Desktop File

# =============================================================================
# /etc/systemd/system/display-dashboard.service
# 미니 상태 표시기 (Pi Zero 2 W + ST7789V) 부팅 자동 실행
#
# 설치:
# sudo cp systemd/display-dashboard.service /etc/systemd/system/
# sudo systemctl daemon-reload && sudo systemctl enable --now display-dashboard
# 경로가 /home/pi/display 가 아니면 WorkingDirectory/ExecStart 수정.
# =============================================================================
[Unit]
Description=Mini Status Display (Pi Zero 2 W, ST7789V)
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=pi
Group=pi
# /dev/spidev0.0 + GPIO 문자장치 접근
SupplementaryGroups=spi gpio
WorkingDirectory=/home/pi/display
ExecStart=/home/pi/display/venv/bin/python display_dashboard.py
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal
SyslogIdentifier=display-dashboard
Environment=PYTHONUNBUFFERED=1
PrivateTmp=true
# ── 샌드박스 (sht30 유닛과 동일 정책) ──────────────────────────────────────
NoNewPrivileges=true
ProtectSystem=strict
ReadWritePaths=/var/log
ProtectHome=read-only
ProtectKernelModules=true
ProtectKernelTunables=true
ProtectControlGroups=true
RestrictSUIDSGID=true
LockPersonality=true
RestrictRealtime=true
# HTTPS 폴링 + 로컬 소켓(DNS/journal). AF_NETLINK 은 getaddrinfo 용.
RestrictAddressFamilies=AF_INET AF_INET6 AF_UNIX AF_NETLINK
# ⚠️ PrivateDevices 금지 — /dev/spidev0.0, /dev/gpiomem 이 가려져 화면 불가.
StartLimitBurst=5
StartLimitInterval=600s
[Install]
WantedBy=multi-user.target