Bug 473685

Summary: Audio-only HDMI soundbar inappropriately shows up as a display, with all the consequences that entails
Product: [Plasma] KScreen Reporter: Dragoon Aethis <kde>
Component: commonAssignee: kscreen-bugs-null <kscreen-bugs-null>
Status: CONFIRMED ---    
Severity: normal CC: mabo, nate, wafixa5827, xaver.hugl
Priority: NOR    
Version: 5.27.7   
Target Milestone: ---   
Platform: Arch Linux   
OS: Linux   
Latest Commit: Version Fixed In:
Sentry Crash Report:

Description Dragoon Aethis 2023-08-23 14:12:27 UTC
This is a weird feature request, since the use case is fairly niche but annoying to work around.

I have a desktop PC with AMD Radeon RX 6800 with 3 outputs connected to it:
- 2x 1440p 144Hz displays connected over DisplayPort,
- A Samsung soundbar connected over HDMI. This is a problem, because...

HDMI is the only way to get uncompressed, low-latency-ish PCM 7.1 audio sent to the soundbar from a PC. (It can also accept uncompressed 2.1 or compressed 5.1 over Toslink, but not full-range 7.1 it's capable of dealing with. It can also accept 2.1 audio over Bluetooth with significant latency penalty.)

The soundbar shows up in the system as a normal display and has to be enabled in order to make it possible to play audio on it (if disabled, PipeWire/PulseAudio can't configure the audio output profile on the respective HDMI Audio device). This requires the user to place that display somewhere in the workspace and it's annoying that you can move the cursor off-screen with no visual indication or Win+Left/Right random windows into the void.

The feature request I have is to make it possible to enable a given output as a "dummy" display - enable a device, set resolution as requested in the display configuration panel etc, but just render the entire display contents black and don't let the desktop user interact with that display output in any way. This allows using that device as an audio output without extra annoyances. Mirroring a display is not a solution, since other displays run at 1440p144Hz which the soundbar can't handle.

This is all on the Wayland session.

KDE Plasma Version: 5.27.7
KDE Frameworks Version: 5.109.0
Qt Version: 5.15.10

---

What `kscreen-console outputs` sees for that soundbar HDMI output:

Id:  2
Name:  "HDMI-A-1"
Type:  "HDMI"
Connected:  true
Enabled:  true
Priority:  2
Rotation:  KScreen::Output::None
Pos:  QPoint(2560,480)
MMSize:  QSize(1150, 650)
FollowPreferredMode:  false
Size:  QSize(640, 480)
Scale:  1
Clones:  None
Mode:  "16"
Preferred Mode:  "0"
Preferred modes:  ("0")

Modes:
"0"    "1280x720@60"   QSize(1280, 720)   60
"1"    "1920x1080@60"   QSize(1920, 1080)   60
"10"    "720x576@50"   QSize(720, 576)   50
"11"    "720x480@60"   QSize(720, 480)   60
"12"    "720x480@60"   QSize(720, 480)   60
"13"    "720x480@60"   QSize(720, 480)   59.94
"14"    "720x480@60"   QSize(720, 480)   59.94
"15"    "720x480@60"   QSize(720, 480)   59.94
"16"    "640x480@60"   QSize(640, 480)   60
"17"    "640x480@60"   QSize(640, 480)   59.94
"18"    "640x480@60"   QSize(640, 480)   59.94
"2"    "1920x1080@60"   QSize(1920, 1080)   59.94
"3"    "1280x720@60"   QSize(1280, 720)   60
"4"    "1280x720@60"   QSize(1280, 720)   59.94
"5"    "1280x720@50"   QSize(1280, 720)   50
"6"    "1280x720@50"   QSize(1280, 720)   50
"7"    "1024x768@60"   QSize(1024, 768)   60.004
"8"    "800x600@60"   QSize(800, 600)   60.317
"9"    "720x576@50"   QSize(720, 576)   50

EDID Info:
Device ID:  "xrandr-Data Export Corporation-EP-HDMI-RX-1"
Name:  "EP-HDMI-RX"
Vendor:  "Data Export Corporation"
Serial:  "1"
EISA ID:  ""
Hash:  "6f454a2eafcd6df2a93f7879cea59fd9"
Width:  115
Height:  65
Gamma:  2.2
Red:  QQuaternion(scalar:1, vector:(0.618164, 0.347656, 0))
Green:  QQuaternion(scalar:1, vector:(0.280273, 0.605469, 0))
Blue:  QQuaternion(scalar:1, vector:(0.152344, 0.0634766, 0))
White:  QQuaternion(scalar:1, vector:(0.3125, 0.329102, 0))
Comment 1 Nate Graham 2023-08-23 16:41:35 UTC
It's an interesting problem for sure. I'll rename the bug report to describe the problem, not one potential solution for it, because the problem is valid but we might find a different solution.

Maybe we can detect when there's no video signal and not create a screen for it?
Comment 2 Dragoon Aethis 2023-08-23 17:48:39 UTC
(In reply to Nate Graham from comment #1)
> Maybe we can detect when there's no video signal and not create a screen for it?

The thing is, since it's HDMI, there *is* video going through. The soundbar has two HDMI IN/OUT ports and is capable of video passthrough for playback with TVs that can't do HDMI eARC - this way you can connect devices like old BD players or game consoles to the soundbar's HDMI IN (which plays high quality audio only), and soundbar's HDMI OUT to the TV HDMI IN (and that gets the video + audio stream with some extra latency sprinkled on top).
Comment 3 Zamundaaa 2023-08-23 18:07:38 UTC
That case would be fine, if we could detect that something's connected to the OUT port. Sadly, like with seemingly every other display-related annoyance, there isn't any information about this in the EDID (at least not with the soundbar that I have).

We can make such a special mode in KWin that "enables" the output without creating an actual user facing output that you can put windows on etc, but that special mode would still have to be manually enabled by the user.
Comment 4 Nate Graham 2023-09-05 21:38:11 UTC
*** Bug 474012 has been marked as a duplicate of this bug. ***
Comment 5 Dragoon Aethis 2024-09-21 12:44:38 UTC
As a slight additional note, Windows has a feature that marks a given display output as a "special purpose" display not for desktop use: https://www.elevenforum.com/t/turn-on-or-off-remove-display-from-desktop-in-windows-11.7632/
Comment 6 Zamundaaa 2024-09-21 13:05:09 UTC
You could mark the "display" as non-desktop through the kernel, but that doesn't help for this, as it also turns the display off and so sound doesn't work in it anymore either.