Skip to content

Conversation

@marmarek
Copy link
Member

For VMs started before user logs in, notification server is not running
at the VM session startup time yet. Instead of failing to start, wait
for the session to become available.

@DemiMarie
Copy link
Contributor

LGTM

For VMs started before user logs in, notification server is not running
at the VM session startup time yet. Instead of failing to start, wait
for the session to become available.
@qubesos-bot
Copy link

qubesos-bot commented Nov 23, 2025

OpenQA test summary

Complete test suite and dependencies: https://openqa.qubes-os.org/tests/overview?distri=qubesos&version=4.3&build=2025112313-4.3&flavor=pull-requests

Test run included the following:

Upload failures

  • system_tests_basic_vm_qrexec_gui

    • system_tests: Failed (test died)
      # Test died: command 'curl --form upload=@tests-qubes.tests.integ.b...
  • system_tests_splitgpg

    • system_tests: wait_serial (wait serial expected)
      # wait_serial expected: qr/ELtBH-\d+-/...

    • system_tests: Failed (test died + timed out)
      # Test died: command 'testfunc qubes.tests.extra' timed out at qube...

New failures, excluding unstable

Compared to: https://openqa.qubes-os.org/tests/overview?distri=qubesos&version=4.3&build=2025111104-4.3&flavor=update

  • system_tests_whonix

    • whonixcheck: fail (unknown)
      Whonixcheck for whonix-gateway-18 failed...

    • whonixcheck: Failed (test died)
      # Test died: systemcheck failed at qubesos/tests/whonixcheck.pm lin...

  • system_tests_extra

    • TC_00_InputProxy_debian-13-xfce: test_050_mouse_late_attach (failure)
      AssertionError: unexpectedly None : Device 'test-inst-input: Test i...

    • TC_00_InputProxy_fedora-42-xfce: test_050_mouse_late_attach (failure)
      AssertionError: unexpectedly None : Device 'test-inst-input: Test i...

  • system_tests_gui_interactive

    • collect_logs: wait_serial (wait serial expected)
      # wait_serial expected: qr/ENc9B-\d+-/...

    • collect_logs: Failed (test died + timed out)
      # Test died: command 'curl --form upload=@journalctl.log --form upn...

    • collect_logs: wait_serial (wait serial expected)
      # wait_serial expected: qr/viJg8-\d+-/...

  • system_tests_network_ipv6

  • system_tests_dispvm

  • system_tests_audio

    • TC_20_AudioVM_Pulse_whonix-workstation-18: test_225_audio_rec_unmuted_hvm (failure)
      AssertionError: too short audio, expected 10s, got 7.56167800453514...
  • system_tests_qwt_win10_seamless@hw13

    • windows_install: Failed (test died)
      # Test died: command 'script -e -c 'bash -x /usr/bin/qvm-create-win...
  • system_tests_gui_interactive_preloaded

    • collect_logs: wait_serial (wait serial expected)
      # wait_serial expected: qr/JXyk1-\d+-/...

    • collect_logs: Failed (test died + timed out)
      # Test died: command 'curl --form upload=@journalctl.log --form upn...

    • collect_logs: wait_serial (wait serial expected)
      # wait_serial expected: qr/MR7i0-\d+-/...

  • system_tests_dispvm_perf@hw7

  • system_tests_guivm_vnc_gui_interactive

    • guivm_manager: unnamed test (unknown)

    • guivm_manager: Stall detected (unknown)
      Stall was detected during assert_screen fail...

    • guivm_manager: Failed (test died)
      # Test died: no candidate needle with tag(s) 'vm-settings-applicati...

Failed tests

