aboutsummaryrefslogtreecommitdiff
path: root/src/backend/tty.rs
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2024-03-29 09:01:54 +0400
committerIvan Molodetskikh <yalterz@gmail.com>2024-03-29 09:09:33 +0400
commit092420ec5a54f1cd5f4f59b75a60f5cfa7cceacd (patch)
tree64f140f80555c65ac1fd25b371a7622f1e1ed50b /src/backend/tty.rs
parentf46e93794981450a5c1ed3f114ea983427afc266 (diff)
downloadniri-092420ec5a54f1cd5f4f59b75a60f5cfa7cceacd.tar.gz
niri-092420ec5a54f1cd5f4f59b75a60f5cfa7cceacd.tar.bz2
niri-092420ec5a54f1cd5f4f59b75a60f5cfa7cceacd.zip
tty: Try to proceed when can't get render node
This is a workaround that should make split display/render devices work.
Diffstat (limited to 'src/backend/tty.rs')
-rw-r--r--src/backend/tty.rs17
1 files changed, 15 insertions, 2 deletions
diff --git a/src/backend/tty.rs b/src/backend/tty.rs
index 54dce718..a1c7ee30 100644
--- a/src/backend/tty.rs
+++ b/src/backend/tty.rs
@@ -265,8 +265,13 @@ impl Tty {
.context("error opening the primary GPU DRM node")?;
let primary_render_node = primary_node
.node_with_type(NodeType::Render)
- .context("error getting the render node for the primary GPU")?
- .context("error getting the render node for the primary GPU")?;
+ .and_then(Result::ok)
+ .unwrap_or_else(|| {
+ warn!(
+ "error getting the render node for the primary GPU; proceeding anyway"
+ );
+ primary_node
+ });
Ok::<_, anyhow::Error>((primary_node, primary_render_node))
})?;
@@ -1747,6 +1752,14 @@ fn primary_node_from_config(config: &Config) -> Option<(DrmNode, DrmNode)> {
}
} else {
warn!("DRM node {path:?} is not a render node");
+
+ // Gracefully handle misconfiguration on regular desktop systems.
+ if let Some(Ok(render_node)) = node.node_with_type(NodeType::Render) {
+ return Some((node, render_node));
+ }
+
+ warn!("could not get render node for DRM node {path:?}; proceeding anyway");
+ return Some((node, node));
}
}
Err(err) => {