Skip to content

Rewrite qubes-i3-sensible-terminal#24

Merged
marmarek merged 3 commits intoQubesOS:mainfrom
Atrate:feat/terminal-rewrite
Apr 12, 2026
Merged

Rewrite qubes-i3-sensible-terminal#24
marmarek merged 3 commits intoQubesOS:mainfrom
Atrate:feat/terminal-rewrite

Conversation

@Atrate
Copy link
Copy Markdown
Contributor

@Atrate Atrate commented Feb 19, 2026

This allows for choosing the user to launch the terminal as (such as root)

All bugs, errors and questionable stylistic choices are mine, not an LLMs.

Closes: QubesOS/qubes-issues#10656

CC: @ben-grande

Signed-off-by: Atrate Atrate@protonmail.com

This allows for choosing the user to launch the terminal as (such as root)

Fixes: qubes-issues/10656

Signed-off-by: Atrate <Atrate@protonmail.com>
When installed they get marked as executable anyways, but this makes it
consistent with the other file in the repo which was marked as exec.

Signed-off-by: Atrate <Atrate@protonmail.com>
@andrewdavidwong
Copy link
Copy Markdown
Member

Suggestion: If you intend for this pull request to resolve the associated issue and would like for it to be linked to the issue automatically, you can put Closes QubesOS/qubes-issues#XXXX in the PR message (where XXXX is the issue number). Closes is one of several special keywords that GitHub will recognize. If and when the PR is merged, GitHub will automatically close the associated issue.

@Atrate
Copy link
Copy Markdown
Contributor Author

Atrate commented Feb 19, 2026

Suggestion: If you intend for this pull request to resolve the associated issue and would like for it to be linked to the issue automatically, you can put Closes QubesOS/qubes-issues#XXXX in the PR message (where XXXX is the issue number). Closes is one of several special keywords that GitHub will recognize. If and when the PR is merged, GitHub will automatically close the associated issue.

Thanks, I wasn't fully sure where (whether) to put the # sign.

@ben-grande
Copy link
Copy Markdown
Contributor

It was a POSIX shellscript and now it is bash --posix... which is not really POSIX (array that is not $@ and declare keyword, bash is not POSIX). Marek added the openqa label, so unless he pings me to do it, I will just let this as it is.

@qubesos-bot
Copy link
Copy Markdown

qubesos-bot commented Mar 2, 2026

OpenQA test summary

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

Test run included the following:

New failures, excluding unstable

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

  • system_tests_audio@hw1

  • 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_guivm_gpu_gui_interactive@hw13

    • shutdown: unnamed test (unknown)
    • shutdown: Failed (test died)
      # Test died: no candidate needle with tag(s) 'text-logged-in-root' ...
  • system_tests_whonix@hw1

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

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

  • system_tests_audio

  • system_tests_extra

  • system_tests_usbproxy

    • TC_20_USBProxy_core3_debian-13-xfce: test_090_attach_stubdom (error)
      qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...

    • TC_20_USBProxy_core3_fedora-43-xfce: test_090_attach_stubdom (error)
      qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...

Failed tests

18 failures
  • system_tests_audio@hw1

  • 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_qwt_win11@hw13

    • windows_install: Failed (test died)
      # Test died: Install failed with code 1 at qubesos/tests/windows_in...
  • system_tests_guivm_gpu_gui_interactive@hw13

    • shutdown: unnamed test (unknown)
    • shutdown: Failed (test died)
      # Test died: no candidate needle with tag(s) 'text-logged-in-root' ...
  • system_tests_whonix@hw1

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

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

  • system_tests_whonix

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

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

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

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

  • system_tests_audio

  • system_tests_extra

  • system_tests_usbproxy

    • TC_20_USBProxy_core3_debian-13-xfce: test_090_attach_stubdom (error)
      qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...

    • TC_20_USBProxy_core3_fedora-43-xfce: test_090_attach_stubdom (error)
      qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...

Fixed failures

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

