diff --git a/mkosi.extra/usr/lib/systemd/system/systemd-suspend.service.d/10-nvidia-no-freeze-session.conf b/mkosi.extra/usr/lib/systemd/system/systemd-suspend.service.d/10-nvidia-no-freeze-session.conf new file mode 100644 index 0000000..a1c38bf --- /dev/null +++ b/mkosi.extra/usr/lib/systemd/system/systemd-suspend.service.d/10-nvidia-no-freeze-session.conf @@ -0,0 +1,9 @@ +# SPDX-License-Identifier: CC0-1.0 +# SPDX-FileCopyrightText: none + +# This shadows the file of the same name provided by NVIDIA and instead reads the below environment +# file every time suspend is attempted. This is so SYSTEMD_SLEEP_FREEZE_USER_SESSIONS is only set to +# false when the nvidia kernel module is loaded, unlike the blanket rule shipped by NVIDIA. + +[Service] +EnvironmentFile=-/run/nvidia-no-freeze-session diff --git a/mkosi.extra/usr/lib/udev/rules.d/99-nvidia-no-freeze-session.rules b/mkosi.extra/usr/lib/udev/rules.d/99-nvidia-no-freeze-session.rules new file mode 100644 index 0000000..63f4bdf --- /dev/null +++ b/mkosi.extra/usr/lib/udev/rules.d/99-nvidia-no-freeze-session.rules @@ -0,0 +1,8 @@ +# SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL +# SPDX-FileCopyrightText: none + +# Only runs if the nvidia kernel module is loaded +ACTION=="add", SUBSYSTEM=="module", KERNEL=="nvidia", RUN+="/usr/bin/sh -c 'echo SYSTEMD_SLEEP_FREEZE_USER_SESSIONS=false > /run/nvidia-no-freeze-session'" + +# Clean up if the module is unloaded +ACTION=="remove", SUBSYSTEM=="module", KERNEL=="nvidia", RUN+="/usr/bin/rm -f /run/nvidia-no-freeze-session"