25 failures
  • system_tests_whonix

    • whonixcheck: fail (unknown)
      Whonixcheck for whonix-gateway-18 failed...

    • whonixcheck: Failed (test died)
      # Test died: systemcheck failed at qubesos/tests/whonixcheck.pm lin...

  • system_tests_extra

    • TC_00_InputProxy_debian-13-xfce: test_050_mouse_late_attach (failure)
      AssertionError: unexpectedly None : Device 'test-inst-input: Test i...

    • TC_00_InputProxy_fedora-42-xfce: test_050_mouse_late_attach (failure)
      AssertionError: unexpectedly None : Device 'test-inst-input: Test i...

  • system_tests_gui_interactive

    • collect_logs: wait_serial (wait serial expected)
      # wait_serial expected: qr/ENc9B-\d+-/...

    • collect_logs: Failed (test died + timed out)
      # Test died: command 'curl --form upload=@journalctl.log --form upn...

    • collect_logs: wait_serial (wait serial expected)
      # wait_serial expected: qr/viJg8-\d+-/...

  • system_tests_network_ipv6

  • system_tests_dispvm

  • system_tests_audio

    • TC_20_AudioVM_Pulse_whonix-workstation-18: test_225_audio_rec_unmuted_hvm (failure)
      AssertionError: too short audio, expected 10s, got 7.56167800453514...
  • system_tests_qwt_win10_seamless@hw13

    • windows_install: Failed (test died)
      # Test died: command 'script -e -c 'bash -x /usr/bin/qvm-create-win...
  • system_tests_qwt_win11@hw13

    • windows_install: wait_serial (wait serial expected)
      # wait_serial expected: qr/iDVvW-\d+-/...

    • windows_install: Failed (test died + timed out)
      # Test died: command 'script -e -c 'bash -x /usr/bin/qvm-create-win...

  • system_tests_gui_interactive_preloaded

    • collect_logs: wait_serial (wait serial expected)
      # wait_serial expected: qr/JXyk1-\d+-/...

    • collect_logs: Failed (test died + timed out)
      # Test died: command 'curl --form upload=@journalctl.log --form upn...

    • collect_logs: wait_serial (wait serial expected)
      # wait_serial expected: qr/MR7i0-\d+-/...

  • system_tests_dispvm_perf@hw7

  • system_tests_guivm_vnc_gui_interactive

    • guivm_manager: unnamed test (unknown)

    • guivm_manager: Stall detected (unknown)
      Stall was detected during assert_screen fail...

    • guivm_manager: Failed (test died)
      # Test died: no candidate needle with tag(s) 'vm-settings-applicati...

  • system_tests_whonix@hw7

    • whonixcheck: fail (unknown)
      Whonixcheck for sys-whonix failed...

    • whonixcheck: Failed (test died)
      # Test died: systemcheck failed at qubesos/tests/whonixcheck.pm lin...

Fixed failures

Compared to: https://openqa.qubes-os.org/tests/158999#dependencies

17 fixed
  • system_tests_extra

    • TC_00_QVCTest_debian-13-xfce: test_010_screenshare (failure + cleanup)
      AssertionError: 2.4614345149565264 not less than 2.0

    • TC_00_QVCTest_whonix-gateway-18: test_010_screenshare (failure)
      AssertionError: 1 != 0 : Timeout waiting for /dev/video0 in test-in...

    • TC_00_QVCTest_whonix-workstation-18: test_010_screenshare (failure)
      AssertionError: 1 != 0 : Timeout waiting for /dev/video0 in test-in...

  • system_tests_guivm_gui_interactive

    • gui_keyboard_layout: unnamed test (unknown)
    • gui_keyboard_layout: Failed (test died)
      # Test died: no candidate needle with tag(s) 'work-xterm, work-xter...
  • system_tests_dispvm

    • TC_20_DispVM_whonix-workstation-18: test_030_edit_file (failure)
      AssertionError: Timeout waiting for editor window

    • TC_20_DispVM_whonix-workstation-18: test_100_open_in_dispvm (failure)
      AssertionError: './open-file test.txt' failed with ./open-file test...

  • system_tests_qwt_win10@hw13

    • windows_install: wait_serial (wait serial expected)
      # wait_serial expected: qr/kauF4-\d+-/...

    • windows_install: Failed (test died + timed out)
      # Test died: command 'script -e -c 'bash -x /usr/bin/qvm-create-win...

  • system_tests_qwt_win10_seamless@hw13

    • windows_clipboard_and_filecopy: unnamed test (unknown)
    • windows_clipboard_and_filecopy: Failed (test died)
      # Test died: no candidate needle with tag(s) 'windows-Edge-address-...
  • system_tests_dispvm_perf@hw7

    • TC_00_DispVMPerf_debian-13-xfce: test_411_dom0_dispvm_preload_gui_concurrent_api (failure)
      AssertionError: '/usr/lib/qubes/tests/dispvm_perf.py --dvm=test-ins...

    • TC_00_DispVMPerf_debian-13-xfce: test_900_reader (failure)
      AssertionError: '/usr/lib/qubes/tests/dispvm_perf_reader.py --templ...

    • TC_00_DispVMPerf_whonix-workstation-18: test_409_dom0_dispvm_preload_gui_api (failure)
      AssertionError: '/usr/lib/qubes/tests/dispvm_perf.py --dvm=test-ins...

    • TC_00_DispVMPerf_whonix-workstation-18: test_900_reader (failure)
      AssertionError: '/usr/lib/qubes/tests/dispvm_perf_reader.py --templ...

  • system_tests_guivm_vnc_gui_interactive

    • gui_filecopy: unnamed test (unknown)
    • gui_filecopy: Failed (test died)
      # Test died: no candidate needle with tag(s) 'disp-text-editor' mat...

Unstable tests

Details

Performance Tests

Performance degradation:

