From 27625e5ff87b21ad983d2bb53541361a7201755a Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Tue, 27 Sep 2022 09:10:12 -0400 Subject: [PATCH] Vendor nvidia wayland hybrid graphics udev change Allow users with hybrid machines with vendor nvidia driver to elect to use the wayland session from the login screen menu. Resolves: #2128910 --- ...and-on-hybrid-vendor-nvidia-machines.patch | 95 +++++++++++++++++++ gdm.spec | 8 +- 2 files changed, 102 insertions(+), 1 deletion(-) create mode 100644 0001-udev-Allow-wayland-on-hybrid-vendor-nvidia-machines.patch diff --git a/0001-udev-Allow-wayland-on-hybrid-vendor-nvidia-machines.patch b/0001-udev-Allow-wayland-on-hybrid-vendor-nvidia-machines.patch new file mode 100644 index 0000000..94c65f9 --- /dev/null +++ b/0001-udev-Allow-wayland-on-hybrid-vendor-nvidia-machines.patch @@ -0,0 +1,95 @@ +From cc376327163a2c75487b07fa26880bf7a3b080fa Mon Sep 17 00:00:00 2001 +From: rpm-build +Date: Tue, 27 Sep 2022 09:04:54 -0400 +Subject: [PATCH] udev: Allow wayland on hybrid vendor nvidia machines + +We currently disable wayland on machines with the vendor +nvidia driver upstream if hybrid graphics are in place because there +is poor performance for multimonitor use cases. + +But springing that change on users in F37 this late in the game +isn't nice, so instead default to Xorg and provide wayland as an +option in the menu. + +https://bugzilla.redhat.com/show_bug.cgi?id=2128910 +--- + data/61-gdm.rules.in | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/data/61-gdm.rules.in b/data/61-gdm.rules.in +index 5bc9941..7e17be0 100644 +--- a/data/61-gdm.rules.in ++++ b/data/61-gdm.rules.in +@@ -57,66 +57,67 @@ TEST{0711}!="/usr/bin/nvidia-sleep.sh", GOTO="gdm_disable_wayland" + TEST{0711}!="/usr/lib/systemd/system-sleep/nvidia", GOTO="gdm_disable_wayland" + IMPORT{program}="/bin/sh -c \"sed -e 's/: /=/g' -e 's/\([^[:upper:]]\)\([[:upper:]]\)/\1_\2/g' -e 's/[[:lower:]]/\U&/g' -e 's/^/NVIDIA_/' /proc/driver/nvidia/params\"" + ENV{NVIDIA_PRESERVE_VIDEO_MEMORY_ALLOCATIONS}!="1", GOTO="gdm_disable_wayland" + IMPORT{program}="/bin/sh -c 'echo NVIDIA_HIBERNATE=`systemctl is-enabled nvidia-hibernate`'" + ENV{NVIDIA_HIBERNATE}!="enabled", GOTO="gdm_disable_wayland" + IMPORT{program}="/bin/sh -c 'echo NVIDIA_RESUME=`systemctl is-enabled nvidia-resume`'" + ENV{NVIDIA_RESUME}!="enabled", GOTO="gdm_disable_wayland" + IMPORT{program}="/bin/sh -c 'echo NVIDIA_SUSPEND=`systemctl is-enabled nvidia-suspend`'" + ENV{NVIDIA_SUSPEND}!="enabled", GOTO="gdm_disable_wayland" + LABEL="gdm_nvidia_end" + + # If this machine has an internal panel, take note, since it's probably a laptop + # FIXME: It could be "ghost connectors" make this pop positive for some workstations + # in the wild. If so, we may have to fallback to looking at the chassis type from + # dmi data or acpi + KERNEL!="card[0-9]-eDP-*", GOTO="gdm_laptop_check_end" + SUBSYSTEM!="drm", GOTO="gdm_laptop_check_end" + ACTION!="add", GOTO="gdm_laptop_check_end" + RUN+="/usr/bin/touch /run/udev/gdm-machine-is-laptop" + GOTO="gdm_hybrid_nvidia_laptop_check" + LABEL="gdm_laptop_check_end" + + # If this is a hybrid graphics setup, take note + KERNEL!="card[1-9]*", GOTO="gdm_hybrid_graphics_check_end" + KERNEL=="card[1-9]-*", GOTO="gdm_hybrid_graphics_check_end" + SUBSYSTEM!="drm", GOTO="gdm_hybrid_graphics_check_end" + ACTION!="add", GOTO="gdm_hybrid_graphics_check_end" + RUN+="/usr/bin/touch /run/udev/gdm-machine-has-hybrid-graphics" + LABEL="gdm_hybrid_graphics_check_end" + +-# If this is a hybrid graphics laptop with vendor nvidia driver, disable wayland ++# If this is a hybrid graphics laptop with vendor nvidia driver, prefer xorg since ++# multimonitor has very poor performance + LABEL="gdm_hybrid_nvidia_laptop_check" + TEST!="/run/udev/gdm-machine-is-laptop", GOTO="gdm_hybrid_nvidia_laptop_check_end" + TEST!="/run/udev/gdm-machine-has-hybrid-graphics", GOTO="gdm_hybrid_nvidia_laptop_check_end" + TEST!="/run/udev/gdm-machine-has-vendor-nvidia-driver", GOTO="gdm_hybrid_nvidia_laptop_check_end" +-GOTO="gdm_disable_wayland" ++GOTO="gdm_prefer_xorg" + LABEL="gdm_hybrid_nvidia_laptop_check_end" + + # Disable wayland in situation where we're in a guest with a virtual gpu and host passthrough gpu + LABEL="gdm_virt_passthrough_check" + TEST!="/run/udev/gdm-machine-has-hybrid-graphics", GOTO="gdm_virt_passthrough_check_end" + TEST!="/run/udev/gdm-machine-has-virtual-gpu", GOTO="gdm_virt_passthrough_check_end" + TEST!="/run/udev/gdm-machine-has-hardware-gpu", GOTO="gdm_virt_passthrough_check_end" + GOTO="gdm_disable_wayland" + LABEL="gdm_virt_passthrough_check_end" + + # Disable wayland when there are multiple virtual gpus + LABEL="gdm_virt_multi_gpu_check" + TEST!="/run/udev/gdm-machine-has-hybrid-graphics", GOTO="gdm_virt_multi_gpu_check_end" + TEST!="/run/udev/gdm-machine-has-virtual-gpu", GOTO="gdm_virt_multi_gpu_check_end" + TEST=="/run/udev/gdm-machine-has-hardware-gpu", GOTO="gdm_virt_multi_gpu_check_end" + LABEL="gdm_virt_multi_gpu_check_end" + + # Disable wayland when nvidia modeset is disabled or when drivers are a lower + # version than 470, + # For versions above 470 but lower than 510 prefer Xorg, + # Above 510, prefer Wayland. + KERNEL!="nvidia_drm", GOTO="gdm_nvidia_drm_end" + SUBSYSTEM!="module", GOTO="gdm_nvidia_drm_end" + ACTION!="add", GOTO="gdm_nvidia_drm_end" + # disable wayland if nvidia-drm modeset is not enabled + ATTR{parameters/modeset}!="Y", GOTO="gdm_disable_wayland" + # disable wayland for nvidia drivers versions lower than 470 + ATTR{version}=="4[0-6][0-9].*|[0-3][0-9][0-9].*|[0-9][0-9].*|[0-9].*", GOTO="gdm_disable_wayland" + # For nvidia drivers versions Above 510, keep Wayland by default + ATTR{version}=="[5-9][1-9][0-9].*", GOTO="gdm_end" +-- +2.35.1 + diff --git a/gdm.spec b/gdm.spec index 558e9da..52a29ab 100644 --- a/gdm.spec +++ b/gdm.spec @@ -11,7 +11,7 @@ Name: gdm Epoch: 1 Version: 43.0 -Release: 1%{?dist} +Release: 2%{?dist} Summary: The GNOME Display Manager License: GPLv2+ @@ -25,6 +25,7 @@ Source5: default.pa-for-gdm Source6: gdm.sysusers # Downstream patches +Patch70001: 0001-udev-Allow-wayland-on-hybrid-vendor-nvidia-machines.patch Patch80001: 0001-Honor-initial-setup-being-disabled-by-distro-install.patch Patch90001: 0001-data-add-system-dconf-databases-to-gdm-profile.patch @@ -300,6 +301,11 @@ fi %{_libdir}/pkgconfig/gdm-pam-extensions.pc %changelog +* Tue Sep 27 2022 Ray Strode - 1:43.0-2 +- Allow users with hybrid machines with vendor nvidia driver to + elect to use the wayland session from the login screen menu. + Resolves: #2128910 + * Tue Sep 20 2022 Kalev Lember - 1:43.0-1 - Update to 43.0