31 fixed
  • system_tests_qwt_win10@hw13

    • windows_install: Failed (test died)
      # Test died: Install failed with code 1 at qubesos/tests/windows_in...
  • system_tests_qwt_win10_seamless@hw13

    • windows_install: Failed (test died)
      # Test died: Install failed with code 1 at qubesos/tests/windows_in...
  • system_tests_network

    • system_tests: Fail (unknown)
      Tests qubes.tests.integ.network failed (exit code 1), details repor...

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

    • VmNetworking_debian-13-xfce: test_203_fake_ip_inter_vm_allow (failure)
      ^... AssertionError: 1 != 0

  • system_tests_pvgrub_salt_storage

    • system_tests: Fail (unknown)
      Tests qubes.tests.integ.grub failed (exit code 1), details reported...

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

    • TC_41_HVMGrub_debian-13-xfce: test_010_template_based_vm (error)
      qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...

    • TC_41_HVMGrub_debian-13-xfce: test_011_template_based_vm_dracut (error)
      qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...

    • TC_41_HVMGrub_fedora-42-xfce: test_000_standalone_vm (error)
      qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...

    • TC_41_HVMGrub_fedora-42-xfce: test_010_template_based_vm (error)
      qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...

  • system_tests_gui_interactive

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

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

  • system_tests_network_ipv6

    • system_tests: Fail (unknown)
      Tests qubes.tests.integ.network_ipv6 failed (exit code 1), details ...

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

    • VmIPv6Networking_fedora-42-xfce: test_113_reattach_after_provider_kill (failure)
      ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^... AssertionError: 1 != 0

  • system_tests_network_updates

    • system_tests: Fail (unknown)
      Tests qubes.tests.integ.dom0_update failed (exit code 1), details r...

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

    • TC_00_Dom0Upgrade_whonix-gateway-18: test_020_install_wrong_sign (error)
      subprocess.CalledProcessError: Command 'timeout=120; while ! tor-ci...

    • TC_11_QvmTemplateMgmtVM_debian-13-xfce: test_000_template_list (failure)
      qvm-template: error: No matching templates to list

    • TC_11_QvmTemplateMgmtVM_debian-13-xfce: test_010_template_install (failure)
      qvm-template: error: Template 'debian-12-minimal' not found.

    • TC_11_QvmTemplateMgmtVM_fedora-42-xfce: test_000_template_list (failure)
      qvm-template: error: No matching templates to list

    • TC_11_QvmTemplateMgmtVM_fedora-42-xfce: test_010_template_install (failure)
      qvm-template: error: Template 'debian-12-minimal' not found.

    • TC_11_QvmTemplateMgmtVM_whonix-gateway-18: test_000_template_list (failure)
      qvm-template: error: No matching templates to list

    • TC_11_QvmTemplateMgmtVM_whonix-gateway-18: test_010_template_install (failure)
      qvm-template: error: Template 'debian-12-minimal' not found.

  • system_tests_guivm_vnc_gui_interactive

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

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

  • system_tests_audio

  • system_tests_extra

    • TC_01_InputProxyExclude_debian-13-xfce: test_000_qemu_tablet (error)
      qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...
  • system_tests_kde_gui_interactive

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

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

Unstable tests

Details
  • system_tests_guivm_gui_interactive

    collect_logs/Failed (1/5 times with errors)
    • job 172256 # Test died: command 'curl --form upload=@journalctl.log --form upn...
    collect_logs/wait_serial (1/5 times with errors)
    • job 172256 # wait_serial expected: qr/v3Six-\d+-/...
    collect_logs/wait_serial (1/5 times with errors)
    • job 172256 # wait_serial expected: qr/6OJPL-\d+-/...
  • system_tests_guivm_vnc_gui_interactive

    collect_logs/Failed (1/5 times with errors)
    • job 172242 # Test died: command 'curl --form upload=@journalctl.log --form upn...
    collect_logs/wait_serial (1/5 times with errors)
    • job 172242 # wait_serial expected: qr/73DgV-\d+-/...
    collect_logs/wait_serial (1/5 times with errors)
    • job 172242 # wait_serial expected: qr/uOleL-\d+-/...

Performance Tests

Performance degradation:

9 performance degradations
  • debian-13-xfce_exec: 8.42 🔻 ( previous job: 7.30, degradation: 115.27%)
  • whonix-workstation-18_exec-data-duplex: 68.19 🔻 ( previous job: 59.45, degradation: 114.69%)
  • dom0_root_seq1m_q8t1_read 3:read_bandwidth_kb: 387786.00 🔻 ( previous job: 485002.00, degradation: 79.96%)
  • dom0_root_seq1m_q8t1_write 3:write_bandwidth_kb: 141521.00 🔻 ( previous job: 217546.00, degradation: 65.05%)
  • dom0_varlibqubes_rnd4k_q32t1_write 3:write_bandwidth_kb: 6866.00 🔻 ( previous job: 8434.00, degradation: 81.41%)
  • fedora-42-xfce_root_seq1m_q8t1_read 3:read_bandwidth_kb: 334901.00 🔻 ( previous job: 429744.00, degradation: 77.93%)
  • fedora-42-xfce_volatile_rnd4k_q32t1_read 3:read_bandwidth_kb: 63128.00 🔻 ( previous job: 95629.00, degradation: 66.01%)
  • fedora-42-xfce_volatile_rnd4k_q32t1_write 3:write_bandwidth_kb: 3350.00 🔻 ( previous job: 4272.00, degradation: 78.42%)
  • whonix-workstation-18_dom0-vm-api (mean:0.056): 0.68 🔻 ( previous job: 0.58, degradation: 117.36%)

Remaining performance tests:

102 tests
  • debian-13-xfce_exec-root: 25.81 🟢 ( previous job: 26.58, improvement: 97.11%)
  • debian-13-xfce_socket: 8.68 🔻 ( previous job: 8.02, degradation: 108.23%)
  • debian-13-xfce_socket-root: 8.73 🔻 ( previous job: 8.38, degradation: 104.15%)
  • debian-13-xfce_exec-data-simplex: 58.89 🟢 ( previous job: 66.06, improvement: 89.14%)
  • debian-13-xfce_exec-data-duplex: 64.59 🔻 ( previous job: 61.22, degradation: 105.50%)
  • debian-13-xfce_exec-data-duplex-root: 75.57 🔻 ( previous job: 72.95, degradation: 103.59%)
  • debian-13-xfce_socket-data-duplex: 83.48 🟢 ( previous job: 86.03, improvement: 97.03%)
  • fedora-42-xfce_exec: 8.98 🟢 ( previous job: 9.09, improvement: 98.73%)
  • fedora-42-xfce_exec-root: 58.94 🔻 ( previous job: 58.88, degradation: 100.10%)
  • fedora-42-xfce_socket: 8.83 🔻 ( previous job: 8.48, degradation: 104.10%)
  • fedora-42-xfce_socket-root: 8.20 🟢 ( previous job: 8.67, improvement: 94.60%)
  • fedora-42-xfce_exec-data-simplex: 61.89 🔻 ( previous job: 61.42, degradation: 100.76%)
  • fedora-42-xfce_exec-data-duplex: 58.12 🟢 ( previous job: 65.12, improvement: 89.26%)
  • fedora-42-xfce_exec-data-duplex-root: 84.34 🟢 ( previous job: 85.37, improvement: 98.80%)
  • fedora-42-xfce_socket-data-duplex: 82.09 🟢 ( previous job: 84.37, improvement: 97.30%)
  • whonix-gateway-18_exec: 7.88 🔻 ( previous job: 7.69, degradation: 102.46%)
  • whonix-gateway-18_exec-root: 126.37 🟢 ( previous job: 132.16, improvement: 95.62%)
  • whonix-gateway-18_socket: 7.52 🟢 ( previous job: 8.05, improvement: 93.42%)
  • whonix-gateway-18_socket-root: 7.73 🔻 ( previous job: 7.16, degradation: 108.03%)
  • whonix-gateway-18_exec-data-simplex: 69.26 🔻 ( previous job: 64.40, degradation: 107.53%)
  • whonix-gateway-18_exec-data-duplex: 63.16 🟢 ( previous job: 63.65, improvement: 99.25%)
  • whonix-gateway-18_exec-data-duplex-root: 127.07 🔻 ( previous job: 123.30, degradation: 103.05%)
  • whonix-gateway-18_socket-data-duplex: 101.98 🟢 ( previous job: 113.72, improvement: 89.68%)
  • whonix-workstation-18_exec: 8.67 🔻 ( previous job: 8.20, degradation: 105.77%)
  • whonix-workstation-18_exec-root: 138.34 🟢 ( previous job: 138.84, improvement: 99.64%)
  • whonix-workstation-18_socket: 7.82 🟢 ( previous job: 8.19, improvement: 95.40%)
  • whonix-workstation-18_socket-root: 8.45 🟢 ( previous job: 8.92, improvement: 94.76%)
  • whonix-workstation-18_exec-data-simplex: 66.09 🔻 ( previous job: 63.54, degradation: 104.02%)
  • whonix-workstation-18_exec-data-duplex-root: 128.52 🟢 ( previous job: 139.63, improvement: 92.05%)
  • whonix-workstation-18_socket-data-duplex: 81.78 🔻 ( previous job: 80.77, degradation: 101.25%)
  • dom0_root_seq1m_q1t1_read 3:read_bandwidth_kb: 378547.00 🟢 ( previous job: 70705.00, improvement: 535.39%)
  • dom0_root_seq1m_q1t1_write 3:write_bandwidth_kb: 188357.00 🟢 ( previous job: 42537.00, improvement: 442.81%)
  • dom0_root_rnd4k_q32t1_read 3:read_bandwidth_kb: 17658.00 🟢 ( previous job: 12342.00, improvement: 143.07%)
  • dom0_root_rnd4k_q32t1_write 3:write_bandwidth_kb: 7191.00 🟢 ( previous job: 3011.00, improvement: 238.82%)
  • dom0_root_rnd4k_q1t1_read 3:read_bandwidth_kb: 4778.00 🟢 ( previous job: 1182.00, improvement: 404.23%)
  • dom0_root_rnd4k_q1t1_write 3:write_bandwidth_kb: 1043.00 🟢 ( previous job: 793.00, improvement: 131.53%)
  • dom0_varlibqubes_seq1m_q8t1_read 3:read_bandwidth_kb: 406267.00 🟢 ( previous job: 233483.00, improvement: 174.00%)
  • dom0_varlibqubes_seq1m_q8t1_write 3:write_bandwidth_kb: 266136.00 🟢 ( previous job: 34913.00, improvement: 762.28%)
  • dom0_varlibqubes_seq1m_q1t1_read 3:read_bandwidth_kb: 443372.00 🟢 ( previous job: 370521.00, improvement: 119.66%)
  • dom0_varlibqubes_seq1m_q1t1_write 3:write_bandwidth_kb: 153886.00 🔻 ( previous job: 154458.00, degradation: 99.63%)
  • dom0_varlibqubes_rnd4k_q32t1_read 3:read_bandwidth_kb: 102172.00 🟢 ( previous job: 27602.00, improvement: 370.16%)
  • dom0_varlibqubes_rnd4k_q1t1_read 3:read_bandwidth_kb: 7438.00 🟢 ( previous job: 7112.00, improvement: 104.58%)
  • dom0_varlibqubes_rnd4k_q1t1_write 3:write_bandwidth_kb: 4823.00 🟢 ( previous job: 4565.00, improvement: 105.65%)
  • fedora-42-xfce_root_seq1m_q8t1_write 3:write_bandwidth_kb: 117657.00 🟢 ( previous job: 82944.00, improvement: 141.85%)
  • fedora-42-xfce_root_seq1m_q1t1_read 3:read_bandwidth_kb: 330364.00 🔻 ( previous job: 337488.00, degradation: 97.89%)
  • fedora-42-xfce_root_seq1m_q1t1_write 3:write_bandwidth_kb: 74033.00 🟢 ( previous job: 28744.00, improvement: 257.56%)
  • fedora-42-xfce_root_rnd4k_q32t1_read 3:read_bandwidth_kb: 92838.00 🟢 ( previous job: 82654.00, improvement: 112.32%)
  • fedora-42-xfce_root_rnd4k_q32t1_write 3:write_bandwidth_kb: 3238.00 🟢 ( previous job: 1799.00, improvement: 179.99%)
  • fedora-42-xfce_root_rnd4k_q1t1_read 3:read_bandwidth_kb: 8223.00 🔻 ( previous job: 8983.00, degradation: 91.54%)
  • fedora-42-xfce_root_rnd4k_q1t1_write 3:write_bandwidth_kb: 791.00 🔻 ( previous job: 808.00, degradation: 97.90%)
  • fedora-42-xfce_private_seq1m_q8t1_read 3:read_bandwidth_kb: 386500.00 🔻 ( previous job: 386785.00, degradation: 99.93%)
  • fedora-42-xfce_private_seq1m_q8t1_write 3:write_bandwidth_kb: 121474.00 🟢 ( previous job: 120146.00, improvement: 101.11%)
  • fedora-42-xfce_private_seq1m_q1t1_read 3:read_bandwidth_kb: 368568.00 🟢 ( previous job: 344699.00, improvement: 106.92%)
  • fedora-42-xfce_private_seq1m_q1t1_write 3:write_bandwidth_kb: 86610.00 🟢 ( previous job: 73186.00, improvement: 118.34%)
  • fedora-42-xfce_private_rnd4k_q32t1_read 3:read_bandwidth_kb: 87213.00 🟢 ( previous job: 85237.00, improvement: 102.32%)
  • fedora-42-xfce_private_rnd4k_q32t1_write 3:write_bandwidth_kb: 3145.00 🟢 ( previous job: 2529.00, improvement: 124.36%)
  • fedora-42-xfce_private_rnd4k_q1t1_read 3:read_bandwidth_kb: 9314.00 🟢 ( previous job: 8072.00, improvement: 115.39%)
  • fedora-42-xfce_private_rnd4k_q1t1_write 3:write_bandwidth_kb: 1087.00 🔻 ( previous job: 1142.00, degradation: 95.18%)
  • fedora-42-xfce_volatile_seq1m_q8t1_read 3:read_bandwidth_kb: 368697.00 🔻 ( previous job: 378820.00, degradation: 97.33%)
  • fedora-42-xfce_volatile_seq1m_q8t1_write 3:write_bandwidth_kb: 106392.00 🟢 ( previous job: 98064.00, improvement: 108.49%)
  • fedora-42-xfce_volatile_seq1m_q1t1_read 3:read_bandwidth_kb: 320567.00 🔻 ( previous job: 339454.00, degradation: 94.44%)
  • fedora-42-xfce_volatile_seq1m_q1t1_write 3:write_bandwidth_kb: 28824.00 🟢 ( previous job: 28807.00, improvement: 100.06%)
  • fedora-42-xfce_volatile_rnd4k_q1t1_read 3:read_bandwidth_kb: 8687.00 🟢 ( previous job: 8294.00, improvement: 104.74%)
  • fedora-42-xfce_volatile_rnd4k_q1t1_write 3:write_bandwidth_kb: 1827.00 🟢 ( previous job: 1434.00, improvement: 127.41%)
  • debian-13-xfce_dom0-dispvm-api (mean:6.081): 72.97 🟢 ( previous job: 81.47, improvement: 89.57%)
  • debian-13-xfce_dom0-dispvm-gui-api (mean:7.694): 92.33 🟢 ( previous job: 92.38, improvement: 99.94%)
  • debian-13-xfce_dom0-dispvm-preload-2-api (mean:3.158): 37.89 🟢 ( previous job: 48.28, improvement: 78.49%)
  • debian-13-xfce_dom0-dispvm-preload-2-delay-0-api (mean:2.845): 34.13 🟢 ( previous job: 44.34, improvement: 76.98%)
  • debian-13-xfce_dom0-dispvm-preload-2-delay-minus-1d2-api (mean:3.242): 38.90 🟢 ( previous job: 54.23, improvement: 71.73%)
  • debian-13-xfce_dom0-dispvm-preload-4-api (mean:2.17): 26.04 🟢 ( previous job: 40.37, improvement: 64.49%)
  • debian-13-xfce_dom0-dispvm-preload-4-delay-0-api (mean:2.578): 30.94 🟢 ( previous job: 44.04, improvement: 70.26%)
  • debian-13-xfce_dom0-dispvm-preload-4-delay-minus-1d2-api (mean:2.333): 27.99 🟢 ( previous job: 45.36, improvement: 61.71%)
  • debian-13-xfce_dom0-dispvm-preload-2-gui-api (mean:4.287): 51.45 🟢 ( previous job: 58.18, improvement: 88.43%)
  • debian-13-xfce_dom0-dispvm-preload-4-gui-api (mean:3.761): 45.13 🔻 ( previous job: 43.54, degradation: 103.66%)
  • debian-13-xfce_dom0-dispvm-preload-6-gui-api (mean:3.522): 42.26 🟢 ( previous job: 47.37, improvement: 89.20%)
  • debian-13-xfce_dom0-vm-api (mean:0.039): 0.47 🔻 ( previous job: 0.46, degradation: 102.40%)
  • debian-13-xfce_dom0-vm-gui-api (mean:0.042): 0.50 🟢 ( previous job: 0.51, improvement: 98.81%)
  • fedora-42-xfce_dom0-dispvm-api (mean:6.404): 76.85 🟢 ( previous job: 86.95, improvement: 88.38%)
  • fedora-42-xfce_dom0-dispvm-gui-api (mean:8.383): 100.59 🟢 ( previous job: 101.79, improvement: 98.82%)
  • fedora-42-xfce_dom0-dispvm-preload-2-api (mean:3.431): 41.17 🟢 ( previous job: 51.93, improvement: 79.29%)
  • fedora-42-xfce_dom0-dispvm-preload-2-delay-0-api (mean:3.168): 38.02 🟢 ( previous job: 48.70, improvement: 78.06%)
  • fedora-42-xfce_dom0-dispvm-preload-2-delay-minus-1d2-api (mean:3.518): 42.21 🟢 ( previous job: 57.38, improvement: 73.57%)
  • fedora-42-xfce_dom0-dispvm-preload-4-api (mean:2.499): 29.99 🟢 ( previous job: 43.56, improvement: 68.85%)
  • fedora-42-xfce_dom0-dispvm-preload-4-delay-0-api (mean:2.927): 35.13 🟢 ( previous job: 43.43, improvement: 80.89%)
  • fedora-42-xfce_dom0-dispvm-preload-4-delay-minus-1d2-api (mean:2.77): 33.24 🟢 ( previous job: 47.15, improvement: 70.50%)
  • fedora-42-xfce_dom0-dispvm-preload-2-gui-api (mean:5.129): 61.55 🟢 ( previous job: 62.91, improvement: 97.85%)
  • fedora-42-xfce_dom0-dispvm-preload-4-gui-api (mean:3.996): 47.95 🟢 ( previous job: 51.39, improvement: 93.30%)
  • fedora-42-xfce_dom0-dispvm-preload-6-gui-api (mean:3.563): 42.76 🟢 ( previous job: 44.96, improvement: 95.10%)
  • fedora-42-xfce_dom0-vm-api (mean:0.036): 0.44 🔻 ( previous job: 0.43, degradation: 101.16%)
  • fedora-42-xfce_dom0-vm-gui-api (mean:0.034): 0.41 🟢 ( previous job: 0.46, improvement: 89.06%)
  • whonix-workstation-18_dom0-dispvm-api (mean:8.093): 97.11 🟢 ( previous job: 114.77, improvement: 84.61%)
  • whonix-workstation-18_dom0-dispvm-gui-api (mean:10.242): 122.91 🟢 ( previous job: 127.27, improvement: 96.57%)
  • whonix-workstation-18_dom0-dispvm-preload-2-api (mean:4.193): 50.31 🟢 ( previous job: 70.96, improvement: 70.90%)
  • whonix-workstation-18_dom0-dispvm-preload-2-delay-0-api (mean:3.951): 47.41 🟢 ( previous job: 65.29, improvement: 72.61%)
  • whonix-workstation-18_dom0-dispvm-preload-2-delay-minus-1d2-api (mean:4.936): 59.23 🟢 ( previous job: 74.32, improvement: 79.69%)
  • whonix-workstation-18_dom0-dispvm-preload-4-api (mean:3.172): 38.07 🟢 ( previous job: 57.74, improvement: 65.92%)
  • whonix-workstation-18_dom0-dispvm-preload-4-delay-0-api (mean:3.458): 41.49 🟢 ( previous job: 65.76, improvement: 63.10%)
  • whonix-workstation-18_dom0-dispvm-preload-4-delay-minus-1d2-api (mean:3.614): 43.37 🟢 ( previous job: 59.80, improvement: 72.53%)
  • whonix-workstation-18_dom0-dispvm-preload-2-gui-api (mean:5.651): 67.81 🟢 ( previous job: 78.19, improvement: 86.73%)
  • whonix-workstation-18_dom0-dispvm-preload-4-gui-api (mean:4.517): 54.20 🟢 ( previous job: 65.73, improvement: 82.46%)
  • whonix-workstation-18_dom0-dispvm-preload-6-gui-api (mean:4.003): 48.04 🟢 ( previous job: 61.35, improvement: 78.31%)
  • whonix-workstation-18_dom0-vm-gui-api (mean:0.041): 0.50 🟢 ( previous job: 0.62, improvement: 79.61%)

