From f9a21b65a5f37f2f48251f5e31f85707759bfcc4 Mon Sep 17 00:00:00 2001 From: Ben Grande Date: Fri, 9 May 2025 12:31:57 +0200 Subject: [PATCH] Wait for session only if necessary The 'gui' feature is not passed via QubesDB to the qube, if it was, only one service would be necessary. For: https://github.com/QubesOS/qubes-issues/issues/1512 --- debian/qubes-core-agent.install | 1 + qubes-rpc/Makefile | 1 + qubes-rpc/qubes.WaitForRunningSystem | 4 ++++ qubes-rpc/qubes.WaitForSession | 15 ++++++++------- rpm_spec/core-agent.spec.in | 1 + 5 files changed, 15 insertions(+), 7 deletions(-) create mode 100755 qubes-rpc/qubes.WaitForRunningSystem diff --git a/debian/qubes-core-agent.install b/debian/qubes-core-agent.install index 78748c234..0cf9e04d4 100644 --- a/debian/qubes-core-agent.install +++ b/debian/qubes-core-agent.install @@ -37,6 +37,7 @@ etc/qubes-rpc/qubes.VMRootShell etc/qubes-rpc/qubes.VMExec etc/qubes-rpc/qubes.VMExecGUI etc/qubes-rpc/qubes.WaitForSession +etc/qubes-rpc/qubes.WaitForRunningSystem etc/qubes-rpc/qubes.GetDate etc/qubes-suspend-module-blacklist etc/qubes/autostart/* diff --git a/qubes-rpc/Makefile b/qubes-rpc/Makefile index d9431f679..88120d9a8 100644 --- a/qubes-rpc/Makefile +++ b/qubes-rpc/Makefile @@ -77,6 +77,7 @@ install: qubes.SuspendPreAll \ qubes.SuspendPostAll \ qubes.WaitForSession \ + qubes.WaitForRunningSystem \ qubes.DetachPciDevice \ qubes.Backup qubes.Restore \ qubes.RegisterBackupLocation \ diff --git a/qubes-rpc/qubes.WaitForRunningSystem b/qubes-rpc/qubes.WaitForRunningSystem new file mode 100755 index 000000000..6c419a1de --- /dev/null +++ b/qubes-rpc/qubes.WaitForRunningSystem @@ -0,0 +1,4 @@ +#!/bin/sh +set -eu +systemctl --wait --quiet is-system-running +exit 0 diff --git a/qubes-rpc/qubes.WaitForSession b/qubes-rpc/qubes.WaitForSession index 0884a6da8..c904a2a7e 100755 --- a/qubes-rpc/qubes.WaitForSession +++ b/qubes-rpc/qubes.WaitForSession @@ -1,11 +1,12 @@ #!/bin/sh - -USERNAME="$(qubesdb-read /default-user || echo 'user')" - -while ! [ -e "/var/run/qubes/qrexec-server.$USERNAME.sock" ] -do - sleep 0.1 -done +set -eu + +if test "$(qubesdb-read /qubes-gui-enabled)" = "True"; then + user="$(qubesdb-read /default-user || echo 'user')" + while ! [ -e "/var/run/qubes/qrexec-server.$user.sock" ]; do + sleep 0.1 + done +fi systemctl --user --wait --quiet is-system-running diff --git a/rpm_spec/core-agent.spec.in b/rpm_spec/core-agent.spec.in index 53469bc1a..925628a11 100644 --- a/rpm_spec/core-agent.spec.in +++ b/rpm_spec/core-agent.spec.in @@ -917,6 +917,7 @@ rm -f %{name}-%{version} %config(noreplace) /etc/qubes-rpc/qubes.SuspendPost %config(noreplace) /etc/qubes-rpc/qubes.SuspendPostAll %config(noreplace) /etc/qubes-rpc/qubes.WaitForSession +%config(noreplace) /etc/qubes-rpc/qubes.WaitForRunningSystem %config(noreplace) /etc/qubes-rpc/qubes.DetachPciDevice %config(noreplace) /etc/qubes-rpc/qubes.Backup %config(noreplace) /etc/qubes-rpc/qubes.Restore