From d524c8e88f558b9f2aebff39b6fbe77eab51e081 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:43:08 +0200 Subject: Adding upstream version 43.0. Signed-off-by: Daniel Baumann --- data/61-gdm.rules.in | 138 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 138 insertions(+) create mode 100644 data/61-gdm.rules.in (limited to 'data/61-gdm.rules.in') diff --git a/data/61-gdm.rules.in b/data/61-gdm.rules.in new file mode 100644 index 0000000..5bc9941 --- /dev/null +++ b/data/61-gdm.rules.in @@ -0,0 +1,138 @@ +# identify virtio graphics cards to find passthrough setups +SUBSYSTEM!="virtio", GOTO="gdm_virtio_device_end" +ACTION!="add", GOTO="gdm_virtio_device_end" +ATTR{vendor}=="0x1af4", ATTR{device}=="0x0010", RUN+="/usr/bin/touch /run/udev/gdm-machine-has-virtual-gpu", ENV{GDM_MACHINE_HAS_VIRTUAL_GPU}="1", GOTO="gdm_virtio_device_end" +LABEL="gdm_virtio_device_end" + +SUBSYSTEM!="pci", GOTO="gdm_pci_device_end" +ACTION!="bind", GOTO="gdm_pci_device_end" + +# identify virtio graphics cards to find passthrough setups +# cirrus +ATTR{vendor}=="0x1013", ATTR{device}=="0x00b8", ATTR{subsystem_vendor}=="0x1af4", ATTR{subsystem_device}=="0x1100", RUN+="/usr/bin/touch /run/udev/gdm-machine-has-virtual-gpu", ENV{GDM_MACHINE_HAS_VIRTUAL_GPU}="1", GOTO="gdm_pci_device_end" +# vga +ATTR{vendor}=="0x1b36", ATTR{device}=="0x0100", RUN+="/usr/bin/touch /run/udev/gdm-machine-has-virtual-gpu", ENV{GDM_MACHINE_HAS_VIRTUAL_GPU}="1", GOTO="gdm_pci_device_end" +# qxl +ATTR{vendor}=="0x1234", ATTR{device}=="0x1111", RUN+="/usr/bin/touch /run/udev/gdm-machine-has-virtual-gpu", ENV{GDM_MACHINE_HAS_VIRTUAL_GPU}="1", GOTO="gdm_pci_device_end" + +# disable Wayland on Hi1710 chipsets +ATTR{vendor}=="0x19e5", ATTR{device}=="0x1711", GOTO="gdm_disable_wayland" + +# disable Wayland on Matrox chipsets +ATTR{vendor}=="0x102b", ATTR{device}=="0x0522", GOTO="gdm_disable_wayland" +ATTR{vendor}=="0x102b", ATTR{device}=="0x0524", GOTO="gdm_disable_wayland" +ATTR{vendor}=="0x102b", ATTR{device}=="0x0530", GOTO="gdm_disable_wayland" +ATTR{vendor}=="0x102b", ATTR{device}=="0x0532", GOTO="gdm_disable_wayland" +ATTR{vendor}=="0x102b", ATTR{device}=="0x0533", GOTO="gdm_disable_wayland" +ATTR{vendor}=="0x102b", ATTR{device}=="0x0534", GOTO="gdm_disable_wayland" +ATTR{vendor}=="0x102b", ATTR{device}=="0x0536", GOTO="gdm_disable_wayland" +ATTR{vendor}=="0x102b", ATTR{device}=="0x0538", GOTO="gdm_disable_wayland" + +# disable Wayland on aspeed chipsets +ATTR{vendor}=="0x1a03", ATTR{device}=="0x2010", GOTO="gdm_disable_wayland" +ATTR{vendor}=="0x1a03", ATTR{device}=="0x2000", GOTO="gdm_disable_wayland" + +LABEL="gdm_pci_device_end" + +# disable Wayland if modesetting is disabled +KERNEL!="card[0-9]*", GOTO="gdm_nomodeset_end" +SUBSYSTEM!="drm", GOTO="gdm_nomodeset_end" +IMPORT{parent}="GDM_MACHINE_HAS_VIRTUAL_GPU" +ENV{GDM_MACHINE_HAS_VIRTUAL_GPU}!="1", RUN+="/usr/bin/touch /run/udev/gdm-machine-has-hardware-gpu" +# but keep it enabled for simple framebuffer drivers +DRIVERS=="simple-framebuffer", GOTO="gdm_nomodeset_end" +IMPORT{cmdline}="nomodeset", GOTO="gdm_disable_wayland" +LABEL="gdm_nomodeset_end" + +# The vendor nvidia driver has multiple modules that need to be loaded before GDM can make an +# informed choice on which way to proceed, so force GDM to wait until NVidia's modules are +# loaded before starting up. +KERNEL!="nvidia", GOTO="gdm_nvidia_end" +SUBSYSTEM!="module", GOTO="gdm_nvidia_end" +ACTION!="add", GOTO="gdm_nvidia_end" +RUN+="/usr/bin/touch /run/udev/gdm-machine-has-vendor-nvidia-driver" + +# Check if suspend/resume services necessary for working wayland support is available +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 +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" +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" +# For nvidia drivers versions 470-495, prefer Xorg by default +GOTO="gdm_prefer_xorg" +LABEL="gdm_nvidia_drm_end" + +GOTO="gdm_end" + +LABEL="gdm_prefer_xorg" +RUN+="@libexecdir@/gdm-runtime-config set daemon PreferredDisplayServer xorg" +GOTO="gdm_end" + +LABEL="gdm_disable_wayland" +RUN+="@libexecdir@/gdm-runtime-config set daemon WaylandEnable false" +GOTO="gdm_end" + +LABEL="gdm_end" + -- cgit v1.2.3