Comment thread qubes-i3-sensible-terminal Outdated
"$arg_user:QUBESRPC qubes.StartApp+$DOMU_TERMINAL $vm"
fi

# If all else fails, just execute the service for the terminal
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't like this comment, or that there are comments that don't explain difficult things on other sections, but this comment is misleading. It is not "If all else fails", this case happens if you are using a GUIVM, and therefore you can't run qrexec-client on it (which is faster than qvm-run). Which, okay, it is when previous cases doesn't match, but this is different than explaining why such thing happens.


Minor thing. Theoretically, this could also be </dev/null >/dev/null qrexec-client-vm -- "$vm" "qubes.StartApp+$DOMU_TERMINAL", but this commands holds unless you use &, which is not always nice.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

About comment style guide: https://doc.qubes-os.org/en/r4.3/developer/code/coding-style.html#general-programming-style-guidelines

Use comments to explain non-trivial code fragments, or expected behavior of more complex functions, if it is not clear from their name.

Do not use comments for code fragments where it is immediately clear what the code does.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

comments

I've removed some comments that could be deemed redundant. "Immediately clear" is a difficult thing to define, so I've taken the approach of imagining I'm someone who knows programming but not necessarily bash's constructs, so I've left e.g. the comment about set -eEu or the comments in the if...exec clauses, as it's not immediately clear that the exec makes this into, effectively, one big if-elif-else construct.

