mirror of
https://github.com/niri-wm/niri.git
synced 2026-06-23 02:05:33 +07:00
Add force-disable-connectors-on-resume debug flag
This commit is contained in:
@@ -17,6 +17,7 @@ debug {
|
|||||||
disable-cursor-plane
|
disable-cursor-plane
|
||||||
disable-direct-scanout
|
disable-direct-scanout
|
||||||
restrict-primary-scanout-to-matching-format
|
restrict-primary-scanout-to-matching-format
|
||||||
|
force-disable-connectors-on-resume
|
||||||
render-drm-device "/dev/dri/renderD129"
|
render-drm-device "/dev/dri/renderD129"
|
||||||
ignore-drm-device "/dev/dri/renderD128"
|
ignore-drm-device "/dev/dri/renderD128"
|
||||||
ignore-drm-device "/dev/dri/renderD130"
|
ignore-drm-device "/dev/dri/renderD130"
|
||||||
@@ -104,6 +105,19 @@ debug {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### `force-disable-connectors-on-resume`
|
||||||
|
|
||||||
|
Force-disables all outputs upon resuming niri (TTY switch or waking up from suspend).
|
||||||
|
This causes a modeset/screen blank on all outputs.
|
||||||
|
|
||||||
|
If niri rendering is corrupted, or monitors don't light up after a TTY switch, you can try this flag.
|
||||||
|
|
||||||
|
```kdl
|
||||||
|
debug {
|
||||||
|
force-disable-connectors-on-resume
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
### `render-drm-device`
|
### `render-drm-device`
|
||||||
|
|
||||||
Override the DRM device that niri will use for all rendering.
|
Override the DRM device that niri will use for all rendering.
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ pub struct Debug {
|
|||||||
pub disable_direct_scanout: bool,
|
pub disable_direct_scanout: bool,
|
||||||
pub keep_max_bpc_unchanged: bool,
|
pub keep_max_bpc_unchanged: bool,
|
||||||
pub restrict_primary_scanout_to_matching_format: bool,
|
pub restrict_primary_scanout_to_matching_format: bool,
|
||||||
|
pub force_disable_connectors_on_resume: bool,
|
||||||
pub render_drm_device: Option<PathBuf>,
|
pub render_drm_device: Option<PathBuf>,
|
||||||
pub ignored_drm_devices: Vec<PathBuf>,
|
pub ignored_drm_devices: Vec<PathBuf>,
|
||||||
pub force_pipewire_invalid_modifier: bool,
|
pub force_pipewire_invalid_modifier: bool,
|
||||||
@@ -44,6 +45,8 @@ pub struct DebugPart {
|
|||||||
pub keep_max_bpc_unchanged: Option<Flag>,
|
pub keep_max_bpc_unchanged: Option<Flag>,
|
||||||
#[knuffel(child)]
|
#[knuffel(child)]
|
||||||
pub restrict_primary_scanout_to_matching_format: Option<Flag>,
|
pub restrict_primary_scanout_to_matching_format: Option<Flag>,
|
||||||
|
#[knuffel(child)]
|
||||||
|
pub force_disable_connectors_on_resume: Option<Flag>,
|
||||||
#[knuffel(child, unwrap(argument))]
|
#[knuffel(child, unwrap(argument))]
|
||||||
pub render_drm_device: Option<PathBuf>,
|
pub render_drm_device: Option<PathBuf>,
|
||||||
#[knuffel(children(name = "ignore-drm-device"), unwrap(argument))]
|
#[knuffel(children(name = "ignore-drm-device"), unwrap(argument))]
|
||||||
@@ -81,6 +84,7 @@ impl MergeWith<DebugPart> for Debug {
|
|||||||
disable_direct_scanout,
|
disable_direct_scanout,
|
||||||
keep_max_bpc_unchanged,
|
keep_max_bpc_unchanged,
|
||||||
restrict_primary_scanout_to_matching_format,
|
restrict_primary_scanout_to_matching_format,
|
||||||
|
force_disable_connectors_on_resume,
|
||||||
force_pipewire_invalid_modifier,
|
force_pipewire_invalid_modifier,
|
||||||
emulate_zero_presentation_time,
|
emulate_zero_presentation_time,
|
||||||
disable_resize_throttling,
|
disable_resize_throttling,
|
||||||
|
|||||||
@@ -2134,6 +2134,7 @@ mod tests {
|
|||||||
disable_direct_scanout: false,
|
disable_direct_scanout: false,
|
||||||
keep_max_bpc_unchanged: false,
|
keep_max_bpc_unchanged: false,
|
||||||
restrict_primary_scanout_to_matching_format: false,
|
restrict_primary_scanout_to_matching_format: false,
|
||||||
|
force_disable_connectors_on_resume: false,
|
||||||
render_drm_device: Some(
|
render_drm_device: Some(
|
||||||
"/dev/dri/renderD129",
|
"/dev/dri/renderD129",
|
||||||
),
|
),
|
||||||
|
|||||||
+11
-1
@@ -646,7 +646,16 @@ impl Tty {
|
|||||||
|
|
||||||
// It hasn't been removed, update its state as usual.
|
// It hasn't been removed, update its state as usual.
|
||||||
let device = self.devices.get_mut(&node).unwrap();
|
let device = self.devices.get_mut(&node).unwrap();
|
||||||
if let Err(err) = device.drm.activate(false) {
|
|
||||||
|
// Someone on an old device hit what seems to be a driver bug without this:
|
||||||
|
// https://github.com/YaLTeR/niri/issues/3048
|
||||||
|
let force_disable = self
|
||||||
|
.config
|
||||||
|
.borrow()
|
||||||
|
.debug
|
||||||
|
.force_disable_connectors_on_resume;
|
||||||
|
|
||||||
|
if let Err(err) = device.drm.activate(force_disable) {
|
||||||
warn!("error activating DRM device: {err:?}");
|
warn!("error activating DRM device: {err:?}");
|
||||||
}
|
}
|
||||||
if let Some(lease_state) = &mut device.drm_lease_state {
|
if let Some(lease_state) = &mut device.drm_lease_state {
|
||||||
@@ -1055,6 +1064,7 @@ impl Tty {
|
|||||||
if let Err(err) = surface.compositor.reset_state() {
|
if let Err(err) = surface.compositor.reset_state() {
|
||||||
warn!("error resetting DrmCompositor state: {err:?}");
|
warn!("error resetting DrmCompositor state: {err:?}");
|
||||||
}
|
}
|
||||||
|
surface.compositor.reset_buffers();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user