21 performance degradations
  • debian-13-xfce_vm-dispvm-preload-gui-concurrent (mean:4.128): 49.53 🔻 ( previous job: 43.08, degradation: 114.99%)
  • debian-13-xfce_dom0-dispvm-preload (mean:3.885): 46.62 🔻 ( previous job: 42.37, degradation: 110.04%)
  • debian-13-xfce_dom0-dispvm-preload-gui-concurrent (mean:4.039): 48.47 🔻 ( previous job: 43.55, degradation: 111.31%)
  • debian-13-xfce_dom0-dispvm-preload-less-api (mean:4.137): 49.65 🔻 ( previous job: 44.71, degradation: 111.04%)
  • debian-13-xfce_dom0-dispvm-preload-api (mean:3.909): 46.91 🔻 ( previous job: 42.30, degradation: 110.91%)
  • debian-13-xfce_dom0-dispvm-preload-more-api (mean:4.142): 49.70 🔻 ( previous job: 44.67, degradation: 111.26%)
  • debian-13-xfce_dom0-dispvm-preload-concurrent-api (mean:3.332): 39.99 🔻 ( previous job: 35.79, degradation: 111.72%)
  • debian-13-xfce_vm-vm (mean:0.036): 0.43 🔻 ( previous job: 0.39, degradation: 110.54%)
  • debian-13-xfce_vm-vm-gui (mean:0.038): 0.45 🔻 ( previous job: 0.37, degradation: 122.16%)
  • debian-13-xfce_vm-vm-concurrent (mean:0.022): 0.26 🔻 ( previous job: 0.15, degradation: 170.32%)
  • debian-13-xfce_vm-vm-gui-concurrent (mean:0.028): 0.33 🔻 ( previous job: 0.30, degradation: 111.11%)
  • debian-13-xfce_dom0-vm-gui-api (mean:0.054): 0.64 🔻 ( previous job: 0.58, degradation: 111.05%)
  • fedora-42-xfce_vm-dispvm-preload-concurrent (mean:3.229): 38.75 🔻 ( previous job: 33.59, degradation: 115.36%)
  • fedora-42-xfce_dom0-dispvm-preload-concurrent (mean:4.072): 48.87 🔻 ( previous job: 40.81, degradation: 119.73%)
  • fedora-42-xfce_vm-vm-concurrent (mean:0.02): 0.24 🔻 ( previous job: 0.14, degradation: 165.03%)
  • fedora-42-xfce_dom0-vm-api (mean:0.038): 0.46 🔻 ( previous job: 0.39, degradation: 117.86%)
  • whonix-workstation-18_vm-dispvm-preload-concurrent (mean:4.6): 55.20 🔻 ( previous job: 48.80, degradation: 113.12%)
  • whonix-workstation-18_dom0-dispvm-preload-concurrent-api (mean:5.384): 64.61 🔻 ( previous job: 55.58, degradation: 116.24%)
  • whonix-workstation-18_vm-vm-gui (mean:0.067): 0.80 🔻 ( previous job: 0.60, degradation: 134.06%)
  • whonix-workstation-18_vm-vm-gui-concurrent (mean:0.031): 0.38 🔻 ( previous job: 0.26, degradation: 142.97%)
  • whonix-workstation-18_dom0-vm-gui-api (mean:0.062): 0.75 🔻 ( previous job: 0.45, degradation: 166.37%)

Remaining performance tests:

