[GUIDE] Waveshare 11.9"/7.9" HDMI LCD Display Configuration for Volumio 4

Waveshare HDMI display configuration guide for Volumio OS

Supported hardware

Waveshare HDMI displays

  • 11.9 inch HDMI LCD - Native resolution 320x1480 (portrait)
  • 7.9 inch HDMI LCD - Native resolution 400x1280 (portrait)

Note: These are generic HDMI displays compatible with any device supporting custom HDMI timings. This guide specifically covers configuration for Raspberry Pi running Volumio OS.

Configuration tested on

  • Raspberry Pi 4B+ - All scenarios tested and verified
  • Raspberry Pi 5 - All scenarios tested and verified

Operating system

  • Volumio OS (Debian Bookworm-based)

Plymouth theme requirement

  • volumio-adaptive - Required for proper boot splash rotation
  • See References section for installation source and community discussion

Why this specific theme is required:

Portrait-native displays like the Waveshare panels expose a fundamental Linux kernel limitation: the DRM (Direct Rendering Manager) subsystem assumes all displays are landscape-oriented. When rotation parameters are applied to portrait-native panels, the kernel’s rotation logic produces inconsistent or wrong orientations because it calculates rotation from a landscape baseline that doesn’t match the panel’s actual native orientation.

The volumio-adaptive theme solves this by using pre-rotated sequences instead of runtime rotation. This bypasses both the kernel’s broken rotation logic and Plymouth’s text rotation limitations, ensuring the boot splash displays correctly regardless of the display’s native orientation.


Display-specific parameters reference

All configurations require display-specific parameters. Use this table to determine correct values for your display.

Parameter table by display size

Parameter 11.9 inch display 7.9 inch display
Native resolution 320x1480 (portrait) 400x1280 (portrait)
Rotated resolution 1480x320 (landscape) 1280x400 (landscape)
hdmi_timings 320 0 80 16 32 1480 0 16 4 12 0 0 0 60 0 42000000 3 400 0 220 32 110 1280 0 10 10 10 0 0 0 60 0 59400000 3
max_framebuffer_height 1480 (required) Not needed
video= parameter video=HDMI-A-1:320x1480M@60,rotate=90 video=HDMI-A-1:400x1280M@60,rotate=90
plymouth= parameter plymouth=90 plymouth=90
Expected fbset output mode "1480x320" mode "1280x400"

Important notes:

  • Both displays use rotate=90 in video= parameter for landscape orientation
  • Both displays use plymouth=90 to enable volumio-adaptive theme rotation
  • 11.9 inch display requires max_framebuffer_height=1480 parameter
  • 7.9 inch display does NOT need max_framebuffer_height parameter
  • HDMI rotation (90 degrees) differs from DSI rotation (270 degrees) but achieves same physical orientation

Complete example configurations

This section provides complete, ready-to-use configuration files for common setups. Choose the example matching your hardware and copy the entire configuration.

Example 1: Raspberry Pi 4B+ with 11.9 inch HDMI display (Scenario 1)

Complete /boot/userconfig.txt:

# Add your custom config.txt options to this file, which will be preserved during updates
[pi4]
dtoverlay=vc4-kms-v3d-pi4
max_framebuffer_height=1480
hdmi_group=2
hdmi_mode=87
hdmi_timings=320 0 80 16 32 1480 0 16 4 12 0 0 0 60 0 42000000 3
[all]
#### Touch Display rotation setting below: do not alter ####
display_lcd_rotate=1
display_hdmi_rotate=1

Add to end of /boot/cmdline.txt:

video=HDMI-A-1:320x1480M@60,rotate=90 plymouth=90

Expected fbset output:

mode "1480x320"

Example 2: Raspberry Pi 5 with 11.9 inch HDMI display (Scenario 1)

Complete /boot/userconfig.txt:

# Add your custom config.txt options to this file, which will be preserved during updates
max_framebuffer_height=1480
hdmi_group=2
hdmi_mode=87
hdmi_timings=320 0 80 16 32 1480 0 16 4 12 0 0 0 60 0 42000000 3

#### Touch Display rotation setting below: do not alter ####
display_lcd_rotate=1
display_hdmi_rotate=1

Add to end of /boot/cmdline.txt:

video=HDMI-A-1:320x1480M@60,rotate=90 plymouth=90

Expected fbset output:

mode "1480x320"

Example 3: Raspberry Pi 4B+ with 7.9 inch HDMI display (Scenario 1)

Complete /boot/userconfig.txt:

# Add your custom config.txt options to this file, which will be preserved during updates
[pi4]
dtoverlay=vc4-kms-v3d-pi4
hdmi_group=2
hdmi_mode=87
hdmi_timings=400 0 220 32 110 1280 0 10 10 10 0 0 0 60 0 59400000 3
[all]
#### Touch Display rotation setting below: do not alter ####
display_lcd_rotate=1
display_hdmi_rotate=1

Add to end of /boot/cmdline.txt:

video=HDMI-A-1:400x1280M@60,rotate=90 plymouth=90

Expected fbset output:

mode "1280x400"

Example 4: Raspberry Pi 5 with 7.9 inch HDMI display (Scenario 1)

Complete /boot/userconfig.txt:

# Add your custom config.txt options to this file, which will be preserved during updates
hdmi_group=2
hdmi_mode=87
hdmi_timings=400 0 220 32 110 1280 0 10 10 10 0 0 0 60 0 59400000 3

#### Touch Display rotation setting below: do not alter ####
display_lcd_rotate=1
display_hdmi_rotate=1

Add to end of /boot/cmdline.txt:

video=HDMI-A-1:400x1280M@60,rotate=90 plymouth=90

Expected fbset output:

mode "1280x400"

Physical orientation (90-degree rotation)

Raspberry Pi 4B+ and Pi 5 mounting (when viewing from screen side):

  • Bottom edge: USB-C power port, HDMI ports
  • Left edge: USB ports, Ethernet/LAN port
  • Top edge: GPIO header
  • Right edge: SD card slot (micro SD on Pi 4B+, full size SD on Pi 5)

Note: When mounting the Pi from behind (looking at the back of the display), left and right edges are reversed from this description.

Display orientation with 90-degree rotation:

  • Display top edge: Aligned with GPIO header (Pi top edge)
  • Display bottom edge: Aligned with USB-C/HDMI ports (Pi bottom edge)

Why 90 degrees (not 270): HDMI displays use different rotation conventions than DSI displays. A 90-degree rotation on HDMI achieves the same physical landscape orientation as 270-degree rotation on DSI.


Configuration scenarios overview

Scenario Audio output Additional HDMI port Use case
1 HDMI display audio N/A Display audio through built-in speakers
2 I2S DAC N/A High-quality audio via DAC, display on HDMI
3 HDMI port 1 audio Audio only Soundbar/AVR on second HDMI port
4 Dual HDMI Secondary display Display + secondary video output

Note: HDMI display scenarios differ from DSI scenarios because the display itself uses HDMI port 0 for video+audio. Additional audio configurations use HDMI port 1 or I2S DAC.


Common base configuration

Raspberry Pi 4B+

All scenarios share this base configuration in /boot/userconfig.txt:

[pi4]
dtoverlay=vc4-kms-v3d-pi4
<INSERT max_framebuffer_height IF 11.9 INCH>
hdmi_group=2
hdmi_mode=87
<INSERT DISPLAY-SPECIFIC hdmi_timings FROM TABLE>
[all]
#### Touch Display rotation setting below: do not alter ####
display_lcd_rotate=1
display_hdmi_rotate=1

Add scenario-specific parameters below this base.

Raspberry Pi 5

All scenarios use this simplified configuration in /boot/userconfig.txt:

<INSERT max_framebuffer_height IF 11.9 INCH>
hdmi_group=2
hdmi_mode=87
<INSERT DISPLAY-SPECIFIC hdmi_timings FROM TABLE>

