Demi Marie Obenour <demiobenour@gmail.com> writes:
This replaces the mdevd uevent daemon with systemd-udevd, which supports much more hardware and is therefore to be preferred for a full desktop environment. Various Wayland compositors integrate with systemd-udevd, allowing them to discover devices as they appear rather than having to only use devices plugged in when the compositor is started. Additionally, systemd-udevd has quirks for various devices that are needed to support the wide variety of hardware end-users have.
The dependency on /dev/dri/card0 being present is eliminated, and whatever devices the user has are now picked up by the compositor. New dependencies are added to ensure that udev coldplug has finished before any non-trivial services are started. systemd-udev-trigger.service runs 'udevadm trigger' and has Before=sysinit.target, so anything that is not an early boot service can assume 'udevadm trigger' has run.
systemd-udevd doesn't set PATH to anything useful, presumably because under NixOS this is handled some other way. Therefore, explicitly set it to /usr/bin in the scripts systemd-udevd calls.
The /etc/mdev/listen and /etc/mdev/wait scripts are replaced by 'udevadm wait', so they are deleted. The whole static-nodes target also goes away, as Linux handles that itself and systemd-udevd deals with autoloading.
Not quite right. Linux does not create static nodes. Userspace has to. That's why we had a service for it. (It sucks.)
diff --git a/host/rootfs/image/etc/s6-rc/kvm/up b/host/rootfs/image/etc/s6-rc/kvm/up index c02e3f90245e005b98b4de8245a1863fb49c1158..a8436de58580f2a2a6f42bb69418a319f967df47 100644 --- a/host/rootfs/image/etc/s6-rc/kvm/up +++ b/host/rootfs/image/etc/s6-rc/kvm/up @@ -1,4 +1,3 @@ # SPDX-License-Identifier: EUPL-1.2+ -# SPDX-FileCopyrightText: 2023 Alyssa Ross <hi@alyssa.is> - -/etc/mdev/wait kvm +# SPDX-FileCopyrightText: 2025 Demi Marie Obenour <demiobenour@gmail.com> +udevadm wait /dev/kvm
Any reason now not to just inline this into the services that need to wait?
diff --git a/host/rootfs/image/etc/s6-rc/systemd-udevd/run b/host/rootfs/image/etc/s6-rc/systemd-udevd/run new file mode 100644 index 0000000000000000000000000000000000000000..2501680b69eb0060b651146dffb6b3a99640c6fb --- /dev/null +++ b/host/rootfs/image/etc/s6-rc/systemd-udevd/run @@ -0,0 +1,11 @@ +#!/bin/execlineb -P +# SPDX-License-Identifier: EUPL-1.2+ +# SPDX-FileCopyrightText: 2025 Demi Marie Obenour <demiobenour@gmail.com> +if { rm -f /run/sd-notify-wrapper/systemd-udevd } +background { + s6-ipcserver-socketbinder -b0 -m -a 0600 /run/sd-notify-wrapper/systemd-udevd + fdmove 1 3 + sd-notify-adapter +} +export NOTIFY_SOCKET /run/sd-notify-wrapper/systemd-udevd +exec -a systemd-udevd udevadm
How does systemd expect this to normally work?
diff --git a/host/rootfs/image/etc/s6-rc/vm-env/contents b/host/rootfs/image/etc/s6-rc/vm-env/contents index 580795b1b02bb7a8dff7f872723c678141d4bb70..ed8b5c410adfc17f5bbc33932ac79d97bd7b3115 100644 --- a/host/rootfs/image/etc/s6-rc/vm-env/contents +++ b/host/rootfs/image/etc/s6-rc/vm-env/contents @@ -2,4 +2,5 @@ # SPDX-FileCopyrightText: 2021 Alyssa Ross <hi@alyssa.is> # static-nodes +systemd-udevd-coldplug weston
Shouldn't static-nodes be removed here as well, and the static-nodes files deleted?
diff --git a/host/rootfs/image/etc/udev/rules.d/99-spectrum.rules b/host/rootfs/image/etc/udev/rules.d/99-spectrum.rules new file mode 100644 index 0000000000000000000000000000000000000000..ca91367529f39eebe009cc8acef782cf6a4516c1 --- /dev/null +++ b/host/rootfs/image/etc/udev/rules.d/99-spectrum.rules @@ -0,0 +1,9 @@ +# SPDX-License-Identifier: EUPL-1.2+ +# SPDX-FileCopyrightText: 2025 Demi Marie Obenour <demiobenour@gmail.com> + +# systemd-udevd has a built-in module loading feature, +# but it seems to not work for some reason or another. +# This works. +ACTION!="remove", ENV{MODALIAS}!="", RUN+="/usr/bin/modprobe -q $env{MODALIAS}" +# systemd-udevd unsets PATH, so fix that. +ACTION!="remove", ENV{PCI_CLASS}=="2????", RUN+="/usr/bin/env PATH=/usr/bin /usr/libexec/net-add"
This is such a weird behavior. Do we know why it does that?
diff --git a/host/rootfs/image/usr/bin/vm-start b/host/rootfs/image/usr/bin/vm-start index 67480e5215d8a8260ce3f03c67f71ba8f210c291..9725ef5ec549ff191606282a7b0ae56838f53f03 100755 --- a/host/rootfs/image/usr/bin/vm-start +++ b/host/rootfs/image/usr/bin/vm-start @@ -2,7 +2,7 @@ # SPDX-License-Identifier: EUPL-1.2+ # SPDX-FileCopyrightText: 2022-2023, 2025 Alyssa Ross <hi@alyssa.is>
-foreground { s6-rc -bu change vm-env } +foreground { s6-rc -bu change weston }
foreground { redirfd -w 2 /dev/null
Why?