85 tests
  • debian-13-xfce_vm-dispvm (mean:6.385): 76.62 🟢 ( previous job: 77.37, improvement: 99.03%)
  • debian-13-xfce_vm-dispvm-gui (mean:7.229): 86.75 🟢 ( previous job: 90.06, improvement: 96.31%)
  • debian-13-xfce_vm-dispvm-concurrent (mean:3.203): 38.43 🔻 ( previous job: 37.20, degradation: 103.31%)
  • debian-13-xfce_vm-dispvm-gui-concurrent (mean:4.024): 48.28 🔻 ( previous job: 46.42, degradation: 104.01%)
  • debian-13-xfce_dom0-dispvm (mean:6.91): 82.92 🔻 ( previous job: 81.57, degradation: 101.65%)
  • debian-13-xfce_dom0-dispvm-gui (mean:8.222): 98.67 🔻 ( previous job: 97.80, degradation: 100.89%)
  • debian-13-xfce_dom0-dispvm-concurrent (mean:3.227): 38.72 🟢 ( previous job: 39.05, improvement: 99.15%)
  • debian-13-xfce_dom0-dispvm-gui-concurrent (mean:3.938): 47.26 🟢 ( previous job: 49.35, improvement: 95.76%)
  • debian-13-xfce_vm-dispvm-preload (mean:2.804): 33.65 🟢 ( previous job: 33.80, improvement: 99.55%)
  • debian-13-xfce_vm-dispvm-preload-gui (mean:3.943): 47.32 🔻 ( previous job: 45.44, degradation: 104.13%)
  • debian-13-xfce_vm-dispvm-preload-concurrent (mean:2.783): 33.39 🔻 ( previous job: 30.73, degradation: 108.66%)
  • debian-13-xfce_dom0-dispvm-preload-gui (mean:4.37): 52.45 🟢 ( previous job: 52.97, improvement: 99.01%)
  • debian-13-xfce_dom0-dispvm-preload-concurrent (mean:3.326): 39.91 🔻 ( previous job: 37.83, degradation: 105.51%)
  • debian-13-xfce_dom0-dispvm-api (mean:7.248): 86.97 🔻 ( previous job: 84.68, degradation: 102.72%)
  • debian-13-xfce_dom0-dispvm-gui-api (mean:8.189): 98.27 🟢 ( previous job: 98.62, improvement: 99.64%)
  • debian-13-xfce_dom0-dispvm-concurrent-api (mean:3.442): 41.30 🔻 ( previous job: 40.02, degradation: 103.21%)
  • debian-13-xfce_dom0-dispvm-gui-concurrent-api (mean:4.082): 48.99 🔻 ( previous job: 47.52, degradation: 103.10%)
  • debian-13-xfce_dom0-dispvm-preload-less-less-api (mean:3.879): 46.54 🔻 ( previous job: 45.22, degradation: 102.92%)
  • debian-13-xfce_dom0-dispvm-preload-more-more-api (mean:3.736): 44.84 🔻 ( previous job: 41.62, degradation: 107.72%)
  • debian-13-xfce_dom0-dispvm-preload-gui-api (mean:4.271): 51.25 🟢 ( previous job: 53.96, improvement: 94.98%)
  • debian-13-xfce_dom0-dispvm-preload-gui-concurrent-api (mean:3.901): 46.81
  • debian-13-xfce_dom0-vm-api (mean:0.038): 0.46 🟢 ( previous job: 0.59, improvement: 77.50%)
  • debian-13-xfce_dom0-vm-concurrent-api (mean:0.026): 0.31 🔻 ( previous job: 0.30, degradation: 101.65%)
  • debian-13-xfce_dom0-vm-gui-concurrent-api (mean:0.031): 0.37 🔻 ( previous job: 0.34, degradation: 109.38%)
  • fedora-42-xfce_vm-dispvm (mean:7.179): 86.15 🔻 ( previous job: 85.63, degradation: 100.60%)
  • fedora-42-xfce_vm-dispvm-gui (mean:8.303): 99.63 🟢 ( previous job: 102.18, improvement: 97.51%)
  • fedora-42-xfce_vm-dispvm-concurrent (mean:3.865): 46.37 🔻 ( previous job: 43.11, degradation: 107.58%)
  • fedora-42-xfce_vm-dispvm-gui-concurrent (mean:4.484): 53.80 🔻 ( previous job: 52.51, degradation: 102.47%)
  • fedora-42-xfce_dom0-dispvm (mean:7.566): 90.79 🟢 ( previous job: 91.92, improvement: 98.78%)
  • fedora-42-xfce_dom0-dispvm-gui (mean:8.797): 105.56 🟢 ( previous job: 108.46, improvement: 97.33%)
  • fedora-42-xfce_dom0-dispvm-concurrent (mean:3.855): 46.26 🔻 ( previous job: 44.99, degradation: 102.81%)
  • fedora-42-xfce_dom0-dispvm-gui-concurrent (mean:4.606): 55.27 🔻 ( previous job: 53.77, degradation: 102.79%)
  • fedora-42-xfce_vm-dispvm-preload (mean:3.328): 39.94 🔻 ( previous job: 37.87, degradation: 105.45%)
  • fedora-42-xfce_vm-dispvm-preload-gui (mean:4.134): 49.61 🟢 ( previous job: 50.03, improvement: 99.16%)
  • fedora-42-xfce_vm-dispvm-preload-gui-concurrent (mean:3.854): 46.25 🔻 ( previous job: 43.85, degradation: 105.49%)
  • fedora-42-xfce_dom0-dispvm-preload (mean:4.139): 49.67 🔻 ( previous job: 48.05, degradation: 103.38%)
  • fedora-42-xfce_dom0-dispvm-preload-gui (mean:4.69): 56.28 🟢 ( previous job: 58.25, improvement: 96.62%)
  • fedora-42-xfce_dom0-dispvm-preload-gui-concurrent (mean:4.101): 49.21 🟢 ( previous job: 69.71, improvement: 70.59%)
  • fedora-42-xfce_dom0-dispvm-api (mean:7.799): 93.59 🔻 ( previous job: 89.70, degradation: 104.33%)
  • fedora-42-xfce_dom0-dispvm-gui-api (mean:8.986): 107.83 🔻 ( previous job: 107.00, degradation: 100.78%)
  • fedora-42-xfce_dom0-dispvm-concurrent-api (mean:3.76): 45.13 🔻 ( previous job: 44.44, degradation: 101.54%)
  • fedora-42-xfce_dom0-dispvm-gui-concurrent-api (mean:4.337): 52.05 🟢 ( previous job: 54.99, improvement: 94.64%)
  • fedora-42-xfce_dom0-dispvm-preload-less-less-api (mean:4.433): 53.19 🔻 ( previous job: 51.37, degradation: 103.54%)
  • fedora-42-xfce_dom0-dispvm-preload-less-api (mean:4.5): 54.00 🔻 ( previous job: 51.28, degradation: 105.29%)
  • fedora-42-xfce_dom0-dispvm-preload-api (mean:4.199): 50.38 🔻 ( previous job: 48.45, degradation: 104.00%)
  • fedora-42-xfce_dom0-dispvm-preload-more-api (mean:4.317): 51.81 🔻 ( previous job: 49.50, degradation: 104.67%)
  • fedora-42-xfce_dom0-dispvm-preload-more-more-api (mean:4.059): 48.70 🔻 ( previous job: 46.74, degradation: 104.20%)
  • fedora-42-xfce_dom0-dispvm-preload-gui-api (mean:4.67): 56.04 🟢 ( previous job: 59.30, improvement: 94.51%)
  • fedora-42-xfce_dom0-dispvm-preload-concurrent-api (mean:3.756): 45.07 🔻 ( previous job: 42.15, degradation: 106.93%)
  • fedora-42-xfce_dom0-dispvm-preload-gui-concurrent-api (mean:4.182): 50.19 🔻 ( previous job: 49.18, degradation: 102.04%)
  • fedora-42-xfce_vm-vm (mean:0.03): 0.36 🔻 ( previous job: 0.34, degradation: 104.68%)
  • fedora-42-xfce_vm-vm-gui (mean:0.037): 0.44 🔻 ( previous job: 0.40, degradation: 109.48%)
  • fedora-42-xfce_vm-vm-gui-concurrent (mean:0.023): 0.28 🟢 ( previous job: 0.35, improvement: 78.35%)
  • fedora-42-xfce_dom0-vm-gui-api (mean:0.036): 0.43 🟢 ( previous job: 0.54, improvement: 79.63%)
  • fedora-42-xfce_dom0-vm-concurrent-api (mean:0.029): 0.35 🟢 ( previous job: 0.39, improvement: 91.17%)
  • fedora-42-xfce_dom0-vm-gui-concurrent-api (mean:0.031): 0.37 🟢 ( previous job: 0.38, improvement: 97.38%)
  • whonix-workstation-18_vm-dispvm (mean:8.951): 107.41 🟢 ( previous job: 108.77, improvement: 98.75%)
  • whonix-workstation-18_vm-dispvm-gui (mean:9.842): 118.11 🟢 ( previous job: 122.74, improvement: 96.23%)
  • whonix-workstation-18_vm-dispvm-concurrent (mean:4.951): 59.41 🟢 ( previous job: 65.23, improvement: 91.09%)
  • whonix-workstation-18_vm-dispvm-gui-concurrent (mean:5.33): 63.97 🟢 ( previous job: 67.13, improvement: 95.29%)
  • whonix-workstation-18_dom0-dispvm (mean:9.667): 116.00 🟢 ( previous job: 117.05, improvement: 99.11%)
  • whonix-workstation-18_dom0-dispvm-gui (mean:10.62): 127.44 🟢 ( previous job: 132.80, improvement: 95.97%)
  • whonix-workstation-18_dom0-dispvm-concurrent (mean:5.234): 62.80 🔻 ( previous job: 60.96, degradation: 103.02%)
  • whonix-workstation-18_dom0-dispvm-gui-concurrent (mean:5.369): 64.43 🟢 ( previous job: 68.25, improvement: 94.40%)
  • whonix-workstation-18_vm-dispvm-preload (mean:4.039): 48.47 🔻 ( previous job: 47.12, degradation: 102.86%)
  • whonix-workstation-18_vm-dispvm-preload-gui (mean:4.537): 54.44 🟢 ( previous job: 63.65, improvement: 85.53%)
  • whonix-workstation-18_vm-dispvm-preload-gui-concurrent (mean:4.815): 57.78 🔻 ( previous job: 56.11, degradation: 102.98%)
  • whonix-workstation-18_dom0-dispvm-preload (mean:4.861): 58.34 🟢 ( previous job: 61.61, improvement: 94.69%)
  • whonix-workstation-18_dom0-dispvm-preload-gui (mean:5.847): 70.16 🟢 ( previous job: 73.22, improvement: 95.82%)
  • whonix-workstation-18_dom0-dispvm-preload-concurrent (mean:4.597): 55.17 🔻 ( previous job: 53.21, degradation: 103.68%)
  • whonix-workstation-18_dom0-dispvm-preload-gui-concurrent (mean:4.8): 57.60 🟢 ( previous job: 61.72, improvement: 93.33%)
  • whonix-workstation-18_dom0-dispvm-api (mean:9.66): 115.92 🟢 ( previous job: 117.52, improvement: 98.64%)
  • whonix-workstation-18_dom0-dispvm-gui-api (mean:10.663): 127.96 🟢 ( previous job: 130.38, improvement: 98.15%)
  • whonix-workstation-18_dom0-dispvm-concurrent-api (mean:4.806): 57.67 🟢 ( previous job: 60.98, improvement: 94.58%)
  • whonix-workstation-18_dom0-dispvm-gui-concurrent-api (mean:5.439): 65.27 🔻 ( previous job: 64.99, degradation: 100.43%)
  • whonix-workstation-18_dom0-dispvm-preload-less-less-api (mean:5.724): 68.69 🔻 ( previous job: 65.85, degradation: 104.31%)
  • whonix-workstation-18_dom0-dispvm-preload-less-api (mean:5.604): 67.25 🟢 ( previous job: 70.09, improvement: 95.94%)
  • whonix-workstation-18_dom0-dispvm-preload-api (mean:5.282): 63.38 🟢 ( previous job: 65.30, improvement: 97.07%)
  • whonix-workstation-18_dom0-dispvm-preload-gui-api (mean:5.695): 68.34
  • whonix-workstation-18_dom0-dispvm-preload-gui-concurrent-api (mean:5.429): 65.14 🔻 ( previous job: 61.70, degradation: 105.59%)
  • whonix-workstation-18_vm-vm (mean:0.055): 0.66 🟢 ( previous job: 0.74, improvement: 89.10%)
  • whonix-workstation-18_vm-vm-concurrent (mean:0.028): 0.33 🔻 ( previous job: 0.32, degradation: 101.85%)
  • whonix-workstation-18_dom0-vm-api (mean:0.042): 0.50 🟢 ( previous job: 0.60, improvement: 82.95%)
  • whonix-workstation-18_dom0-vm-concurrent-api (mean:0.026): 0.31 🟢 ( previous job: 0.42, improvement: 73.68%)
  • whonix-workstation-18_dom0-vm-gui-concurrent-api (mean:0.037): 0.44 🟢 ( previous job: 0.53, improvement: 83.30%)

