Troubleshooting¶
This page covers common issues you might encounter when setting up or running CyberHUD, along with solutions and diagnostic steps.
Display Initialization Failures¶
If your display doesn't initialize or shows nothing:
-
Verify SPI is enabled on your Raspberry Pi:
If no devices appear, enable SPI via
raspi-configor by addingdtparam=spi=onto/boot/config.txt. -
Confirm you're using the correct panel name:
-
Check the daemon logs for initialization errors:
-
Try running in headless mode to isolate whether the issue is display-specific:
Input Not Working (Buttons/Joystick)¶
If buttons or joystick input is unresponsive:
-
Verify the correct panel is loaded — different displays use different input pins:
-
Check for GPIO pin conflicts:
-
If using custom GPIO wiring, ensure your configuration file specifies the correct button/joystick pins (
key1,key2,key3,up,down,left,right,press). -
You can disable input entirely if not needed:
Optional Accessory Device Detection¶
If STEMMA/QWIIC devices aren't being detected:
-
Confirm I2C is enabled:
-
Check which devices the daemon sees:
-
Verify the I2C bus path in your config matches your hardware. Multiple buses can be specified:
-
Adjust the scan interval if devices appear intermittently:
Permission Errors¶
If you see permission denied errors:
-
The daemon typically needs root or appropriate group membership to access SPI, I2C, and GPIO:
-
For systemd service deployment, ensure the service user has the required group memberships (
spi,i2c,gpio). See Systemd Integration for details. -
Check socket permissions if
cyberhudctlcan't connect:
GPIO Conflicts¶
If you suspect pin conflicts between the display driver and other software:
-
Run the pin conflict checker:
-
Review the Pin Assignments for your display panel to identify which pins are in use.
-
If conflicts exist, use custom GPIO overrides to remap pins:
Checking Systemd Logs¶
When running as a systemd service, logs are available via journalctl:
# View the last 50 log entries
sudo journalctl -u cyberhudd.service -n 50
# Follow logs in real time
sudo journalctl -u cyberhudd.service -f
# Check service status
sudo systemctl status cyberhudd.service
Running Headless Mode¶
Headless mode starts the daemon without display initialization, which is useful for isolating display-related issues:
In headless mode the daemon will still:
- Scan I2C buses for STEMMA devices
- Monitor GPIO pins
- Serve the console socket
You can verify core functionality works by querying the daemon:
If headless mode works correctly, the issue is likely display-specific — check your panel selection and GPIO wiring.
Configuration Troubleshooting¶
Config File Not Being Read¶
Verify the path is correct and the file contains valid JSON:
Ensure you're passing the config flag when starting the daemon:
CLI Flags Not Overriding Config¶
CLI flags should override config file values. Make sure you're using explicit flags alongside the config flag:
Partial Overrides Not Working¶
When using a config file, only include fields you want to override. Omitted fields automatically keep their panel defaults — you don't need to set them to empty or zero:
This overrides only the DC pin. All other fields (rst, bl, offsets, etc.) remain at the panel's built-in defaults.
Next Steps¶
- Review the full Configuration Schema for all available settings
- Set up cyberhud to start at boot: Systemd Integration
- Browse available Display Modes to customize your setup
- Check the FAQ for answers to common questions
Need More Help?¶
- Check the CLI Usage page for full command reference
- Review Configuration for config file setup
- Read the Pin Assignments for your specific display
- Try headless mode to isolate display issues:
sudo ./cyberhudd -nodisplay - Open an issue on GitHub with logs and hardware details