#### Touch Display rotation setting below: do not alter ####
display_lcd_rotate=1
display_hdmi_rotate=1

Key differences for Pi 5:

  • No section markers ([pi4], [all]) needed
  • No vc4-kms-v3d overlay (handled automatically by volumioconfig.txt)

Add scenario-specific parameters below this base.

cmdline.txt configuration

For all scenarios on both Pi 4B+ and Pi 5:

Add the display-specific parameters from the table to the END of /boot/cmdline.txt:

<INSERT DISPLAY-SPECIFIC video= PARAMETER FROM TABLE> plymouth=90

Space-separate from previous parameters.

Example for 11.9 inch display:

... use_kmsg=no video=HDMI-A-1:320x1480M@60,rotate=90 plymouth=90

Example for 7.9 inch display:

... use_kmsg=no video=HDMI-A-1:400x1280M@60,rotate=90 plymouth=90

Scenario 1: HDMI display only

Purpose

Display on HDMI with audio through display’s built-in speakers (if available).

Configuration

Use the complete example configurations provided above (Examples 1-4) based on your Pi model and display size. No additional parameters needed.

Expected results

  • fbset shows display-specific resolution (see parameter table)
  • Display shows correctly rotated landscape video
  • Plymouth boot splash displays with correct rotation (via volumio-adaptive theme)
  • Console properly rotated to landscape
  • Audio output available through HDMI display (if speakers present)

Scenario 2: HDMI display + I2S DAC

Purpose

Video on HDMI display, high-quality audio through external I2S DAC.

Configuration

Use base configuration for your Pi model and display size from examples above.

DAC Configuration via Volumio UI:

Do NOT add DAC overlays to userconfig.txt. Configure your I2S DAC through Volumio’s web interface:

  1. Open Volumio web UI (http://volumio.local)
  2. Navigate to: Settings → Playback Options
  3. Under Output Device, select your I2S DAC from the dropdown
  4. Click Save
  5. Volumio will automatically add the correct DAC overlay to /boot/config.txt
  6. Reboot when prompted

Important: Volumio manages DAC configuration in /boot/config.txt (system file). User modifications should only go in /boot/userconfig.txt.

Expected results

  • Display shows correctly rotated landscape video
  • I2S DAC active for audio output (configured via Volumio UI)
  • Plymouth boot splash displays with correct rotation
  • Console properly rotated to landscape

Scenario 3: HDMI display + HDMI port 1 audio

Purpose

Video on primary HDMI display (port 0), audio extracted from second HDMI port (port 1) for soundbar/AVR.

Configuration

Raspberry Pi 4B+

/boot/userconfig.txt - Add to base configuration:

[pi4]
dtoverlay=vc4-kms-v3d-pi4
<INSERT max_framebuffer_height IF 11.9 INCH>
hdmi_group=2
hdmi_mode=87
<INSERT DISPLAY-SPECIFIC hdmi_timings FROM TABLE>
hdmi_force_hotplug:1=1
hdmi_drive:1=2
hdmi_ignore_edid:1=0xa5000080
[all]
#### Touch Display rotation setting below: do not alter ####
display_lcd_rotate=1
display_hdmi_rotate=1

Raspberry Pi 5

/boot/userconfig.txt - Add to base configuration:

<INSERT max_framebuffer_height IF 11.9 INCH>
hdmi_group=2
hdmi_mode=87
<INSERT DISPLAY-SPECIFIC hdmi_timings FROM TABLE>
hdmi_force_hotplug:1=1
hdmi_drive:1=2
hdmi_ignore_edid:1=0xa5000080

#### Touch Display rotation setting below: do not alter ####
display_lcd_rotate=1
display_hdmi_rotate=1

Both Pi 4B+ and Pi 5

/boot/cmdline.txt - Add to end:

<INSERT DISPLAY-SPECIFIC video= PARAMETER FROM TABLE> video=HDMI-A-2:d plymouth=90

Example for 11.9 inch display:

... use_kmsg=no video=HDMI-A-1:320x1480M@60,rotate=90 video=HDMI-A-2:d plymouth=90

Expected results

  • Display shows correctly rotated landscape video on HDMI port 0
  • HDMI-A-2 (port 1) video disabled but audio active
  • Plymouth displays with correct rotation
  • Audio available to soundbar/AVR connected to HDMI port 1

Scenario 4: HDMI display + secondary video output

Purpose

Primary display on HDMI port 0 (Waveshare display), secondary display on HDMI port 1.

Configuration

Raspberry Pi 4B+

/boot/userconfig.txt:

[pi4]
dtoverlay=vc4-kms-v3d-pi4
<INSERT max_framebuffer_height IF 11.9 INCH>
hdmi_group=2
hdmi_mode=87
<INSERT DISPLAY-SPECIFIC hdmi_timings FROM TABLE>
hdmi_force_hotplug:1=1
hdmi_drive:1=2
[all]
#### Touch Display rotation setting below: do not alter ####
display_lcd_rotate=1
display_hdmi_rotate=1

Raspberry Pi 5

/boot/userconfig.txt:

<INSERT max_framebuffer_height IF 11.9 INCH>
hdmi_group=2
hdmi_mode=87
<INSERT DISPLAY-SPECIFIC hdmi_timings FROM TABLE>
hdmi_force_hotplug:1=1
hdmi_drive:1=2

#### Touch Display rotation setting below: do not alter ####
display_lcd_rotate=1
display_hdmi_rotate=1

Both Pi 4B+ and Pi 5

/boot/cmdline.txt - Add to end:

<INSERT DISPLAY-SPECIFIC video= PARAMETER FROM TABLE> video=HDMI-A-2:1920x1080@60 plymouth=90

Adjust secondary display resolution as needed (example shows 1080p).

Expected results

  • Primary Waveshare display shows correctly rotated landscape video
  • Secondary HDMI display active with specified resolution
  • Plymouth displays on primary display with correct rotation
  • Volumio UI appears on primary display by default

Note: Without X11 (touch display plugin disabled), secondary display will show console output only. Enable touch display plugin for dual display support with Volumio UI.


Parameter reference

HDMI display parameters

Parameter Function
hdmi_group=2 Enables DMT (Display Monitor Timings) mode for custom resolutions
hdmi_mode=87 Activates custom HDMI timing mode
hdmi_timings=... Defines custom display timing parameters for portrait resolution
max_framebuffer_height=1480 Sets framebuffer height (required for 11.9 inch display)
display_lcd_rotate=1 Enables 90-degree rotation for LCD interface
display_hdmi_rotate=1 Enables 90-degree rotation for HDMI output
video=HDMI-A-1:<resolution>,rotate=90 Kernel-level framebuffer rotation for console
plymouth=90 Triggers volumio-adaptive theme to use 90-degree rotated images

Secondary HDMI audio parameters

Parameter Function
hdmi_force_hotplug:1=1 Keeps HDMI port 1 active
hdmi_drive:1=2 Forces HDMI audio mode (not DVI) on port 1
hdmi_ignore_edid:1=0xa5000080 Ignores display detection on port 1 (audio-only mode)
video=HDMI-A-2:d Kernel-level disable of HDMI-A-2 video output

Audio parameters

Parameter Function
dtoverlay=<dac-name> Loads specific I2S DAC driver overlay (via Volumio UI)

Verification commands

After rebooting with new configuration, verify setup with these commands:

Check framebuffer resolution

fbset

Expected output for 11.9 inch display:

mode "1480x320"
    geometry 1480 320 1480 320 16

Expected output for 7.9 inch display:

mode "1280x400"
    geometry 1280 400 1280 400 16

Check kernel command line

cat /proc/cmdline | grep video

Expected output for 11.9 inch (Scenario 1):

... video=HDMI-A-1:320x1480M@60,rotate=90 plymouth=90

Expected output for 7.9 inch (Scenario 3):

... video=HDMI-A-1:400x1280M@60,rotate=90 video=HDMI-A-2:d plymouth=90

Check HDMI configuration

vcgencmd get_config int | grep hdmi

Expected output (varies by scenario):

hdmi_group=2
hdmi_mode=87
display_hdmi_rotate=1
display_lcd_rotate=1

Check display devices

ls /sys/class/drm/

Expected output (single display):

card0  card0-HDMI-A-1  ...

Expected output (dual display):

card0  card0-HDMI-A-1  card0-HDMI-A-2  ...

Troubleshooting

Issue: Framebuffer shows wrong resolution

Symptoms:

fbset
mode "320x1480"  # Wrong - not rotated

Causes:

  1. Missing or incorrect hdmi_timings
  2. Missing display rotation parameters
  3. Incorrect video= parameter in cmdline.txt

Solution:

  1. Verify hdmi_timings matches your display size from parameter table
  2. Check display_lcd_rotate=1 and display_hdmi_rotate=1 are present
  3. Ensure correct video= parameter with rotate=90 is in cmdline.txt
  4. Verify 11.9 inch display has max_framebuffer_height=1480

Issue: Plymouth boot splash not rotated

Symptoms:

  • Boot splash appears in portrait orientation
  • Plymouth displays but sideways

Solution:

  • Ensure plymouth=90 parameter is in cmdline.txt
  • Verify volumio-adaptive Plymouth theme is installed
  • Check plymouth theme selection: plymouth-set-default-theme
  • Install volumio-adaptive theme if missing (see references section)

Issue: Console in portrait mode despite rotation

Symptoms:

  • Plymouth displays correctly rotated
  • Console text appears in portrait orientation
  • Login prompt sideways

Solution:

  • Add display-specific video=HDMI-A-1:... parameter with rotate=90 to cmdline.txt
  • Verify display_hdmi_rotate=1 is in userconfig.txt
  • Both parameters are required for complete rotation

Issue: 11.9 inch display shows corrupted framebuffer

Symptoms:

  • Screen shows partial or distorted image
  • Wrong geometry reported by fbset

Solution:

  • Add max_framebuffer_height=1480 to userconfig.txt
  • This parameter is REQUIRED for 11.9 inch display
  • 7.9 inch display does NOT need this parameter

Issue: Secondary HDMI audio not working (Scenario 3)

Symptoms:

  • No audio output from HDMI port 1
  • Volumio doesn’t list HDMI 1 as audio output option

Solution:

  1. Verify hdmi_drive:1=2 is set (forces audio mode)
  2. Check HDMI cable supports audio (not all do)
  3. Verify soundbar/AVR is set to correct HDMI input
  4. Check Volumio audio output settings in web interface
  5. Ensure video=HDMI-A-2:d is in cmdline.txt to disable video

Issue: Display not detected

Symptoms:

  • No output on HDMI display
  • System boots but display stays black

Solution:

  1. Verify HDMI cable is connected to port 0 (closest to USB-C power)
  2. Check hdmi_group and hdmi_mode are set correctly
  3. Verify hdmi_timings match your display size exactly
  4. Test with different HDMI cable
  5. Try removing custom timings temporarily to test basic HDMI output

Notes and best practices

Important warnings

  1. Never edit /boot/config.txt directly - Always use /boot/userconfig.txt for custom settings
  2. cmdline.txt is a single line - All parameters must be on one line, space-separated
  3. plymouth=90 parameter required - Without this, boot splash will not rotate correctly
  4. 11.9 inch needs max_framebuffer_height - This parameter is mandatory for 11.9 inch display
  5. Use correct hdmi_timings - Wrong timings will prevent display from working
  6. Primary display uses HDMI port 0 - Always connect Waveshare display to port closest to USB-C power
  7. Configure DACs via Volumio UI - Never manually add DAC overlays to userconfig.txt
  8. volumio-adaptive theme required - Standard Plymouth themes will not rotate correctly

File preservation

These files are preserved during Volumio updates:

  • /boot/userconfig.txt - User configuration for display and custom hardware (safe to edit)
  • /boot/cmdline.txt - Kernel parameters (safe to edit)

These files are managed by Volumio:

  • /boot/config.txt - System configuration managed by Volumio (do not edit directly)
  • /boot/volumioconfig.txt - Volumio base config (do not edit)

Important distinction:

  • /boot/config.txt - Volumio writes system settings here (DAC configuration, base hardware settings)
  • /boot/userconfig.txt - User adds custom settings here (display configuration, additional hardware)
  • Both files are processed together at boot
  • Settings in userconfig.txt supplement (not replace) config.txt

Configuration testing workflow

  1. Identify your display size (11.9 inch or 7.9 inch)
  2. Reference the parameter table for display-specific values
  3. Use complete example configurations as starting point
  4. Make changes to configuration files using correct parameters
  5. Verify syntax (no typos, proper spacing)
  6. Reboot system
  7. Run verification commands
  8. Check Plymouth during boot for correct rotation
  9. Verify console rotation
  10. Test audio output if configured
  11. Document working configuration

HDMI timings explained

The hdmi_timings parameter defines custom display timing in this format:

<h_active_pixels> <h_sync_polarity> <h_front_porch> <h_sync_pulse> <h_back_porch> 
<v_active_lines> <v_sync_polarity> <v_front_porch> <v_sync_pulse> <v_back_porch> 
<v_sync_offset_a> <v_sync_offset_b> <pixel_rep> <frame_rate> <interlaced> 
<pixel_freq> <aspect_ratio>

For 11.9 inch (320x1480):

320 0 80 16 32 1480 0 16 4 12 0 0 0 60 0 42000000 3

For 7.9 inch (400x1280):

400 0 220 32 110 1280 0 10 10 10 0 0 0 60 0 59400000 3

Do not modify these values unless you understand HDMI timing specifications.

Rotation angles reference

Rotation Native portrait Landscape result Use case
0 Portrait mode N/A - portrait Not recommended
90 Portrait → Landscape GPIO header at top This guide uses 90
180 Portrait upside down N/A - portrait Not recommended
270 Portrait → Landscape GPIO header at bottom Alternative orientation

This guide uses 90-degree rotation for landscape display with GPIO header at top, matching DSI guide physical orientation.

Why plymouth=90 parameter?

The plymouth=90 kernel parameter triggers the volumio-adaptive Plymouth theme’s pre-rotated image selection mechanism:

  1. Init script reads kernel command line during boot
  2. Detects plymouth=90 parameter
  3. Patches theme to use 90-degree pre-rotated image sequence
  4. Plymouth renders correctly rotated boot splash using pre-rotated images

Without this parameter, Plymouth will use the default (0-degree) image set and the display will appear sideways during boot.

Technical background: This approach was necessary because portrait-native displays expose a Linux kernel limitation where rotation parameters produce inconsistent results. The volumio-adaptive theme bypasses runtime rotation entirely by using pre-rotated image sets, solving both the kernel’s broken rotation logic and Plymouth’s text rotation clipping issues on portrait displays. See Plymouth theme requirement section above for detailed explanation.

Difference from DSI displays

Aspect HDMI displays (this guide) DSI displays
Connection HDMI port 0 DSI ribbon cable
Rotation angle 90 degrees 270 degrees
Custom timings hdmi_timings required dtoverlay handles timing
Display detection Automatic via EDID Driver-based
Physical result Same landscape orientation Same landscape orientation

Both achieve the same physical mounting orientation but use different rotation values due to hardware differences.


References

Kind Regards,

4 Likes

Hi @nerd . I’m a simple newbye. My configuration is Rpi5 with waveshare 11.9" Hdmi lcd display.
My volumio release is 4.073. Touch display 3.6.0. The waveshare is connected by HDMI port 0 (near to USB-C power) to Rpi5 then Rpi5 is connected by USB to my Amplifyer (i don’t use the Waveshare display audio).
I followed all your suggestion to solve the 90° orientation of Volumio boot logo, but nothing changed,
In fact, with your changes to the cmdline.txt and userconfig.txt files, the Volumio boot logo now appears in landscape mode instead of portrait mode but…upside down…! And I can’t get it to reposition itself correctly.
I tried changing the angle values ​​in cmdline, both in “rotate=” and “plymouth=” (0, 90, 180, 270, 360° ), but nothing, I can’t straighten the logo.
What am I doing wrong @nerd?
I’m attaching the modified cmdline.txt and userconfig.txt files.
Greetings, Guru!
cmdline.txt (579 Bytes)
userconfig.txt (491 Bytes)

1 Like

Hey @Roberto_Grieco,

Your configuration files do not match my guide. Here are two options - try Option A first, and if the display is still upside down, use Option B instead.

OPTION A - Standard orientation:

Replace your /boot/userconfig.txt entirely with:

# Add your custom config.txt options to this file, which will be preserved during updates
max_framebuffer_height=1480
hdmi_group=2
hdmi_mode=87
hdmi_timings=320 0 80 16 32 1480 0 16 4 12 0 0 0 60 0 42000000 3

#### Touch Display rotation setting below: do not alter ####
display_lcd_rotate=1
display_hdmi_rotate=1

Add to end of /boot/cmdline.txt (space-separated from existing content):

video=HDMI-A-1:320x1480M@60,rotate=90 plymouth=90

OPTION B - If Option A shows upside down:

Same userconfig.txt but change the last two lines to:

display_lcd_rotate=3
display_hdmi_rotate=3

And cmdline.txt ending becomes:

video=HDMI-A-1:320x1480M@60,rotate=270 plymouth=270

Reboot after each change and report the result.

Kind Regards,

2 Likes

Thank you @nerd, option A solved all problem. Now it’s all ok.

1 Like

I just got a raspberry pi 4 model b for christmas along with the waveshare 11.9. i have been following this post - [GUIDE] Waveshare 11.9"/7.9" HDMI LCD Display Configuration for Volumio 4

All i have been getting on the display is just a black screen.

Here is my userconfig.txt
GNU nano 7.2 userconfig.txt

Add your custom config.txt options to this file, which will be preserve>

dtoverlay=vc4-kms-v3d-pi4
max_framebuffer_height=1480
hdmi_group=2
hdmi_mode=87
hdmi_timings=320 0 80 16 32 1480 0 16 4 12 0 0 0 60 0 42000000 3

Touch Display rotation setting below: do not alter

display_lcd_rotate=1
display_hdmi_rotate=1

My cmdline.txt (at the end of the line)
use_kmsg=no video=HDMI-A-1:320x1480M@60,rotate=90 plymouth=90

My config.txt

DO NOT EDIT THIS FILE

APPLY CUSTOM PARAMETERS TO userconfig.txt

initramfs volumio.initrd
gpu_mem=128
gpu_mem_256=32
gpu_mem_512=32
gpu_mem_1024=128
max_usb_current=1
[pi5]
usb_max_current_enable=1
[all]
include volumioconfig.txt
include userconfig.txt

When I run the following commands, here are the outputs…

volumio@volumio:/boot$ fbset

mode “320x1480”
geometry 320 1480 320 1480 16
timings 0 0 0 0 0 0 0
rgba 5/11,6/5,5/0,0/0
endmode

volumio@volumio:/boot$ cat /proc/cmdline | grep video
coherent_pool=1M 8250.nr_uarts=0 snd_bcm2835.enable_headphones=0 cgroup_disable=memory numa_policy=interleave nvme.max_host_mem_size_mb=0 snd_bcm2835.enable_headphones=1 snd_bcm2835.enable_hdmi=1 snd_bcm2835.enable_hdmi=0 video=HDMI-A-1:320x1480M@60D numa=fake=2 system_heap.max_order=0 smsc95xx.macaddr=88:A2:9E:35:2E:C3 vc_mem.mem_base=0x3ec00000 vc_mem.mem_size=0x40000000 splash plymouth.ignore-serial-consoles dwc_otg.fiq_enable=1 dwc_otg.fiq_fsm_enable=1 dwc_otg.fiq_fsm_mask=0xF dwc_otg.nak_holdoff=1 quiet console=ttyS0,115200 console=tty1 imgpart=UUID=dafa3844-b779-48cd-9b4c-01ecfd09e0f4 imgfile=/volumio_current.sqsh bootpart=UUID=3B89-0B23 datapart=UUID=752d19ad-b702-471d-847a-f79ae83515d0 uuidconfig=cmdline.txt pcie_aspm=off pci=pcie_bus_safe rootwait bootdelay=7 logo.nologo vt.global_cursor_default=0 net.ifnames=0 snd-bcm2835.enable_compat_alsa= snd_bcm2835.enable_hdmi=1 snd_bcm2835.enable_headphones=1 loglevel=0 nodebug use_kmsg=no video=HDMI-A-1:320x1480M@60,rotate=90 plymouth=90

volumio@volumio:/boot$ vcgencmd get_config int | grep hdmi
config_hdmi_boost=5
display_hdmi_rotate=1
hdmi_force_cec_address:0=65535
hdmi_force_cec_address:1=65535
hdmi_force_hotplug:0=1
hdmi_group:0=2
hdmi_mode:0=87
hdmi_pixel_freq_limit:0=0x11e1a300
hdmi_pixel_freq_limit:1=0x11e1a300
volumio@volumio:/boot$ ls /sys/class/drm/
card0 card1-HDMI-A-1 card1-Writeback-1 version
card1 card1-HDMI-A-2 renderD128

i know that the output of fbset is incorrect, it should be outputting like "mode “1480x320"” but no matter what i try, I cannot get it to rotate.

When i reboot the pi, I don’t see any change on the screen it is back lit but black the whole time.

A this time, this is all I have connected to the pi, I have not connected the DAC yet. this is a base install that has only been connected to wifi and have ssh enabled via the /dev option. This is the downloaded img file from the volumio website I used.

Thanks in advance!

Hey @Jay_Calvert,

Your black screen issue has a specific cause visible in your /proc/cmdline output:

video=HDMI-A-1:320x1480M@60D

The ‘D’ suffix means DISABLED. The Raspberry Pi firmware is auto-generating this parameter and marking your display as disabled before your own video= parameter is even processed. Your parameter comes later in the line but the first one already disabled the output.

To investigate properly, I need the following via SSH:

  1. Exact Volumio version:
cat /etc/os-release | grep VOLUMIO
  1. Raw cmdline.txt content (not /proc/cmdline):
cat /boot/cmdline.txt
  1. Confirm your userconfig.txt:
cat /boot/userconfig.txt
  1. Log link from http://volumio.local/dev

When posting command output, please wrap it in triple backticks so the forum preserves formatting:

```
your command output here
```

This prevents the forum from stripping line breaks and lets me see exactly what you have.

Kind Regards,

I got it working, I didnt realize I had to install the touch screen plug in as well, once I installed that and then configured the rotation I was able to see the volumio interface on the screen. The problem I am having now is that the screen goes to sleep and won’t wake up on touch. still working on that one.
Thanks for your reply, much appreciate

@Jay_Calvert

the first set of options in Touch Display sets the timeout. click on the circle on the right with the exclamation mark to help orient yourself. this is what I set mine at.

1 Like

Thanks to @nerd for this post. The most complete I found so far.
But even with this I still having trouble to get my waveshare 11.9 to work. I had it working with a pi4 for almost 3 years now, but so far no luck with a pi5. The pi4 was Volumio 3, the pi5 I updated to Volumio 4.084.
The backlight is on, but the screen keeps blank.

Below are my configs.
cmdline.txt

splash plymouth.ignore-serial-consoles dwc_otg.fiq_enable=1 dwc_otg.fiq_fsm_enable=1 dwc_otg.fiq_fsm_mask=0xF dwc_otg.nak_holdoff=1 quiet console=serial0,115200 console=tty1 imgpart=UUID=b0b466fc-4556-43af-9f97-ebe56fe4abe4 imgfile=/volumio_current.sqsh bootpart=UUID=0428-C7E4 datapart=UUID=82051e0e-a859-4f54-aa9f-0cc23a932af8 uuidconfig=cmdline.txt rootwait bootdelay=7 logo.nologo vt.global_cursor_default=0 net.ifnames=0 snd_bcm2835.enable_hdmi=1 snd_bcm2835.enable_headphones=1 loglevel=0 nodebug use_kmsg=no cfg80211.ieee80211_regdom=DE video=HDMI-A-1:320x1480M@60,rotate=90 plymouth=90

userconfig

# Add your custom config.txt options to this file, which will be preserved during updates
max_framebuffer_height=1480
hdmi_group=2
hdmi_mode=87
hdmi_timings=320 0 80 16 32 1480 0 16 4 12 0 0 0 60 0 42000000 3

#### Touch Display rotation setting below: do not alter ####
display_lcd_rotate=1
display_hdmi_rotate=1

volumioconfig.txt

### DO NOT EDIT THIS FILE ###
### APPLY CUSTOM PARAMETERS TO userconfig.txt ###
[cm4]
dtoverlay=dwc2,dr_mode=host
otg_mode=1
[pi5]
dtoverlay=vc4-kms-v3d-pi5
# dtparam=uart0_console # Disabled by default
dtparam=nvme
dtparam=pciex1_gen=2
[all]
arm_64bit=0
dtparam=audio=on
audio_pwm_mode=2
dtparam=i2c_arm=on
disable_splash=1
hdmi_force_hotplug=1
force_eeprom_read=0
display_auto_detect=1

When I run the fbset command it look like the rotation is wrong. But I don’t see the reason.

volumio@vol-pi5:~$ fbset

mode "320x1480"
    geometry 320 1480 320 1480 16
    timings 0 0 0 0 0 0 0
    rgba 5/11,6/5,5/0,0/0
endmode

I purchased the display in Feb. 2023. Don’t know if the HDMI timings may changed in between.
Also don’t know how to debug.

So, if anyone has some hint’s, please respond.
Thanks.

Hey @vol-pi5,

Your userconfig.txt matches my guide for Pi 5 + 11.9" display exactly, and the cmdline.txt parameters are correct. However, there is one problem and several diagnostic questions before I can investigate further.

Problem: Pi Imager customisation was applied during flashing

Your cmdline.txt contains this parameter:

cfg80211.ieee80211_regdom=DE

This is not part of the Volumio image. It is injected by Raspberry Pi Imager when the OS Customisation dialog is used during flashing. The Volumio flashing guide explicitly states: do not apply any customisations or modifications when writing the image.

Reference: [Beginner's Guide]: Flashing Volumio OS to a microSD Card

The customiser may have altered system files beyond cmdline.txt that are not visible from the boot partition. This could be contributing to your blank screen, but I need diagnostic data to confirm.

Diagnostic information nedded:

  1. Kernel command line as seen by the system (this is the most important item - it shows firmware-injected parameters not visible in /boot/cmdline.txt):
cat /proc/cmdline
  1. DRM display connector state:
ls -la /sys/class/drm/
cat /sys/class/drm/card*-HDMI-A-*/status
  1. Which HDMI port is the display connected to? Port 0 is the one nearest to the USB-C power connector. Port 1 is the other one. The guide requires port 0.

  2. Is the Touch Display plugin installed? If yes, what is its status - enabled, active, or failed? The Touch Display plugin is required for the Volumio UI to appear on the local display. Without it, only console output is rendered.

  3. Log link from http://vol-pi5.local/dev

A previous user in this thread (@Jay_Calvert, post #5) had the identical fbset symptom - 320x1480 instead of 1480x320, black screen with backlight on. In that case, /proc/cmdline revealed the firmware had injected a conflicting video= parameter that disabled the display output before the user’s own parameter was processed. The /proc/cmdline output will confirm whether the same thing is happening here.

Kind Regards,

Hey @nerd ,
thanks for your quick reply.

Regarding the additional cmdline.txt parameter. This is very likely not added by the Imager. I flashed the image dowloaded from the homepage and I was not prompted to enter any data.
However, I run the raspi-config to set the region to Germany to get the Wifi to work as my router is using channel 13. This was done at a very late stage of all my tries. All my first tries were done without this parameter.

The diagnostic information:
1.

volumio@vol-pi5:~$ cat /proc/cmdline
reboot=w coherent_pool=1M 8250.nr_uarts=1 pci=pcie_bus_safe cgroup_disable=memory numa_policy=interleave nvme.max_host_mem_size_mb=0  numa=fake=8 system_heap.max_order=0 iommu_dma_numa_policy=interleave smsc95xx.macaddr=2C:CF:67:97:2A:E6 vc_mem.mem_base=0x3fc00000 vc_mem.mem_size=0x40000000  splash plymouth.ignore-serial-consoles dwc_otg.fiq_enable=1 dwc_otg.fiq_fsm_enable=1 dwc_otg.fiq_fsm_mask=0xF dwc_otg.nak_holdoff=1 quiet console=ttyAMA10,115200 console=tty1 imgpart=UUID=b0b466fc-4556-43af-9f97-ebe56fe4abe4 imgfile=/volumio_current.sqsh bootpart=UUID=0428-C7E4 datapart=UUID=82051e0e-a859-4f54-aa9f-0cc23a932af8 uuidconfig=cmdline.txt rootwait bootdelay=7 logo.nologo vt.global_cursor_default=0 net.ifnames=0 snd_bcm2835.enable_hdmi=1 snd_bcm2835.enable_headphones=1 loglevel=0 nodebug use_kmsg=no cfg80211.ieee80211_regdom=DE video=HDMI-A-1:320x1480M@60,rotate=90 plymouth=90
volumio@vol-pi5:~$ ls -la /sys/class/drm/
total 0
drwxr-xr-x  2 root root    0 Jan  1  1970 .
drwxr-xr-x 71 root root    0 Jan  1  1970 ..
lrwxrwxrwx  1 root root    0 Jan  1  1970 card0 -> ../../devices/platform/axi/1002000000.v3d/drm/card0
lrwxrwxrwx  1 root root    0 Jan  1  1970 card1 -> ../../devices/platform/axi/axi:gpu/drm/card1
lrwxrwxrwx  1 root root    0 Jan  1  1970 card1-HDMI-A-1 -> ../../devices/platform/axi/axi:gpu/drm/card1/card1-HDMI-A-1
lrwxrwxrwx  1 root root    0 Jan  1  1970 card1-HDMI-A-2 -> ../../devices/platform/axi/axi:gpu/drm/card1/card1-HDMI-A-2
lrwxrwxrwx  1 root root    0 Jan  1  1970 card1-Writeback-1 -> ../../devices/platform/axi/axi:gpu/drm/card1/card1-Writeback-1
lrwxrwxrwx  1 root root    0 Jan  1  1970 card1-Writeback-2 -> ../../devices/platform/axi/axi:gpu/drm/card1/card1-Writeback-2
lrwxrwxrwx  1 root root    0 Jan  1  1970 renderD128 -> ../../devices/platform/axi/1002000000.v3d/drm/renderD128
-r--r--r--  1 root root 4096 Feb  9 20:18 version
volumio@vol-pi5:~$ cat /sys/class/drm/card*-HDMI-A-*/status
disconnected
disconnected

I had connected sometimes as well. But /enabled returned disabled in all cases.

This is the output of modes

volumio@vol-pi5:~$ cat /sys/class/drm/card*-HDMI-A-*/modes
1024x768
800x600
800x600
320x1480
848x480
640x480

It’s connected to Port 0 next to the USB-C power connector.

The plugin is installed. According to the UI it’s active.

Starting Live Log...
vc4-drm axi:gpu: [drm] User-defined mode not supported: "320x1480": 60 39753 320 344 376 432 1480 1483 1493 1534 0x20 0x6
EDID block 0 (tag 0x00) checksum is invalid, remainder is 89
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
vc4-drm axi:gpu: [drm] User-defined mode not supported: "320x1480": 60 39753 320 344 376 432 1480 1483 1493 1534 0x20 0x6
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
info: CALLMETHOD: system_controller system enableLiveLog true
info: CoreCommandRouter::executeOnPlugin: system , enableLiveLog
info: Launching a new LiveLog session
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
vc4-drm axi:gpu: [drm] User-defined mode not supported: "320x1480": 60 39753 320 344 376 432 1480 1483 1493 1534 0x20 0x6
vc4-drm axi:gpu: [drm] User-defined mode not supported: "320x1480": 60 39753 320 344 376 432 1480 1483 1493 1534 0x20 0x6
EDID block 0 (tag 0x00) checksum is invalid, remainder is 158
EDID block 0 (tag 0x00) checksum is invalid, remainder is 134
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
EDID block 0 (tag 0x00) checksum is invalid, remainder is 166
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
vc4-drm axi:gpu: [drm] User-defined mode not supported: "320x1480": 60 39753 320 344 376 432 1480 1483 1493 1534 0x20 0x6
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
EDID block 0 (tag 0x00) checksum is invalid, remainder is 150
EDID block 0 (tag 0x00) checksum is invalid, remainder is 150
vc4-drm axi:gpu: [drm] User-defined mode not supported: "320x1480": 60 39753 320 344 376 432 1480 1483 1493 1534 0x20 0x6
EDID block 0 (tag 0x00) checksum is invalid, remainder is 158
EDID block 0 (tag 0x00) checksum is invalid, remainder is 158
EDID block 0 (tag 0x00) checksum is invalid, remainder is 160
EDID block 0 (tag 0x00) checksum is invalid, remainder is 114
EDID block 0 (tag 0x00) checksum is invalid, remainder is 160
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
vc4-drm axi:gpu: [drm] User-defined mode not supported: "320x1480": 60 39753 320 344 376 432 1480 1483 1493 1534 0x20 0x6
EDID block 0 (tag 0x00) checksum is invalid, remainder is 199
EDID block 0 (tag 0x00) checksum is invalid, remainder is 125
EDID block 0 (tag 0x00) checksum is invalid, remainder is 166
vc4-drm axi:gpu: [drm] User-defined mode not supported: "320x1480": 60 39753 320 344 376 432 1480 1483 1493 1534 0x20 0x6
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
vc4-drm axi:gpu: [drm] User-defined mode not supported: "320x1480": 60 39753 320 344 376 432 1480 1483 1493 1534 0x20 0x6
EDID has corrupt header
EDID block 0 (tag 0x00) checksum is invalid, remainder is 160
vc4-drm axi:gpu: [drm] User-defined mode not supported: "320x1480": 60 39753 320 344 376 432 1480 1483 1493 1534 0x20 0x6
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
EDID block 0 (tag 0x00) checksum is invalid, remainder is 166
EDID has corrupt header
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
EDID block 0 (tag 0x00) checksum is invalid, remainder is 158
EDID block 0 (tag 0x00) checksum is invalid, remainder is 86
EDID block 0 (tag 0x00) checksum is invalid, remainder is 150
EDID block 0 (tag 0x00) checksum is invalid, remainder is 125
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
vc4-drm axi:gpu: [drm] User-defined mode not supported: "320x1480": 60 39753 320 344 376 432 1480 1483 1493 1534 0x20 0x6
vc4-drm axi:gpu: [drm] User-defined mode not supported: "320x1480": 60 39753 320 344 376 432 1480 1483 1493 1534 0x20 0x6
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
EDID block 0 (tag 0x00) checksum is invalid, remainder is 180
EDID block 0 (tag 0x00) checksum is invalid, remainder is 150
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
vc4-drm axi:gpu: [drm] User-defined mode not supported: "320x1480": 60 39753 320 344 376 432 1480 1483 1493 1534 0x20 0x6
EDID block 0 (tag 0x00) checksum is invalid, remainder is 161
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
EDID block 0 (tag 0x00) checksum is invalid, remainder is 160
EDID block 0 (tag 0x00) checksum is invalid, remainder is 158
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
EDID block 0 (tag 0x00) checksum is invalid, remainder is 158
vc4-drm axi:gpu: [drm] User-defined mode not supported: "320x1480": 60 39753 320 344 376 432 1480 1483 1493 1534 0x20 0x6
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
EDID block 0 (tag 0x00) checksum is invalid, remainder is 150
vc4-drm axi:gpu: [drm] User-defined mode not supported: "320x1480": 60 39753 320 344 376 432 1480 1483 1493 1534 0x20 0x6
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
vc4-drm axi:gpu: [drm] User-defined mode not supported: "320x1480": 60 39753 320 344 376 432 1480 1483 1493 1534 0x20 0x6
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
vc4-drm axi:gpu: [drm] User-defined mode not supported: "320x1480": 60 39753 320 344 376 432 1480 1483 1493 1534 0x20 0x6
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
vc4-drm axi:gpu: [drm] User-defined mode not supported: "320x1480": 60 39753 320 344 376 432 1480 1483 1493 1534 0x20 0x6
EDID block 0 (tag 0x00) checksum is invalid, remainder is 160
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
EDID block 0 (tag 0x00) checksum is invalid, remainder is 158
vc4-drm axi:gpu: [drm] User-defined mode not supported: "320x1480": 60 39753 320 344 376 432 1480 1483 1493 1534 0x20 0x6
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
EDID has corrupt header
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
EDID has corrupt header
vc4-drm axi:gpu: [drm] User-defined mode not supported: "320x1480": 60 39753 320 344 376 432 1480 1483 1493 1534 0x20 0x6
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
EDID block 0 (tag 0x00) checksum is invalid, remainder is 134
EDID block 0 (tag 0x00) checksum is invalid, remainder is 160

Kind regards.

Hi! @nerd

Sorry for hi-jacking your thread but would it be possible to ask for your help?

I have been trouble shooting my set up with 7.9in waveshare.

Followed everything.

userconfig:

# Add your custom config.txt options to this file, which will be preserved duri>
[pi4]
dtoverlay=vc4-kms-v3d-pi4
hdmi_group=2
hdmi_mode=87
hdmi_timings=400 0 220 32 110 1280 0 10 10 10 0 0 0 60 0 59400000 3
[all]
#### Touch Display rotation setting below: do not alter ####
display_lcd_rotate=1
display_hdmi_rotate=1

cmdline

splash plymouth.ignore-serial-consoles dwc_otg.fiq_enable=1 dwc_otg.fiq_fsm_enable=1 dwc_otg.fiq_fsm_mask=0xF dwc_otg.nak_holdoff=1 quiet console=serial0,115200 console=tty1 imgpart=UUID=cafa11af-4043-4b82-b2f1-cf9789a0d0ff imgfile=/volumio_current.sqsh bootpart=UUID=EFEC-2342 datapart=UUID=28f68aa4-9a7f-4eac-941d-123ffabe2863 uuidconfig=cmdline.txt rootwait bootdelay=7 logo.nologo vt.global_cursor_default=0 net.ifnames=0 snd_bcm2835.enable_hdmi=1 snd_bcm2835.enable_headphones=1 loglevel=0 nodebug use_kmsg=no video=HDMI-A-1:400x1280M@60,rotate=90 plymouth=90

Trouble shooting so far:

Used different RPi boards, 3B+, 4B+
Used different MicroSD cards
Used multiple laptops and PCs for etching
Used different power bricks
Used different cables
Returned the 7.9in thinking it was defective and got new 7.9in screen
Used HDMI hotplug
Installed and uninstalled the plugin multiple times.

I can have the volumio logo boot up screen perfectly working but after bootup, the UI shows for a few seconds, I can actually use touch but then turns off and the blinking green light at the back of the screen turns on(which means there is no HDMI signal coming from the RPi)

I hope I can get this working. I don’t like moOde’s way with the libraries sadly.

Thanks!

Hey @matmatth95,

No problem on the thread - this is the right place for it.

Your userconfig.txt and cmdline.txt match my guide for the Pi 4B+ plus 7.9 inch display. The configuration itself is correct, so the problem is not a missing parameter. What you are describing - boot logo fine, UI shows and touch works for a few seconds, then the panel loses HDMI signal (blinking green) - is different from the blank-screen cases earlier in this thread. Yours initialises and then drops. That points somewhere specific, but I cannot confirm where without data from the running system.

Before anything else, three questions to isolate which stage fails:

  1. The Volumio boot logo (Plymouth splash) - does it display correctly the whole way through boot, or only briefly?
  2. After the UI disappears, if you SSH in and the screen is black, is there any console text on it at any point, or is it black with backlight on?
  3. The few seconds of working UI - is that the full Volumio interface (Touch Display plugin kiosk), or the text console?

Then, from SSH, I need the following. Do not reboot before collecting these - some of it is lost on reboot.

  1. Exact Volumio version:

    cat /etc/os-release | grep VOLUMIO
    
  2. Kernel command line as the system actually sees it. This is the most important item. It shows parameters the firmware injects that are not present in /boot/cmdline.txt:

    cat /proc/cmdline
    
  3. Display connector status - run this several times, a few seconds apart, including right after the UI drops:

    cat /sys/class/drm/card*-HDMI-A-*/status
    
  4. Raw boot files (not /proc):

    cat /boot/cmdline.txt
    
    cat /boot/userconfig.txt
    
  5. Log link from http://volumio.local/dev (or http://<your_IP>/dev). Submit it there and paste the URL it gives you here.

One clarification on your testing. Your userconfig.txt uses a [pi4] section for the overlay and timings. That block only applies on a Pi 4. On the 3B+ you also tried, those lines are skipped entirely, so that board was running an unconfigured display - a different situation, not a second data point for the same setup. For this investigation, confirm which board the configuration above is currently running on so we are looking at one system at a time.

Once I have the /proc/cmdline output and the log, I can tell you whether this is a firmware-level signal drop or something in the display pipeline after handoff. I am not going to guess ahead of that data.

Kind Regards,

Hi @nerd

Really really appreciate you taking your time with me.

  1. The Volumio Boot Logo shows correctly for like a minute (I think it’s correct and finishes boot)
  2. When I SSH back into it without the screen, the screen does nothing, just green light blinking.
  3. The whole Volumio interface shows. Not sure if I can upload a video here. I can upload the whole boot sequence if that would help.

I’m currently using a fresh install and installing the plugin now. What step would you prefer me to do?

After installing, I’ll configure the userconfig and cmdline then power off shutdown from the interface. After booting again, I would run the commands and get the outputs. Would that be okay?

I’m running on a 4 right now since people say the 1GB 3B+ causes the error because of lack of memory, hence buying the 4. Sadly, it had the same issue.

Hey @matmatth95,

Thank you for the provided info. It is helpful, however:
I can only work from the diagnostics I asked for. I do not have them yet.

Items I requested details for are not optional. Until I see those, there is nothing for me to investigate and nothing useful I can tell you.

Collect them before you power off - that data is held in RAM and is erased on shutdown. Paste requested output and the log URL here, each wrapped in triple backticks.

Provide those and we continue. Without them, I cannot help further. Good luck.

Kind Regards,

Hi @nerd

Here’s the outputs you asked.

From fresh install, set up, installation of touch display, configure cmdline and userconfig files, no boot in between.

 Free Audiophile Linux Music Player - Version 4.119

          © 2015-2026 Michelangelo Guarise - Volumio Team - Volumio.org

Volumio Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Welcome to Volumio for Raspberry Pi (6.12.74-v7l+ armv7l)
volumio@matty-streamer-rpi-4:~$ nano /boot/userconfig.txt
volumio@matty-streamer-rpi-4:~$ nano /boot/cmdline.txt
volumio@matty-streamer-rpi-4:~$ cat /etc/os-release | grep VOLUMIO
VOLUMIO_BUILD_VERSION="18952480e8d8c63f22208e9007a0f47a9563eae6"
VOLUMIO_FE_VERSION="35f8f4439f0076a62fefa72fd80b70701b3d6cbd"
VOLUMIO_FE3_VERSION="bcca17b6b6b26edfb999e6fd7da1b222a88a61d2"
VOLUMIO_BE_VERSION="0e58f1861fa88e02087981b8d91f7511f0e7011b"
VOLUMIO_ARCH="arm"
VOLUMIO_VARIANT="volumio"
VOLUMIO_TEST="FALSE"
VOLUMIO_BUILD_DATE="Tue Mar 24 17:20:52 UTC 2026"
VOLUMIO_VERSION="4.119"
VOLUMIO_HARDWARE="pi"
VOLUMIO_DEVICENAME="Raspberry Pi"
VOLUMIO_HASH="d0c2fd9dbc5e70e58c32413c12353563"
volumio@matty-streamer-rpi-4:~$

volumio@matty-streamer-rpi-4:~$ cat /proc/cmdline
coherent_pool=1M 8250.nr_uarts=0 snd_bcm2835.enable_headphones=0 cgroup_disable=memory numa_policy=interleave nvme.max_host_mem_size_mb=0 snd_bcm2835.enable_hdmi=0 video=HDMI-A-1:1280x720M@100D,margin_left=48,margin_right=48,margin_top=48,margin_bottom=48 numa=fake=2 system_heap.max_order=0 iommu_dma_numa_policy=interleave smsc95xx.macaddr=E4:5F:01:84:6C:AA vc_mem.mem_base=0x3ec00000 vc_mem.mem_size=0x40000000  splash plymouth.ignore-serial-consoles dwc_otg.fiq_enable=1 dwc_otg.fiq_fsm_enable=1 dwc_otg.fiq_fsm_mask=0xF dwc_otg.nak_holdoff=1 quiet console=ttyS0,115200 console=tty1 imgpart=UUID=9caf6474-168f-4972-add4-ace36a467bc2 imgfile=/volumio_current.sqsh bootpart=UUID=807D-2966 datapart=UUID=bea3e05c-62cf-4b22-a58d-66213927f56a uuidconfig=cmdline.txt rootwait bootdelay=7 logo.nologo vt.global_cursor_default=0 net.ifnames=0 snd_bcm2835.enable_hdmi=1 snd_bcm2835.enable_headphones=1 loglevel=0 nodebug use_kmsg=no

connected
disconnected
splash plymouth.ignore-serial-consoles dwc_otg.fiq_enable=1 dwc_otg.fiq_fsm_enable=1 dwc_otg.fiq_fsm_mask=0xF dwc_otg.nak_holdoff=1 quiet console=serial0,115200 console=tty1 imgpart=UUID=9caf6474-168f-4972-add4-ace36a467bc2 imgfile=/volumio_current.sqsh bootpart=UUID=807D-2966 datapart=UUID=bea3e05c-62cf-4b22-a58d-66213927f56a uuidconfig=cmdline.txt rootwait bootdelay=7 logo.nologo vt.global_cursor_default=0 net.ifnames=0 snd_bcm2835.enable_hdmi=1 snd_bcm2835.enable_headphones=1 loglevel=0 nodebug use_kmsg=no video=HDMI-A-1:400x1280M@60,rotate=90 plymouth=90

# Add your custom config.txt options to this file, which will be preserved during updates
[pi4]
dtoverlay=vc4-kms-v3d-pi4
hdmi_group=2
hdmi_mode=87
hdmi_timings=400 0 220 32 110 1280 0 10 10 10 0 0 0 60 0 59400000 3
[all]
#### Touch Display rotation setting below: do not alter ####
display_lcd_rotate=1
display_hdmi_rotate=1

http://logs.volumio.org/volumio/Niq4PDU.html

May I also add a behavior I noticed earlier. When trying a fresh install(not the one posted above), after finishing the installation of touch display and cmd/userconfig files, the screen was on and showing the volumio UI albeit with the wrong screen ratio but once powered down and booted again, the same problem happened.

Boot/Splash screen for a minute, UI loads then screen turns off.

Let me know if you also need the outputs when rebooted. :slight_smile:

Hey @matmatth95,

Thank you for the full outputs. They give a clear answer, and your configuration is not at fault.

Your /proc/cmdline contains this, which you did not put there:

video=HDMI-A-1:1280x720M@100D

That line is injected by the Raspberry Pi firmware, and it sits ahead of your own video=HDMI-A-1:400x1280M@60,rotate=90. The D on the end marks that output disabled, and the kernel log also shows [drm] forcing HDMI-A-1 connector on. The parameter that forces the firmware to commit a mode on that connector, even without a clean read from the panel, is hdmi_force_hotplug. The Volumio base configuration sets it to 1 for all Pi boards. We are going to override it to 0 on your system and see whether that injected line goes away.

One change only:

  1. Edit /boot/userconfig.txt. Under the [all] line, add hdmi_force_hotplug=0 so the file reads:

    # Add your custom config.txt options to this file, which will be preserved during updates
    [pi4]
    dtoverlay=vc4-kms-v3d-pi4
    hdmi_group=2
    hdmi_mode=87
    hdmi_timings=400 0 220 32 110 1280 0 10 10 10 0 0 0 60 0 59400000 3
    [all]
    hdmi_force_hotplug=0
    #### Touch Display rotation setting below: do not alter ####
    display_lcd_rotate=1
    display_hdmi_rotate=1
    
  2. Leave /boot/cmdline.txt exactly as it is. Do not move the HDMI cable - keep it on the port you are using now.

  3. Boot, and let it run past the point where the screen dropped before.

  4. While it is still running, SSH in and send me these two, each wrapped in triple backticks:

    cat /proc/cmdline
    
    cat /sys/class/drm/card*-HDMI-A-*/status
    

What I am checking is whether video=HDMI-A-1:...D is still being injected once hdmi_force_hotplug=0 is set. If it is gone, that identifies what was disabling your output. This is a test to confirm the cause, not a guaranteed fix. Send me the two outputs and that tells us where we stand.

Kind Regards,

Hi @nerd

May I clarify something?

after adding hotplug on number 1.; by boot, you mean power off and power on again, right? Sorry, I’m not really sure about the terms accurately and I don’t want to mess a step.

Hey @matmatth95,

Good question to ask, and you are right to check rather than guess.

Yes - by boot I mean a full power cycle. Shut the system down, remove power, then apply power again. Not a reboot from the interface. The reason matters for this test: the firmware reads config.txt and decides whether to inject that video= line at power-on. A cold power cycle is the condition that actually exercises the parameter we are changing, so it has to be a full power-off and power-on.

There is one more thing to account for, and it comes from what you reported earlier. You said that on the first boot after configuring, the display came up (wrong ratio), and only after a power cycle did the drop start. That tells me your hardware can behave differently on the first cold start than on later ones. So one boot is not enough to trust the result. Do this:

  1. Add hdmi_force_hotplug=0 to userconfig.txt as already described. Save it.

  2. Full power cycle: shut down, remove power, restore power.

  3. Let it run past the point where it dropped before. While it is still running, SSH in and capture:

    cat /proc/cmdline
    
    cat /sys/class/drm/card*-HDMI-A-*/status
    
  4. Then do one more full power cycle - power off, remove power, restore power - and once it is up, run the same two commands again.

Send me both sets of output, labelled first cycle and second cycle, each wrapped in triple backticks. Capturing it twice tells us whether the result is stable or whether the first cold start differs from the next, which is the behaviour you already noticed.

Kind Regards,

Screen still turns off after boot up.

Here’s the output on first power cycle.

Free Audiophile Linux Music Player - Version 4.119

          © 2015-2026 Michelangelo Guarise - Volumio Team - Volumio.org

Volumio Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Welcome to Volumio for Raspberry Pi (6.12.74-v7l+ armv7l)
volumio@matty-streamer-rpi-4:~$ cat /proc/cmdline
coherent_pool=1M 8250.nr_uarts=0 snd_bcm2835.enable_headphones=0 cgroup_disable=memory numa_policy=interleave nvme.max_host_mem_size_mb=0 snd_bcm2835.enable_hdmi=0 snd_bcm2835.enable_hdmi=0 video=HDMI-A-1:400x1280M@60 numa=fake=2 system_heap.max_order=0 iommu_dma_numa_policy=interleave smsc95xx.macaddr=E4:5F:01:84:6C:AA vc_mem.mem_base=0x3ec00000 vc_mem.mem_size=0x40000000  splash plymouth.ignore-serial-consoles dwc_otg.fiq_enable=1 dwc_otg.fiq_fsm_enable=1 dwc_otg.fiq_fsm_mask=0xF dwc_otg.nak_holdoff=1 quiet console=ttyS0,115200 console=tty1 imgpart=UUID=9caf6474-168f-4972-add4-ace36a467bc2 imgfile=/volumio_current.sqsh bootpart=UUID=807D-2966 datapart=UUID=bea3e05c-62cf-4b22-a58d-66213927f56a uuidconfig=cmdline.txt rootwait bootdelay=7 logo.nologo vt.global_cursor_default=0 net.ifnames=0 snd_bcm2835.enable_hdmi=1 snd_bcm2835.enable_headphones=1 loglevel=0 nodebug use_kmsg=no video=HDMI-A-1:400x1280M@60,rotate=90 plymouth=90
volumio@matty-streamer-rpi-4:~$

connected
disconnected

Here’s the output for the 2nd power cycle

 Free Audiophile Linux Music Player - Version 4.119

          © 2015-2026 Michelangelo Guarise - Volumio Team - Volumio.org

Volumio Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Welcome to Volumio for Raspberry Pi (6.12.74-v7l+ armv7l)
volumio@matty-streamer-rpi-4:~$ cat /proc/cmdline
coherent_pool=1M 8250.nr_uarts=0 snd_bcm2835.enable_headphones=0 cgroup_disable=memory numa_policy=interleave nvme.max_host_mem_size_mb=0 snd_bcm2835.enable_hdmi=0 snd_bcm2835.enable_hdmi=0 video=HDMI-A-1:400x1280M@60 numa=fake=2 system_heap.max_order=0 iommu_dma_numa_policy=interleave smsc95xx.macaddr=E4:5F:01:84:6C:AA vc_mem.mem_base=0x3ec00000 vc_mem.mem_size=0x40000000  splash plymouth.ignore-serial-consoles dwc_otg.fiq_enable=1 dwc_otg.fiq_fsm_enable=1 dwc_otg.fiq_fsm_mask=0xF dwc_otg.nak_holdoff=1 quiet console=ttyS0,115200 console=tty1 imgpart=UUID=9caf6474-168f-4972-add4-ace36a467bc2 imgfile=/volumio_current.sqsh bootpart=UUID=807D-2966 datapart=UUID=bea3e05c-62cf-4b22-a58d-66213927f56a uuidconfig=cmdline.txt rootwait bootdelay=7 logo.nologo vt.global_cursor_default=0 net.ifnames=0 snd_bcm2835.enable_hdmi=1 snd_bcm2835.enable_headphones=1 loglevel=0 nodebug use_kmsg=no video=HDMI-A-1:400x1280M@60,rotate=90 plymouth=90
volumio@matty-streamer-rpi-4:~$

connected
disconnected

Thank you.