@ben-grande
Copy link

This seems to be preventing the qubes-notification-agent to start for preloaded disposables, where the guid file doesn't exist before it is used.

ben-grande added a commit to ben-grande/qubes-core-qrexec that referenced this pull request Dec 1, 2025
By default, it resolves the link path literally, which causes problem if
other commands do not run on the same directory the link is at.

For: QubesOS/qubes-core-admin#757
For: QubesOS/qubes-notification-proxy#13
For: QubesOS/qubes-issues#9940
For: QubesOS/qubes-issues#1512
ben-grande added a commit to ben-grande/qubes-core-qrexec that referenced this pull request Dec 1, 2025
By default, it resolves the link path literally, which causes problem if
other commands do not run on the same directory the link is at.

For: QubesOS/qubes-core-admin#757
For: QubesOS/qubes-notification-proxy#13
For: QubesOS/qubes-issues#9940
For: QubesOS/qubes-issues#1512
@ben-grande
Copy link

For VMs started before user logs in, notification server is not running
at the VM session startup time yet. Instead of failing to start, wait
for the session to become available.

I think this was not the correct solution. It tries to find the guid of the client on the server, but that fails for:

  • preloaded disposables as there is no session at that stage
  • qubes that have disabled gui feature or emptied guivm property

I think that both cases should work and not block starting qubes-notification-agent.

