From b8bacc3489303cf801b0b1b5249436bc912d27dc Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Sun, 8 Feb 2026 20:13:55 +0000 Subject: [PATCH 01/16] Fix pkexec AppImage launcher execution Co-authored-by: Inoki --- qefientrymanager-launcher | 46 ++++++++++++++++++++++++++++++--------- 1 file changed, 36 insertions(+), 10 deletions(-) diff --git a/qefientrymanager-launcher b/qefientrymanager-launcher index 32364ef..0a3caa6 100755 --- a/qefientrymanager-launcher +++ b/qefientrymanager-launcher @@ -1,16 +1,42 @@ #!/usr/bin/env bash -env_array=( - "XDG_CURRENT_DESKTOP=${XDG_CURRENT_DESKTOP}" - "QT_QPA_PLATFORM=${QT_QPA_PLATFORM}" - "QT_QPA_PLATFORMTHEME=${QT_QPA_PLATFORMTHEME}" - "QT_STYLE_OVERRIDE=${QT_STYLE_OVERRIDE}" -) +launcher_path="$(readlink -f "${BASH_SOURCE[0]}")" +launcher_dir="$(dirname "${launcher_path}")" +target="${launcher_dir}/QEFIEntryManager" +if [[ ! -x "${target}" ]]; then + target="QEFIEntryManager" +fi + +env_array=() +append_env() { + local key="$1" + local value="${!key-}" + if [[ -n "${value}" ]]; then + env_array+=("${key}=${value}") + fi +} -if [[ -z "${WAYLAND_DISPLAY}" ]]; then - env_array+=("DISPLAY=${DISPLAY}" "XAUTHORITY=${XAUTHORITY}") +append_env XDG_CURRENT_DESKTOP +append_env XDG_SESSION_TYPE +append_env QT_QPA_PLATFORM +append_env QT_QPA_PLATFORMTHEME +append_env QT_STYLE_OVERRIDE +append_env DBUS_SESSION_BUS_ADDRESS + +if [[ -n "${WAYLAND_DISPLAY:-}" ]]; then + append_env XDG_RUNTIME_DIR + append_env WAYLAND_DISPLAY else - env_array+=("WAYLAND_DISPLAY=${XDG_RUNTIME_DIR}/${WAYLAND_DISPLAY}") + append_env DISPLAY + append_env XAUTHORITY +fi + +if [[ "${EUID}" -eq 0 ]]; then + exec "${target}" "$@" +fi + +if [[ -n "${APPIMAGE:-}" && -x "${APPIMAGE}" ]]; then + exec pkexec env "${env_array[@]}" APPIMAGE_EXTRACT_AND_RUN=1 "${APPIMAGE}" "$@" fi -exec pkexec env "${env_array[@]}" QEFIEntryManager "$@" +exec pkexec env "${env_array[@]}" "${target}" "$@" From 6a9accb1fbf83aa817e2be125ded7f690e9cbf1a Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Sun, 8 Feb 2026 20:14:01 +0000 Subject: [PATCH 02/16] Simplify AppImage CI matrix Co-authored-by: Inoki --- .github/workflows/cmake-linux-amd64-appimage.yml | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/.github/workflows/cmake-linux-amd64-appimage.yml b/.github/workflows/cmake-linux-amd64-appimage.yml index 40b891f..1ea88ed 100644 --- a/.github/workflows/cmake-linux-amd64-appimage.yml +++ b/.github/workflows/cmake-linux-amd64-appimage.yml @@ -22,19 +22,9 @@ jobs: - os: ubuntu-22.04 qt-ver: 5 qt-pkg: qtbase5-dev qttools5-dev - use-pkexec-launcher: OFF - - os: ubuntu-22.04 - qt-ver: 5 - qt-pkg: qtbase5-dev qttools5-dev - use-pkexec-launcher: ON - - os: ubuntu-24.04 - qt-ver: 6 - qt-pkg: qt6-base-dev qt6-tools-dev - use-pkexec-launcher: OFF - os: ubuntu-24.04 qt-ver: 6 qt-pkg: qt6-base-dev qt6-tools-dev - use-pkexec-launcher: ON runs-on: ${{matrix.os}} steps: @@ -56,7 +46,7 @@ jobs: run: | cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} \ -DCMAKE_INSTALL_PREFIX=/usr -DENABLE_PACKAGING=ON \ - -DUSE_PKEXEC_LAUNCHER=${{matrix.use-pkexec-launcher}} \ + -DUSE_PKEXEC_LAUNCHER=ON \ -DBUILD_CLI_UTILITY=ON - name: Build @@ -89,17 +79,15 @@ jobs: uses: actions/upload-artifact@v4 with: # Artifact name - name: QEFI Entry Manager x86_64 AppImage Qt${{matrix.qt-ver}} pkexec-launcher-${{matrix.use-pkexec-launcher}} + name: QEFI Entry Manager x86_64 AppImage Qt${{matrix.qt-ver}} # A file, directory or wildcard pattern that describes what to upload path: ${{github.workspace}}/build/EFI_Entry_Manager-x86_64-Qt${{matrix.qt-ver}}.AppImage - name: Packaging Debian - if: ${{ matrix.use-pkexec-launcher == 'ON' }} working-directory: ${{github.workspace}}/build run: cpack -G DEB - name: Upload a Build Artifact - if: ${{ matrix.use-pkexec-launcher == 'ON' }} uses: actions/upload-artifact@v4 with: # Artifact name From f77e8619ea6fa4de562d58b29d8618664705ccc0 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Sun, 8 Feb 2026 20:20:55 +0000 Subject: [PATCH 03/16] Add UEFI Fedora/Arch AppImage smoke tests Co-authored-by: Inoki --- .github/workflows/uefi-linux-vm-smoke.yml | 198 ++++++++++++++++++++++ 1 file changed, 198 insertions(+) create mode 100644 .github/workflows/uefi-linux-vm-smoke.yml diff --git a/.github/workflows/uefi-linux-vm-smoke.yml b/.github/workflows/uefi-linux-vm-smoke.yml new file mode 100644 index 0000000..cbcf74c --- /dev/null +++ b/.github/workflows/uefi-linux-vm-smoke.yml @@ -0,0 +1,198 @@ +name: UEFI Linux VM smoke tests + +on: + push: + branches: [master] + pull_request: + branches: [master] + +env: + BUILD_TYPE: Release + +jobs: + build-appimage: + runs-on: ubuntu-24.04 + steps: + - uses: actions/checkout@v4 + with: + submodules: true + + - name: Install Qt and build dependencies + run: | + sudo apt update -y + sudo apt install -y qt6-base-dev qt6-tools-dev fuse + + - name: Configure CMake + run: | + cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} \ + -DCMAKE_INSTALL_PREFIX=/usr -DENABLE_PACKAGING=ON \ + -DUSE_PKEXEC_LAUNCHER=ON \ + -DBUILD_CLI_UTILITY=ON + + - name: Build + run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} + + - name: Package AppImage + working-directory: ${{github.workspace}}/build + run: | + export QMAKE=/usr/lib/qt6/bin/qmake + make install DESTDIR=AppDir + wget https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage + wget https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage + chmod +x linuxdeploy*.AppImage + ./linuxdeploy-x86_64.AppImage --appdir AppDir --plugin qt --output appimage + mv EFI_Entry_Manager-x86_64.AppImage EFI_Entry_Manager-x86_64-Qt6.AppImage + + - name: Upload AppImage artifact + uses: actions/upload-artifact@v4 + with: + name: qefi-appimage-qt6 + path: ${{github.workspace}}/build/EFI_Entry_Manager-x86_64-Qt6.AppImage + + uefi-vm-test: + needs: build-appimage + runs-on: ubuntu-24.04 + strategy: + matrix: + include: + - distro: fedora + image_url: https://download.fedoraproject.org/pub/fedora/linux/releases/42/Cloud/x86_64/images/Fedora-Cloud-Base-42-1.5.x86_64.qcow2 + - distro: arch + image_url: https://geo.mirror.pkgbuild.com/images/latest/Arch-Linux-x86_64-cloudimg.qcow2 + steps: + - name: Install QEMU and cloud tooling + run: | + sudo apt update -y + sudo apt install -y qemu-system-x86 qemu-utils ovmf cloud-image-utils genisoimage + + - name: Download AppImage artifact + uses: actions/download-artifact@v4 + with: + name: qefi-appimage-qt6 + path: artifacts + + - name: Boot UEFI VM and smoke test AppImage + env: + DISTRO: ${{matrix.distro}} + IMAGE_URL: ${{matrix.image_url}} + run: | + set -euo pipefail + APPIMAGE_PATH="${GITHUB_WORKSPACE}/artifacts/EFI_Entry_Manager-x86_64-Qt6.AppImage" + chmod +x "${APPIMAGE_PATH}" + VM_DIR="${RUNNER_TEMP}/uefi-${DISTRO}" + mkdir -p "${VM_DIR}" + curl -fsSL "${IMAGE_URL}" -o "${VM_DIR}/disk.qcow2" + qemu-img resize "${VM_DIR}/disk.qcow2" 10G + + ssh-keygen -t ed25519 -N "" -f "${VM_DIR}/id_ed25519" + PUB_KEY="$(cat "${VM_DIR}/id_ed25519.pub")" + + cat > "${VM_DIR}/user-data" < /var/tmp/ci-ready" ] + EOF + + cat > "${VM_DIR}/meta-data" </dev/null 2>&1; then + sudo dnf install -y polkit + elif command -v pacman >/dev/null 2>&1; then + sudo pacman -Sy --noconfirm polkit + fi + + sudo tee /etc/polkit-1/rules.d/49-ci-pkexec.rules >/dev/null <<'POLKIT' + polkit.addRule(function(action, subject) { + if (action.id == "org.freedesktop.policykit.exec" && + subject.user == "tester") { + return polkit.Result.YES; + } + }); + POLKIT + sudo chmod 0644 /etc/polkit-1/rules.d/49-ci-pkexec.rules + + chmod +x /home/tester/QEFI.AppImage + export QT_QPA_PLATFORM=offscreen + + set +e + timeout 10s /home/tester/QEFI.AppImage > /tmp/qefi.log 2>&1 + status=$? + set -e + + if [ "${status}" -ne 0 ] && [ "${status}" -ne 124 ]; then + echo "AppImage exited with status ${status}" + cat /tmp/qefi.log + exit 1 + fi + + if grep -q "No such file or directory" /tmp/qefi.log; then + cat /tmp/qefi.log + exit 1 + fi + EOSSH From b8576bbf81481d0cf700ef4a8254672823cd506e Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Sun, 8 Feb 2026 20:24:43 +0000 Subject: [PATCH 04/16] Update Fedora UEFI cloud image URL Co-authored-by: Inoki --- .github/workflows/uefi-linux-vm-smoke.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/uefi-linux-vm-smoke.yml b/.github/workflows/uefi-linux-vm-smoke.yml index cbcf74c..947fcad 100644 --- a/.github/workflows/uefi-linux-vm-smoke.yml +++ b/.github/workflows/uefi-linux-vm-smoke.yml @@ -56,7 +56,7 @@ jobs: matrix: include: - distro: fedora - image_url: https://download.fedoraproject.org/pub/fedora/linux/releases/42/Cloud/x86_64/images/Fedora-Cloud-Base-42-1.5.x86_64.qcow2 + image_url: https://download.fedoraproject.org/pub/fedora/linux/releases/42/Cloud/x86_64/images/Fedora-Cloud-Base-UEFI-UKI-42-1.1.x86_64.qcow2 - distro: arch image_url: https://geo.mirror.pkgbuild.com/images/latest/Arch-Linux-x86_64-cloudimg.qcow2 steps: From 1f4041c28c0af9b8826de2d61de6dbc9ef7ca92a Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Sun, 8 Feb 2026 20:49:31 +0000 Subject: [PATCH 05/16] Make OVMF firmware path detection robust Co-authored-by: Inoki --- .github/workflows/uefi-linux-vm-smoke.yml | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/.github/workflows/uefi-linux-vm-smoke.yml b/.github/workflows/uefi-linux-vm-smoke.yml index 947fcad..fda0b90 100644 --- a/.github/workflows/uefi-linux-vm-smoke.yml +++ b/.github/workflows/uefi-linux-vm-smoke.yml @@ -107,7 +107,25 @@ jobs: cloud-localds "${VM_DIR}/seed.iso" "${VM_DIR}/user-data" "${VM_DIR}/meta-data" - cp /usr/share/OVMF/OVMF_VARS.fd "${VM_DIR}/OVMF_VARS.fd" + OVMF_CODE="" + OVMF_VARS="" + for base in /usr/share/OVMF /usr/share/edk2/ovmf /usr/share/edk2/ovmf/x64; do + if [ -f "${base}/OVMF_CODE_4M.fd" ] && [ -f "${base}/OVMF_VARS_4M.fd" ]; then + OVMF_CODE="${base}/OVMF_CODE_4M.fd" + OVMF_VARS="${base}/OVMF_VARS_4M.fd" + break + fi + if [ -f "${base}/OVMF_CODE.fd" ] && [ -f "${base}/OVMF_VARS.fd" ]; then + OVMF_CODE="${base}/OVMF_CODE.fd" + OVMF_VARS="${base}/OVMF_VARS.fd" + break + fi + done + if [ -z "${OVMF_CODE}" ] || [ -z "${OVMF_VARS}" ]; then + echo "Unable to locate OVMF firmware files" + exit 1 + fi + cp "${OVMF_VARS}" "${VM_DIR}/OVMF_VARS.fd" ACCEL="tcg" if [ -r /dev/kvm ] && [ -w /dev/kvm ]; then @@ -124,7 +142,7 @@ jobs: qemu-system-x86_64 \ -machine accel=${ACCEL} \ -m 4096 -smp 2 \ - -drive if=pflash,format=raw,readonly=on,file=/usr/share/OVMF/OVMF_CODE.fd \ + -drive if=pflash,format=raw,readonly=on,file="${OVMF_CODE}" \ -drive if=pflash,format=raw,file="${VM_DIR}/OVMF_VARS.fd" \ -drive file="${VM_DIR}/disk.qcow2",if=virtio,format=qcow2 \ -drive file="${VM_DIR}/seed.iso",if=virtio,format=raw \ From 172865bb3ad0baf3169a7a27db1811bce5a84cc1 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Sun, 8 Feb 2026 21:14:13 +0000 Subject: [PATCH 06/16] Fix QEMU headless flags with daemonize Co-authored-by: Inoki --- .github/workflows/uefi-linux-vm-smoke.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/uefi-linux-vm-smoke.yml b/.github/workflows/uefi-linux-vm-smoke.yml index fda0b90..f955220 100644 --- a/.github/workflows/uefi-linux-vm-smoke.yml +++ b/.github/workflows/uefi-linux-vm-smoke.yml @@ -148,7 +148,8 @@ jobs: -drive file="${VM_DIR}/seed.iso",if=virtio,format=raw \ -netdev user,id=net0,hostfwd=tcp::2222-:22 \ -device virtio-net-pci,netdev=net0 \ - -nographic \ + -display none \ + -serial file:"${VM_DIR}/serial.log" \ -daemonize \ -pidfile "${VM_DIR}/qemu.pid" From da60bbfce127cfc920dccae2914163280fb29388 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Sun, 8 Feb 2026 21:24:38 +0000 Subject: [PATCH 07/16] Install FUSE in VM and extract AppImage Co-authored-by: Inoki --- .github/workflows/uefi-linux-vm-smoke.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/uefi-linux-vm-smoke.yml b/.github/workflows/uefi-linux-vm-smoke.yml index f955220..27d79f6 100644 --- a/.github/workflows/uefi-linux-vm-smoke.yml +++ b/.github/workflows/uefi-linux-vm-smoke.yml @@ -181,9 +181,9 @@ jobs: fi if command -v dnf >/dev/null 2>&1; then - sudo dnf install -y polkit + sudo dnf install -y polkit fuse fuse3 elif command -v pacman >/dev/null 2>&1; then - sudo pacman -Sy --noconfirm polkit + sudo pacman -Sy --noconfirm polkit fuse2 fi sudo tee /etc/polkit-1/rules.d/49-ci-pkexec.rules >/dev/null <<'POLKIT' @@ -198,6 +198,7 @@ jobs: chmod +x /home/tester/QEFI.AppImage export QT_QPA_PLATFORM=offscreen + export APPIMAGE_EXTRACT_AND_RUN=1 set +e timeout 10s /home/tester/QEFI.AppImage > /tmp/qefi.log 2>&1 From 024f60f372298386e65dd49eccebdbe7a1f7af21 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Sun, 8 Feb 2026 21:54:30 +0000 Subject: [PATCH 08/16] Install Mesa EGL deps in UEFI VM Co-authored-by: Inoki --- .github/workflows/uefi-linux-vm-smoke.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/uefi-linux-vm-smoke.yml b/.github/workflows/uefi-linux-vm-smoke.yml index 27d79f6..8a333c2 100644 --- a/.github/workflows/uefi-linux-vm-smoke.yml +++ b/.github/workflows/uefi-linux-vm-smoke.yml @@ -181,9 +181,9 @@ jobs: fi if command -v dnf >/dev/null 2>&1; then - sudo dnf install -y polkit fuse fuse3 + sudo dnf install -y polkit fuse fuse3 mesa-libEGL mesa-dri-drivers elif command -v pacman >/dev/null 2>&1; then - sudo pacman -Sy --noconfirm polkit fuse2 + sudo pacman -Sy --noconfirm polkit fuse2 mesa fi sudo tee /etc/polkit-1/rules.d/49-ci-pkexec.rules >/dev/null <<'POLKIT' From 712e2854e65659f7efb4dcadd303d821032d92a2 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Sun, 8 Feb 2026 22:40:52 +0000 Subject: [PATCH 09/16] Install fontconfig runtime deps in VM Co-authored-by: Inoki --- .github/workflows/uefi-linux-vm-smoke.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/uefi-linux-vm-smoke.yml b/.github/workflows/uefi-linux-vm-smoke.yml index 8a333c2..c15f889 100644 --- a/.github/workflows/uefi-linux-vm-smoke.yml +++ b/.github/workflows/uefi-linux-vm-smoke.yml @@ -181,9 +181,9 @@ jobs: fi if command -v dnf >/dev/null 2>&1; then - sudo dnf install -y polkit fuse fuse3 mesa-libEGL mesa-dri-drivers + sudo dnf install -y polkit fuse fuse3 mesa-libEGL mesa-dri-drivers fontconfig freetype elif command -v pacman >/dev/null 2>&1; then - sudo pacman -Sy --noconfirm polkit fuse2 mesa + sudo pacman -Sy --noconfirm polkit fuse2 mesa fontconfig freetype2 fi sudo tee /etc/polkit-1/rules.d/49-ci-pkexec.rules >/dev/null <<'POLKIT' From 26b6baece327218a2be768d4e8fc7ce65a0f5bfa Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Mon, 9 Feb 2026 22:47:26 +0000 Subject: [PATCH 10/16] Install X11 runtime deps in VM Co-authored-by: Inoki --- .github/workflows/uefi-linux-vm-smoke.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/uefi-linux-vm-smoke.yml b/.github/workflows/uefi-linux-vm-smoke.yml index c15f889..981e8de 100644 --- a/.github/workflows/uefi-linux-vm-smoke.yml +++ b/.github/workflows/uefi-linux-vm-smoke.yml @@ -181,9 +181,9 @@ jobs: fi if command -v dnf >/dev/null 2>&1; then - sudo dnf install -y polkit fuse fuse3 mesa-libEGL mesa-dri-drivers fontconfig freetype + sudo dnf install -y polkit fuse fuse3 mesa-libEGL mesa-dri-drivers fontconfig freetype libX11 libXext libXrender libXfixes libXcursor libXi libXrandr elif command -v pacman >/dev/null 2>&1; then - sudo pacman -Sy --noconfirm polkit fuse2 mesa fontconfig freetype2 + sudo pacman -Sy --noconfirm polkit fuse2 mesa fontconfig freetype2 libx11 libxext libxrender libxfixes libxcursor libxi libxrandr fi sudo tee /etc/polkit-1/rules.d/49-ci-pkexec.rules >/dev/null <<'POLKIT' From 3cd194a02aced0990a9df3ec2762746eeafb26a0 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Mon, 9 Feb 2026 22:55:22 +0000 Subject: [PATCH 11/16] Install harfbuzz runtime deps in VM Co-authored-by: Inoki --- .github/workflows/uefi-linux-vm-smoke.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/uefi-linux-vm-smoke.yml b/.github/workflows/uefi-linux-vm-smoke.yml index 981e8de..7495ac1 100644 --- a/.github/workflows/uefi-linux-vm-smoke.yml +++ b/.github/workflows/uefi-linux-vm-smoke.yml @@ -181,9 +181,9 @@ jobs: fi if command -v dnf >/dev/null 2>&1; then - sudo dnf install -y polkit fuse fuse3 mesa-libEGL mesa-dri-drivers fontconfig freetype libX11 libXext libXrender libXfixes libXcursor libXi libXrandr + sudo dnf install -y polkit fuse fuse3 mesa-libEGL mesa-dri-drivers fontconfig freetype libX11 libXext libXrender libXfixes libXcursor libXi libXrandr harfbuzz elif command -v pacman >/dev/null 2>&1; then - sudo pacman -Sy --noconfirm polkit fuse2 mesa fontconfig freetype2 libx11 libxext libxrender libxfixes libxcursor libxi libxrandr + sudo pacman -Sy --noconfirm polkit fuse2 mesa fontconfig freetype2 libx11 libxext libxrender libxfixes libxcursor libxi libxrandr harfbuzz fi sudo tee /etc/polkit-1/rules.d/49-ci-pkexec.rules >/dev/null <<'POLKIT' From b9284989ed8e2ed10c7970dafad089f22569d2c4 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Mon, 9 Feb 2026 23:05:24 +0000 Subject: [PATCH 12/16] Run AppImage under Xvfb with xcb platform Co-authored-by: Inoki --- .github/workflows/uefi-linux-vm-smoke.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/uefi-linux-vm-smoke.yml b/.github/workflows/uefi-linux-vm-smoke.yml index 7495ac1..3a177b8 100644 --- a/.github/workflows/uefi-linux-vm-smoke.yml +++ b/.github/workflows/uefi-linux-vm-smoke.yml @@ -181,9 +181,9 @@ jobs: fi if command -v dnf >/dev/null 2>&1; then - sudo dnf install -y polkit fuse fuse3 mesa-libEGL mesa-dri-drivers fontconfig freetype libX11 libXext libXrender libXfixes libXcursor libXi libXrandr harfbuzz + sudo dnf install -y polkit fuse fuse3 mesa-libEGL mesa-dri-drivers fontconfig freetype libX11 libXext libXrender libXfixes libXcursor libXi libXrandr harfbuzz xorg-x11-server-Xvfb elif command -v pacman >/dev/null 2>&1; then - sudo pacman -Sy --noconfirm polkit fuse2 mesa fontconfig freetype2 libx11 libxext libxrender libxfixes libxcursor libxi libxrandr harfbuzz + sudo pacman -Sy --noconfirm polkit fuse2 mesa fontconfig freetype2 libx11 libxext libxrender libxfixes libxcursor libxi libxrandr harfbuzz xorg-server-xvfb fi sudo tee /etc/polkit-1/rules.d/49-ci-pkexec.rules >/dev/null <<'POLKIT' @@ -197,11 +197,11 @@ jobs: sudo chmod 0644 /etc/polkit-1/rules.d/49-ci-pkexec.rules chmod +x /home/tester/QEFI.AppImage - export QT_QPA_PLATFORM=offscreen + export QT_QPA_PLATFORM=xcb export APPIMAGE_EXTRACT_AND_RUN=1 set +e - timeout 10s /home/tester/QEFI.AppImage > /tmp/qefi.log 2>&1 + timeout 10s xvfb-run -a /home/tester/QEFI.AppImage > /tmp/qefi.log 2>&1 status=$? set -e From 6d0f4860e3b25dcff54ecd1a0f94cd9e19cddcc4 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Mon, 9 Feb 2026 23:16:51 +0000 Subject: [PATCH 13/16] Install libOpenGL runtime deps in VM Co-authored-by: Inoki --- .github/workflows/uefi-linux-vm-smoke.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/uefi-linux-vm-smoke.yml b/.github/workflows/uefi-linux-vm-smoke.yml index 3a177b8..d542e16 100644 --- a/.github/workflows/uefi-linux-vm-smoke.yml +++ b/.github/workflows/uefi-linux-vm-smoke.yml @@ -181,9 +181,9 @@ jobs: fi if command -v dnf >/dev/null 2>&1; then - sudo dnf install -y polkit fuse fuse3 mesa-libEGL mesa-dri-drivers fontconfig freetype libX11 libXext libXrender libXfixes libXcursor libXi libXrandr harfbuzz xorg-x11-server-Xvfb + sudo dnf install -y polkit fuse fuse3 mesa-libEGL mesa-dri-drivers libglvnd-opengl fontconfig freetype libX11 libXext libXrender libXfixes libXcursor libXi libXrandr harfbuzz xorg-x11-server-Xvfb elif command -v pacman >/dev/null 2>&1; then - sudo pacman -Sy --noconfirm polkit fuse2 mesa fontconfig freetype2 libx11 libxext libxrender libxfixes libxcursor libxi libxrandr harfbuzz xorg-server-xvfb + sudo pacman -Sy --noconfirm polkit fuse2 mesa libglvnd fontconfig freetype2 libx11 libxext libxrender libxfixes libxcursor libxi libxrandr harfbuzz xorg-server-xvfb fi sudo tee /etc/polkit-1/rules.d/49-ci-pkexec.rules >/dev/null <<'POLKIT' From 240b3611d5d1412fc7fc3fb15886a5502c3ab39f Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Mon, 9 Feb 2026 23:18:19 +0000 Subject: [PATCH 14/16] Install libglvnd/mesa GL on Fedora VM Co-authored-by: Inoki --- .github/workflows/uefi-linux-vm-smoke.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/uefi-linux-vm-smoke.yml b/.github/workflows/uefi-linux-vm-smoke.yml index d542e16..705192c 100644 --- a/.github/workflows/uefi-linux-vm-smoke.yml +++ b/.github/workflows/uefi-linux-vm-smoke.yml @@ -181,7 +181,7 @@ jobs: fi if command -v dnf >/dev/null 2>&1; then - sudo dnf install -y polkit fuse fuse3 mesa-libEGL mesa-dri-drivers libglvnd-opengl fontconfig freetype libX11 libXext libXrender libXfixes libXcursor libXi libXrandr harfbuzz xorg-x11-server-Xvfb + sudo dnf install -y polkit fuse fuse3 mesa-libEGL mesa-dri-drivers libglvnd libglvnd-opengl mesa-libGL fontconfig freetype libX11 libXext libXrender libXfixes libXcursor libXi libXrandr harfbuzz xorg-x11-server-Xvfb elif command -v pacman >/dev/null 2>&1; then sudo pacman -Sy --noconfirm polkit fuse2 mesa libglvnd fontconfig freetype2 libx11 libxext libxrender libxfixes libxcursor libxi libxrandr harfbuzz xorg-server-xvfb fi From 5fcc6239a9a7acc0a908db0e0a4dc43d9af9c989 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Wed, 11 Feb 2026 19:05:24 +0000 Subject: [PATCH 15/16] Document pkexec launcher behavior Co-authored-by: Inoki --- qefientrymanager-launcher | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/qefientrymanager-launcher b/qefientrymanager-launcher index 0a3caa6..d141c67 100755 --- a/qefientrymanager-launcher +++ b/qefientrymanager-launcher @@ -1,5 +1,6 @@ #!/usr/bin/env bash +# Resolve the bundled binary path first; avoid relying on PATH after pkexec launcher_path="$(readlink -f "${BASH_SOURCE[0]}")" launcher_dir="$(dirname "${launcher_path}")" target="${launcher_dir}/QEFIEntryManager" @@ -16,6 +17,7 @@ append_env() { fi } +# Preserve the minimum GUI/session vars that pkexec strips append_env XDG_CURRENT_DESKTOP append_env XDG_SESSION_TYPE append_env QT_QPA_PLATFORM @@ -24,19 +26,24 @@ append_env QT_STYLE_OVERRIDE append_env DBUS_SESSION_BUS_ADDRESS if [[ -n "${WAYLAND_DISPLAY:-}" ]]; then + # Wayland: pass both runtime dir and display socket append_env XDG_RUNTIME_DIR append_env WAYLAND_DISPLAY else + # X11: pass display and auth cookie append_env DISPLAY append_env XAUTHORITY fi if [[ "${EUID}" -eq 0 ]]; then + # If already root, run directly without re-exec exec "${target}" "$@" fi if [[ -n "${APPIMAGE:-}" && -x "${APPIMAGE}" ]]; then + # Re-exec the AppImage as root to avoid pkexec PATH/FUSE issues exec pkexec env "${env_array[@]}" APPIMAGE_EXTRACT_AND_RUN=1 "${APPIMAGE}" "$@" fi +# Fallback for non-AppImage installs exec pkexec env "${env_array[@]}" "${target}" "$@" From a942fb4776f6e931e8c54f7bb881c5001b5ddd5f Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Wed, 11 Feb 2026 19:12:08 +0000 Subject: [PATCH 16/16] Clarify AppImage FUSE behavior in launcher Co-authored-by: Inoki --- qefientrymanager-launcher | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/qefientrymanager-launcher b/qefientrymanager-launcher index d141c67..8aa4087 100755 --- a/qefientrymanager-launcher +++ b/qefientrymanager-launcher @@ -41,7 +41,10 @@ if [[ "${EUID}" -eq 0 ]]; then fi if [[ -n "${APPIMAGE:-}" && -x "${APPIMAGE}" ]]; then - # Re-exec the AppImage as root to avoid pkexec PATH/FUSE issues + # AppImages mount their SquashFS via FUSE under the calling user. + # After pkexec, root often cannot read that user FUSE mount unless + # allow_root/allow_other is set, so we re-exec the AppImage as root + # and force extract+run to bypass the mount. exec pkexec env "${env_array[@]}" APPIMAGE_EXTRACT_AND_RUN=1 "${APPIMAGE}" "$@" fi