Everything is working fine except wrong orientation of Volumio startup logo, it is strange, because even startup log (visible for short time during startup) is shown in right orientation, only logo is rotated and it is a bit annoying.
The reason the Volumio Plymouth boot splash does not rotate properly on DSI MIPI displays under Volumio (Buster-based) lies in how Plymouth handles rendering and framebuffer rotation in early boot stages.
Why Only the Logo Is Affected
The boot logs (kernel messages) are handled by the Linux kernel using the framebuffer console, which does respect the rotation configuration from config.txt (e.g., display_lcd_rotate=2) or kernel DRM overlays.
However, Plymouth runs later during userspace initialization and uses its own rendering pipeline, often directly accessing the framebuffer (e.g., via DRM or fbdev), and does not inherit the rotation applied earlier by the kernel.
Specific to MIPI DSI Displays
DSI panels are initialized through KMS (Kernel Mode Setting) and typically register under /dev/dri/card0 with hardware-accelerated modes.
On Debian Buster, the version of Plymouth included (0.9.4 or earlier) has limited or no support for rotation on DRM/KMS-based framebuffers.
Plymouth themes like the one used in Volumio do not apply transformation matrices to the rendered bitmap/logo.
There’s no built-in option in Buster’s Plymouth to rotate the splash theme graphics. Newer versions of Plymouth on Bullseye/Bookworm added experimental support, but not in Buster.
Workarounds (but limited on Buster)
Pre-rotate the logo asset used in the theme (i.e., manually rotate volumio-logo.png) – this is crude and hardcoded, but works if rotation is static.
Modify DRM EDID or framebuffer orientation — not practical, and usually ignored by Plymouth.
Custom Plymouth plugin or backport a newer Plymouth version — but this increases maintenance burden and may break other integrations.
Summary
This is a known limitation of Plymouth on Debian Buster. While the DSI display is physically and electrically working fine, the Plymouth theme renderer does not rotate the splash even if other parts of the boot process appear in the correct orientation. This is due to the Plymouth version lacking rotation support for DRM backends on Buster.
If you’re building custom Volumio images, the only realistic workaround on Buster is to rotate the logo image file manually to match the expected orientation.
I tried, even by removing whole content of folder with files for original logo (/usr/share/plymouth/themes/volumio-player/sequence), then I put there my own logo (just rotated original logo) and modified script volumio-player.script by removing whole part for creating animation, instead I wrote as follow:
#------------------------------------------------- LOGO -------------------------------------------------
# Load the logo image (change 'volumio-logo.png' to your own logo image filename)
logo_image = Image("/usr/share/plymouth/themes/volumio-player/sequence/volumio-logo.png");
# Create a sprite for the logo
logo_sprite = Sprite();
# Center the logo on the screen (horizontally and vertically)
logo_sprite.SetX(Window.GetWidth() / 2 - logo_image.GetWidth() / 2);
logo_sprite.SetY(Window.GetHeight() / 2 - logo_image.GetHeight() / 2);
# Set the image for the sprite
logo_sprite.SetImage(logo_image);
Result? Still the same, animated logo. It has to be hardcoded deeper?
The reason your rotated logo changes aren’t taking effect is because the initial splash screen is rendered from volumio.initrd, not from the root filesystem (/usr/share/plymouth/themes/...). This initrd is loaded during early boot, before / is mounted, and contains a minimal Plymouth setup with embedded theme assets and scripts.
Even if you modify volumio-player.script or replace assets on the live system, those changes do not affect the splash shown during initrd execution.
To properly fix the logo orientation:
Option 1: Modify the Live Initrd
Unpack /boot/volumio.initrd
Replace the logo and volumio-player.script inside the embedded Plymouth theme
Repack the initrd and overwrite the original
Note: This must be redone after each kernel/initrd update.
Option 2: Build a Custom Volumio Image with Rotated Logo
This ensures your rotation fix is persistent across updates and is ideal for custom hardware setups using rotated MIPI or DSI displays.
Rotation via config.txt or kernel KMS settings is not honored by Plymouth during initrd, as it initializes its own DRM/fb session independently. Only direct modification of assets in the initrd can resolve this.
Note: This limitation is specific to the current Buster-based Volumio.
The Bookworm-based Volumio (internal alpha in progress, no public ETA) may include updated Plymouth and KMS handling that resolves this cleanly without needing manual patching. If you’re not distributing hardware, consider waiting for that release.
This must be redone after each kernel/initrd update.
And this is also a good reason to stop this discussion at this point. It might just be easier to get used to it, especially since the rotated logo only appears for 2–3 seconds.
A small, very humble request to the Volumio developers: it’s probably obvious that people use all sorts of displays, mounted in all sorts of orientations. Ideally, orientation settings should be applied consistently across the whole system.
And maybe consider allowing users to import their own logo? It could appear after the original one, or even alongside it, if the original logo is needed as a well-deserved credit to the creators of the system (which is understandable). But let’s also give proud users a chance to personalize their own copy.
If this is not too much to ask - details of your screen like model, manufacturer, or perhaps link to the tech-specs may hold some clues about required setup? In the entire community - you are the only person who holds the details of your setup.
I asked directly for your screen details - manufacturer, model, or a link to the tech-specs. You responded with configuration files only.
Without knowing what hardware you actually have, I cannot help. Configuration files tell me what you configured - not what display is connected, how it connects, or what parameters it actually requires.
Required information:
Display - manufacturer, model number, connection type (HDMI, DSI, SPI, other), link to product page or datasheet
Totally makes sense - knowing your exact screen & interface (HDMI/DSI/SPI) really helps narrow down what rotation settings you should use, because each display type can behave very differently. Without that info it’s mostly guesswork. If you can share the display model + connection type + logs from volumio.local/dev, folks here can give way more specific advice.
Dear friends, thank you very much for your help, but I have the feeling you were making it too difficult. I dug around and found the new (?) volumio.adaptive script in the plymouth folder, a name that says it all… By the way, there are the instructions inside (which I followed), just add plymouth=270 to cmdline.txt and everything was fine.
Thanks again, happy listening.
Well, it does not matter really how you get to the finishing line. You must like the hard way.
Should you choose to read previously posted by @Wheaten link to the rotation research you will find this right away, without need to diving into the theme script itself:
Should you click further in the same shared link you would find this too:
Either “white on black” or “black on white”. I can not imagine to make these details easier to find than presented over a red carpet on a silver tray…
Well, like I wrote before, these will not produce full result with Waveshare 7.9", reasons of which have been explained in relevant guides. Sharing a link to these guides will not help since even now, no one but you knows which hardware you have.
Sorry, but I don’t understand. I think I’ve read all the posts in this thread, and there’s no mention of the cmdline parameter. It just says you can directly modify the bitmap or, as you said, wait for the release of bookworm, which should fix the problem. Bookworm is out, so I asked (and you very kindly answered) if we had a solution at this point. I don’t think I chose the difficult solution… I just looked in the script, saw what parameter to set, and set it… For me, this is the easiest solution