Instead, it should wait only for the session of the server itself. Possibly, an

ExecStartPre=qrexec-client-vm @adminvm qubes.WaitForSession+dom0

And if QREXEC_SERVICE_ARGUMENT is set, use it instead of QREXEC_REMOTE_DOMAIN on dom0 /etc/qubes-rpc/qubes.WaitForSession.

@ben-grande
Copy link

ben-grande commented Dec 1, 2025

ExecStartPre=qrexec-client-vm @adminvm qubes.WaitForSession+dom0

Instead of hardcoding the argument, it should use the xid from qubesdb's qubes-gui-domain-xid. Unfortunately, there is no @guivm token as destination, so I don't know how to solve that for different GUI domains on the policy side except using @tag:guivm- for each GUIVM.

@marmarek
Copy link
Member Author

marmarek commented Dec 1, 2025

I think it should allow just any name as the argument, maybe just distinguish between "wait for gui daemon for this qube" and "wait for user session in guivm of this qube" - which means it can be any arbitrary argument value, like user-session or local-user or something.
As for the call target, it can be @adminvm, or @default, and if guivm is used, the policy can redirect it like this:

qubes.WaitForSession * @tag:guivm-sys-gui @default allow target=sys-gui

Tag-based policy redirection is a thing there anyway (notifications service itself is done this way for example): https://github.com/QubesOS/qubes-mgmt-salt-dom0-virtual-machines/blob/main/qvm/template-gui.jinja

@ben-grande
Copy link

ben-grande commented Dec 2, 2025

The guid-running check is on dom0 only on qubes-core-qrexec/qubes-rpc-dom0/qubes.WaitForSession. GUIVMs uses domUs qubes-core-agent-linux/qubes-rpc/qubes.WaitForSession. I think the qubes.WaitForSession is on qubes-core-qrexec because it is used for some tests there, but ideally, it would be on qubes-gui-daemon, just as qubes.WindowIconUpdater and qubes.ClipboardPaste is. Please let me know what you think of the packaging, will probably have to deal with conflicts, I will deal with having a script that servers both cases for now.