Minor thing. Theoretically, this could also be </dev/null >/dev/null qrexec-client-vm -- "$vm" "qubes.StartApp+$DOMU_TERMINAL", but this commands holds unless you use &, which is not always nice.

What does adding null redirection help with in this case? Not polluting the DE's logs? Security? Could there be a blocked pipe problem with qrexec here if implemented?

Comment thread qubes-i3-sensible-terminal Outdated
Comment thread qubes-i3-sensible-terminal Outdated
Copy link
Copy Markdown
Member

@marmarek marmarek left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

On top of what @ben-grande said, you can make also one possible improvement (but it's fine to leave this alone for later).


# Extract VM name from active window props
local vm
vm="$(xprop -id "$id" | grep '_QUBES_VMNAME(STRING)')" || true
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
vm="$(xprop -id "$id" | grep '_QUBES_VMNAME(STRING)')" || true
vm="$(xprop -id "$id" '_QUBES_VMNAME')" || true

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I tried this approach and ran into an issue. It looks like xprop emits both outputs and error messages to stdout, disregarding stderr. Unless there's a way to make it work properly (or I'm mistaken), I feel like the post-processing of the output with grep would be the better approach, sadly.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Very weird behavior. To test, make it fail by focusing a dom0 window before running the script, notice that redirecting stderr to dev null doesn't hide errors.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

FWIW, I also get an error here when running the script on xfce. Apparently, Xfce sets two window IDs in the _NET_ACTIVE_WINDOW property, the second one being 0x0. And xprop fails on it, making the script always assume it's dom0.
But it does work correctly for me on i3.

@Atrate Atrate force-pushed the feat/terminal-rewrite branch from 56961f0 to d237256 Compare March 28, 2026 19:34
@Atrate
Copy link
Copy Markdown
Contributor Author

Atrate commented Mar 28, 2026

@ben-grande I've applied your suggestions and amended the most recent commit.

Atrate added a commit to Atrate/qubes-doc that referenced this pull request Mar 28, 2026
Copy link
Copy Markdown
Member

@marmarek marmarek left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approved as of d237256

@marmarek marmarek merged commit 820a99d into QubesOS:main Apr 12, 2026
2 of 3 checks passed
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.

Add a way to launch root terminal in qube to i3-settings-qubes

5 participants