Don't skip disconnected X11 outputs (#1071)

This commit is contained in:
luk1337 2023-03-28 22:44:32 +02:00 committed by GitHub
parent 44f1984af0
commit 1ab1b7920e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 24 additions and 10 deletions

View File

@ -299,13 +299,18 @@ output_name
.. Tip:: To find the name of the appropriate values follow these instructions. .. Tip:: To find the name of the appropriate values follow these instructions.
**Linux** **Linux**
.. code-block:: bash During Sunshine startup, you should see the list of detected monitors:
xrandr --listmonitors .. code-block:: text
Example output: ``0: +HDMI-1 1920/518x1200/324+0+0 HDMI-1`` Info: Detecting connected monitors
Info: Detected monitor 0: DVI-D-0, connected: false
Info: Detected monitor 1: HDMI-0, connected: true
Info: Detected monitor 2: DP-0, connected: true
Info: Detected monitor 3: DP-1, connected: false
Info: Detected monitor 4: DVI-D-1, connected: false
You need to use the value before the colon in the output, e.g. ``0``. You need to use the value before the colon in the output, e.g. ``1``.
.. Todo:: macOS .. Todo:: macOS

View File

@ -427,7 +427,7 @@ namespace platf {
int monitor = 0; int monitor = 0;
for (int x = 0; x < output; ++x) { for (int x = 0; x < output; ++x) {
output_info_t out_info { x11::rr::GetOutputInfo(xdisplay.get(), screenr.get(), screenr->outputs[x]) }; output_info_t out_info { x11::rr::GetOutputInfo(xdisplay.get(), screenr.get(), screenr->outputs[x]) };
if (out_info && out_info->connection == RR_Connected) { if (out_info) {
if (monitor++ == streamedMonitor) { if (monitor++ == streamedMonitor) {
result = std::move(out_info); result = std::move(out_info);
break; break;
@ -761,7 +761,7 @@ namespace platf {
return {}; return {};
} }
BOOST_LOG(info) << "Detecting connected monitors"sv; BOOST_LOG(info) << "Detecting monitors"sv;
x11::xdisplay_t xdisplay { x11::OpenDisplay(nullptr) }; x11::xdisplay_t xdisplay { x11::OpenDisplay(nullptr) };
if (!xdisplay) { if (!xdisplay) {
@ -775,7 +775,8 @@ namespace platf {
int monitor = 0; int monitor = 0;
for (int x = 0; x < output; ++x) { for (int x = 0; x < output; ++x) {
output_info_t out_info { x11::rr::GetOutputInfo(xdisplay.get(), screenr.get(), screenr->outputs[x]) }; output_info_t out_info { x11::rr::GetOutputInfo(xdisplay.get(), screenr.get(), screenr->outputs[x]) };
if (out_info && out_info->connection == RR_Connected) { if (out_info) {
BOOST_LOG(info) << "Detected monitor "sv << monitor << ": "sv << out_info->name << ", connected: "sv << (out_info->connection == RR_Connected);
++monitor; ++monitor;
} }
} }

View File

@ -560,9 +560,17 @@
v-model="config.output_name" v-model="config.output_name"
/> />
<div class="form-text"> <div class="form-text">
xrandr --listmonitors<br /> During Sunshine startup, you should see the list of detected monitors, e.g.:<br />
Example output: <br />
<pre> 0: +HDMI-1 1920/518x1200/324+0+0 HDMI-1</pre> <pre style="white-space: pre-line;">
Info: Detecting connected monitors
Info: Detected monitor 0: DVI-D-0, connected: false
Info: Detected monitor 1: HDMI-0, connected: true
Info: Detected monitor 2: DP-0, connected: true
Info: Detected monitor 3: DP-1, connected: false
Info: Detected monitor 4: DVI-D-1, connected: false
</pre>
You need to use the value before the colon in the output, e.g. <b>1</b>.
</div> </div>
</div> </div>
</div> </div>