@ben-grande
Copy link

I think it should allow just any name as the argument, maybe just distinguish between "wait for gui daemon for this qube" and "wait for user session in guivm of this qube" - which means it can be any arbitrary argument value, like user-session or local-user or something.

I think it should default to the target's session and if any argument is provided or a select argument such as guid, it tries to get the client guid. Currently wait-for-session get's the GUID of the client when there is no argument:

QREXEC_REMOTE_DOMAIN=client /etc/qubes-rpc/qubes.WaitForSession

I think this is wrong, only dom0 does that while domUs waits for the session / gui-agent to be ready. Instead, wait-for-session remains the same script, but the behavior will be different, it will get the target's session by default, which is already the case for everything non-dom0, including other GUIVMs.

Currently:

# - Client requests GUIVM for client's guid with wait-for-session=1, which
#   runs: QREXEC_REMOTE_DOMAIN=client /etc/qubes-rpc/qubes.WaitForSession
#   on dom0.  Which is equivalent to:
qubes.WaitForSession *       @tag:guivm-dom0    @default allow target=dom0
# - Client requests GUIVM for GUIVM's session fails on dom0, it tries to get the
#   client's GUID file. Only works on non-dom0 GUIVM, which then doesn't allow
#   getting the client's GUID file.
# - Client requests another VM for it's session
qubes.WaitForSession *       client             client2  allow

Proposed:

# - Client requests GUIVM for client's guid
qubes.WaitForSession +guid   @tag:guivm-dom0    @default allow target=dom0
# - Client requests GUIVM for GUIVM's session
qubes.WaitForSession +       @tag:guivm-dom0    @default allow target=dom0
# - Client requests another VM for it's session
qubes.WaitForSession +       client             client2  allow
Some examples of which services uses "wait-for-session".

qubes-core-qrexec/qubes-rpc-config/README
84:    *   Example: wait-for-session=true

qubes-core-qrexec/qrexec/tests/socket/daemon.py
1226:            f.write("wait-for-session=1")

qubes-core-qrexec/doc/execution.rst
63:   ``wait-for-session=true`` in the service configuration file to be ignored.

qubes-video-companion/Makefile
41:     echo 'wait-for-session=1' > $(DESTDIR)$(SYSCONFDIR)/qubes/rpc-config/qvc.Webcam
42:     echo 'wait-for-session=1' > $(DESTDIR)$(SYSCONFDIR)/qubes/rpc-config/qvc.ScreenShare

qubes-core-agent-linux/debian/changelog
2441:  * Set 'wait-for-session=1' for 'qubes.VMShell+WaitForSession'
2666:  * qubes-rpc: add 'wait-for-session=1' option for some services

qubes-core-agent-linux/qubes-rpc/qubes.OpenInVM.config
1:wait-for-session=1

qubes-core-agent-linux/qubes-rpc/qubes.ShowInTerminal.config
1:wait-for-session=1

qubes-core-agent-linux/qubes-rpc/qubes.OpenURL.config
1:wait-for-session=1

qubes-core-agent-linux/qubes-rpc/qubes.SelectFile.config
1:wait-for-session=1

qubes-core-agent-linux/qubes-rpc/qubes.VMShell+WaitForSession.config
1:wait-for-session=1

qubes-core-agent-linux/qubes-rpc/qubes.VMExecGUI.config
1:wait-for-session=1

qubes-core-agent-linux/qubes-rpc/qubes.SelectDirectory.config
1:wait-for-session=1

qubes-core-agent-linux/qubes-rpc/qubes.StartApp.config
1:wait-for-session=1

qubes-core-agent-linux/qubes-rpc/qubes.InstallUpdatesGUI.config
1:wait-for-session=1

qubes-gui-daemon/window-icon-updater/qubes.WindowIconUpdater.config
1:wait-for-session=1

All of them seems related to the session of the target, not the guid of the client.

@marmarek
Copy link
Member Author

marmarek commented Dec 2, 2025

Makes sense. Most cases are about dom0/sys-gui calling into target VM, very few do the call the other way around. And yes, even those few usually want the user session, not really gui-daemon connection.

In fact, the cases waiting for gui-daemon connection could ask gui-agent about that (there is no API for that right now, but the information is there).

ben-grande added a commit to ben-grande/qubes-mgmt-salt-dom0-virtual-machines that referenced this pull request Dec 2, 2025
ben-grande added a commit to ben-grande/qubes-core-qrexec that referenced this pull request Dec 2, 2025
Or if GUID of the client can be found on the server. This script will be
replicated to qubes-core-agent-linux.

