Auto-Start with Systemd
Run bbl-shutter-cam automatically on Pi boot.
Overview
Note: Systemd auto-start is optional and not required for basic operation.
While
bbl-shutter-camis not designed as a persistent daemon or background service, systemd can be useful for users who want the tool to automatically start listening for Bluetooth triggers when the Pi boots. The application runs continuously to monitor BLE signals, making systemd a convenient way to ensure it’s always ready without manual intervention.
Systemd services ensure bbl-shutter-cam starts and restarts automatically on boot.
User Service (Recommended for Development)
Create a user-level service (no sudo needed):
1. Create Service File
mkdir -p ~/.config/systemd/user
cat > ~/.config/systemd/user/bbl-shutter-cam.service << 'EOF'
[Unit]
Description=BBL Shutter Cam Time-Lapse Capture
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=pi
WorkingDirectory=/home/pi/bbl-shutter-cam
ExecStart=/home/pi/bbl-shutter-cam/venv/bin/bbl-shutter-cam run --profile my-printer --log-file %h/bbl.log
Restart=always
RestartSec=10
[Install]
WantedBy=default.target
EOF
Edit:
- Change
my-printerto your profile name - Change
/home/pito your home directory if different
2. Enable & Start
systemctl --user daemon-reload
systemctl --user enable bbl-shutter-cam
systemctl --user start bbl-shutter-cam
3. Check Status
systemctl --user status bbl-shutter-cam
Expected output:
● bbl-shutter-cam.service - BBL Shutter Cam Time-Lapse Capture
Loaded: loaded (/home/pi/.config/systemd/user/bbl-shutter-cam.service; enabled; preset: enabled)
Active: active (running) since Thu 2026-02-14 10:30:45 UTC; 5min ago
Main PID: 1234 (bbl-shutter-cam)
Tasks: 5
Memory: 15.2M
CGroup: /user.slice/user-1000.slice/user@1000.service/app.slice/bbl-shutter-cam.service
└─1234 /home/pi/bbl-shutter-cam/venv/bin/bbl-shutter-cam run ...
4. View Logs
# Real-time
journalctl --user -u bbl-shutter-cam -f
# Last 50 lines
journalctl --user -u bbl-shutter-cam -n 50
5. Stop/Restart
# Stop
systemctl --user stop bbl-shutter-cam
# Restart
systemctl --user restart bbl-shutter-cam
# Check next boot
systemctl --user is-enabled bbl-shutter-cam
# Output: enabled
System Service (Optional - for System-Wide)
For system-wide installation (requires sudo):
sudo tee /etc/systemd/system/bbl-shutter-cam.service > /dev/null << 'EOF'
[Unit]
Description=BBL Shutter Cam Time-Lapse Capture
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=pi
WorkingDirectory=/home/pi/bbl-shutter-cam
ExecStart=/home/pi/bbl-shutter-cam/venv/bin/bbl-shutter-cam run --profile my-printer --log-file /home/pi/bbl.log
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF
Then:
sudo systemctl daemon-reload
sudo systemctl enable bbl-shutter-cam
sudo systemctl start bbl-shutter-cam
Multiple Profiles
Running multiple printer profiles with systemd:
Create Separate Services
# User service for multiple profiles
cat > ~/.config/systemd/user/bbl-shutter-cam-p1s.service << 'EOF'
[Unit]
Description=BBL Shutter Cam - P1S Office
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=pi
WorkingDirectory=/home/pi/bbl-shutter-cam
ExecStart=/home/pi/bbl-shutter-cam/venv/bin/bbl-shutter-cam run --profile p1s-office --log-file %h/bbl-p1s.log
Restart=always
RestartSec=10
[Install]
WantedBy=default.target
EOF
cat > ~/.config/systemd/user/bbl-shutter-cam-x1c.service << 'EOF'
[Unit]
Description=BBL Shutter Cam - X1C Garage
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=pi
WorkingDirectory=/home/pi/bbl-shutter-cam
ExecStart=/home/pi/bbl-shutter-cam/venv/bin/bbl-shutter-cam run --profile x1c-garage --log-file %h/bbl-x1c.log
Restart=always
RestartSec=10
[Install]
WantedBy=default.target
EOF
Enable both:
systemctl --user daemon-reload
systemctl --user enable bbl-shutter-cam-p1s bbl-shutter-cam-x1c
systemctl --user start bbl-shutter-cam-p1s bbl-shutter-cam-x1c
Check both:
systemctl --user status bbl-shutter-cam-p1s bbl-shutter-cam-x1c
Troubleshooting
Service Won’t Start
journalctl --user -u bbl-shutter-cam -n 50
Look for error messages. Common issues:
- Profile name typo
- Working directory wrong
- venv path incorrect
Service Keeps Restarting
Check logs for capture errors. Likely:
- Camera not available
- Bluetooth connection issues
- Output directory permission problems
Disable Service
systemctl --user disable bbl-shutter-cam
systemctl --user stop bbl-shutter-cam
Uninstall Service
rm ~/.config/systemd/user/bbl-shutter-cam.service
systemctl --user daemon-reload
Auto-Start on Boot
Systemd automatically starts enabled user services when user logs in.
For headless Pi that boots without login:
# Enable "linger" (for background startup without login)
sudo loginctl enable-linger pi