For: QubesOS/qubes-notification-proxy#13
For: QubesOS/qubes-gui-agent-linux#251
For: QubesOS/qubes-core-admin#757
For: QubesOS/qubes-issues#1512
For: QubesOS/qubes-issues#9940
Fixes: QubesOS/qubes-issues#10443
ben-grande added a commit to ben-grande/qubes-core-agent-linux that referenced this pull request Dec 2, 2025
ben-grande added a commit to ben-grande/qubes-core-qrexec that referenced this pull request Dec 2, 2025
Or if GUID of the client can be found on the server. This script will be
replicated to qubes-core-agent-linux.

For: QubesOS/qubes-notification-proxy#13
For: QubesOS/qubes-gui-agent-linux#251
For: QubesOS/qubes-core-admin#757
For: QubesOS/qubes-issues#1512
For: QubesOS/qubes-issues#9940
Fixes: QubesOS/qubes-issues#10443
ben-grande added a commit to ben-grande/qubes-core-agent-linux that referenced this pull request Dec 2, 2025
ben-grande added a commit to ben-grande/qubes-core-qrexec that referenced this pull request Dec 2, 2025
Or if GUID of the client can be found on the server. This script will be
replicated to qubes-core-agent-linux.

For: QubesOS/qubes-notification-proxy#13
For: QubesOS/qubes-gui-agent-linux#251
For: QubesOS/qubes-core-admin#757
For: QubesOS/qubes-issues#1512
For: QubesOS/qubes-issues#9940
Fixes: QubesOS/qubes-issues#10443
ben-grande added a commit to ben-grande/qubes-core-agent-linux that referenced this pull request Dec 2, 2025
ben-grande added a commit to ben-grande/qubes-core-agent-linux that referenced this pull request Dec 3, 2025
ben-grande added a commit to ben-grande/qubes-core-qrexec that referenced this pull request Dec 3, 2025
Or if GUID of the client can be found on the server. This script will be
replicated to qubes-core-agent-linux.

For: QubesOS/qubes-notification-proxy#13
For: QubesOS/qubes-gui-agent-linux#251
For: QubesOS/qubes-core-admin#757
For: QubesOS/qubes-issues#1512
For: QubesOS/qubes-issues#9940
Fixes: QubesOS/qubes-issues#10443
ben-grande added a commit to ben-grande/qubes-core-qrexec that referenced this pull request Dec 3, 2025
Or if GUID of the client can be found on the server. This script will be
replicated to qubes-core-agent-linux.

For: QubesOS/qubes-notification-proxy#13
For: QubesOS/qubes-gui-agent-linux#251
For: QubesOS/qubes-core-admin#757
For: QubesOS/qubes-issues#1512
For: QubesOS/qubes-issues#9940
Fixes: QubesOS/qubes-issues#10443
ben-grande added a commit to ben-grande/qubes-core-agent-linux that referenced this pull request Dec 3, 2025
ben-grande added a commit to ben-grande/qubes-core-qrexec that referenced this pull request Dec 3, 2025
Or if GUID of the client can be found on the server. This script will be
replicated to qubes-core-agent-linux.

For: QubesOS/qubes-notification-proxy#13
For: QubesOS/qubes-gui-agent-linux#251
For: QubesOS/qubes-core-admin#757
For: QubesOS/qubes-issues#1512
For: QubesOS/qubes-issues#9940
Fixes: QubesOS/qubes-issues#10443
ben-grande added a commit to ben-grande/qubes-core-qrexec that referenced this pull request Dec 3, 2025
Or if GUID of the client can be found on the server. This script will be
replicated to qubes-core-agent-linux.

For: QubesOS/qubes-notification-proxy#13
For: QubesOS/qubes-gui-agent-linux#251
For: QubesOS/qubes-core-admin#757
For: QubesOS/qubes-issues#1512
For: QubesOS/qubes-issues#9940
Fixes: QubesOS/qubes-issues#10443
ben-grande added a commit to ben-grande/qubes-core-agent-linux that referenced this pull request Dec 3, 2025
ben-grande added a commit to ben-grande/qubes-core-qrexec that referenced this pull request Dec 4, 2025
Or if GUID of the client can be found on the server. This script will be
replicated to qubes-core-agent-linux.

For: QubesOS/qubes-notification-proxy#13
For: QubesOS/qubes-gui-agent-linux#251
For: QubesOS/qubes-core-admin#757
For: QubesOS/qubes-issues#1512
For: QubesOS/qubes-issues#9940
Fixes: QubesOS/qubes-issues#10443
ben-grande added a commit to ben-grande/qubes-core-agent-linux that referenced this pull request Dec 4, 2025
ben-grande added a commit to ben-grande/qubes-core-qrexec that referenced this pull request Dec 4, 2025
Or if GUID of the client can be found on the server. This script will be
replicated to qubes-core-agent-linux.

For: QubesOS/qubes-notification-proxy#13
For: QubesOS/qubes-gui-agent-linux#251
For: QubesOS/qubes-core-admin#757
For: QubesOS/qubes-issues#1512
For: QubesOS/qubes-issues#9940
Fixes: QubesOS/qubes-issues#10443
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants