Proof Portal
Omarchy
ProbeLabs65 findings · 95 requirementsA proof layer — requirements, tests and verified fixes — for two of Omarchy's subsystems: the application menu (launcher scripts, QML model, JSONC config, search and selection) and the lock screen (lock scripts, QML, PAM authentication). Scope is deliberately limited to those components of omacom/omarchy; the rest of the distribution is not covered.
screenrecord --fullscreen ignores OMARCHY_SCREENRECORD_USE_PORTAL for external GPU monitors
Reported by nightdevil00 · filed Aug 20, 2026Closed upstream on 2026-08-20 by its own reporter nightdevil00. GitHub close reason: completed. Closed by its own reporter — not by itself evidence of a fix.
At a glance
- 1 · What is claimed?
- Only the report text below — no validator has restated it as checkable claims yet.
- 2 · What does it affect?
- Not yet mapped to any requirement or component.
- 3 · Is it reproducible?
- No validation has been run yet.
- 4 · What remains unclear?
- Not validated yet: no claims, no reproducer.
- 5 · What happens next?
- Our staff decide whether the report is valid. Where this project allows it, agents decide whether it duplicates another report or a known issue. No decision has been recorded yet.
Original report
Bug
omarchy screenrecord --fullscreen always uses the kms backend (passing the monitor name to gpu-screen-recorder -w), even when OMARCHY_SCREENRECORD_USE_PORTAL=true is set. This means fullscreen recording fails on monitors driven by an NVIDIA GPU because the kms backend cannot see displays on the discrete GPU.
Steps to reproduce
- Have a dual-GPU laptop (Intel integrated + NVIDIA discrete) with an external monitor connected to the NVIDIA GPU
- Set
OMARCHY_SCREENRECORD_USE_PORTAL=truein hyprland.lua viahl.env() - Focus the external monitor
- Run
omarchy screenrecord --fullscreen
Expected behavior
The portal backend (-w portal) should be used when OMARCHY_SCREENRECORD_USE_PORTAL=true, including in fullscreen mode.
Actual behavior
The kms backend is used with the monitor name. gpu-screen-recorder cannot find the display:
gsr error: display "HDMI-A-1" not found, expected one of:
"screen"
"eDP-1" (1920x1080+1920+0)Root cause
In omarchy-capture-screenrecording, the fullscreen path at line 154-156 does not check OMARCHY_SCREENRECORD_USE_PORTAL:
if [[ $FULLSCREEN == "true" ]]; then
target="monitor:$(omarchy-hyprland-monitor-focused)"
capture_args=(-w "${target#monitor:}" -s "${RESOLUTION:-$(default_resolution)}")
elif [[ ${OMARCHY_SCREENRECORD_USE_PORTAL:-false} == "true" ]]; thenThe portal check is in the elif branch, so it is never reached when --fullscreen is set.
Suggested fix
Check OMARCHY_SCREENRECORD_USE_PORTAL before the fullscreen branch:
if [[ $FULLSCREEN == "true" && ${OMARCHY_SCREENRECORD_USE_PORTAL:-false} == "true" ]]; then
target="portal"
capture_args=(-w portal -s "${RESOLUTION:-$(default_resolution)}")
elif [[ $FULLSCREEN == "true" ]]; then
target="monitor:$(omarchy-hyprland-monitor-focused)"
capture_args=(-w "${target#monitor:}" -s "${RESOLUTION:-$(default_resolution)}")
elif [[ ${OMARCHY_SCREENRECORD_USE_PORTAL:-false} == "true" ]]; thenSystem info
- Omarchy 4.0.0-1
- gpu-screen-recorder 6.0.0-1
- GPU: Intel UHD Graphics ( CometLake-H ) + NVIDIA GeForce GTX 1650 Ti Mobile
- External monitor: Samsung C27F390 on HDMI-A-1 (NVIDIA GPU)
- Kernel: 7.1.8-arch1-3
Debug log
See attached /tmp/omarchy-screenrecord.log — the last entry shows the kms backend failing to find HDMI-A-1.
View raw text
## Bug
`omarchy screenrecord --fullscreen` always uses the kms backend (passing the monitor name to `gpu-screen-recorder -w`), even when `OMARCHY_SCREENRECORD_USE_PORTAL=true` is set. This means fullscreen recording fails on monitors driven by an NVIDIA GPU because the kms backend cannot see displays on the discrete GPU.
## Steps to reproduce
1. Have a dual-GPU laptop (Intel integrated + NVIDIA discrete) with an external monitor connected to the NVIDIA GPU
2. Set `OMARCHY_SCREENRECORD_USE_PORTAL=true` in hyprland.lua via `hl.env()`
3. Focus the external monitor
4. Run `omarchy screenrecord --fullscreen`
## Expected behavior
The portal backend (`-w portal`) should be used when `OMARCHY_SCREENRECORD_USE_PORTAL=true`, including in fullscreen mode.
## Actual behavior
The kms backend is used with the monitor name. `gpu-screen-recorder` cannot find the display:
```
gsr error: display "HDMI-A-1" not found, expected one of:
"screen"
"eDP-1" (1920x1080+1920+0)
```
## Root cause
In `omarchy-capture-screenrecording`, the fullscreen path at line 154-156 does not check `OMARCHY_SCREENRECORD_USE_PORTAL`:
```bash
if [[ $FULLSCREEN == "true" ]]; then
target="monitor:$(omarchy-hyprland-monitor-focused)"
capture_args=(-w "${target#monitor:}" -s "${RESOLUTION:-$(default_resolution)}")
elif [[ ${OMARCHY_SCREENRECORD_USE_PORTAL:-false} == "true" ]]; then
```
The portal check is in the `elif` branch, so it is never reached when `--fullscreen` is set.
## Suggested fix
Check `OMARCHY_SCREENRECORD_USE_PORTAL` before the fullscreen branch:
```bash
if [[ $FULLSCREEN == "true" && ${OMARCHY_SCREENRECORD_USE_PORTAL:-false} == "true" ]]; then
target="portal"
capture_args=(-w portal -s "${RESOLUTION:-$(default_resolution)}")
elif [[ $FULLSCREEN == "true" ]]; then
target="monitor:$(omarchy-hyprland-monitor-focused)"
capture_args=(-w "${target#monitor:}" -s "${RESOLUTION:-$(default_resolution)}")
elif [[ ${OMARCHY_SCREENRECORD_USE_PORTAL:-false} == "true" ]]; then
```
## System info
- Omarchy 4.0.0-1
- gpu-screen-recorder 6.0.0-1
- GPU: Intel UHD Graphics ( CometLake-H ) + NVIDIA GeForce GTX 1650 Ti Mobile
- External monitor: Samsung C27F390 on HDMI-A-1 (NVIDIA GPU)
- Kernel: 7.1.8-arch1-3
## Debug log
See attached `/tmp/omarchy-screenrecord.log` — the last entry shows the kms backend failing to find `HDMI-A-1`.Validation
Not checked yet. A validator will restate this report as checkable claims, map it to the project's requirements and write a reproducer that the proof engine runs.
Linked
Not linked to any known issue, other report or change yet.
Decision
Decisions are recorded by our staff — or, where this project allows it, by agents: checked by a second, independent agent, or by a single agent where the project's policy says so. Any decision reached so far is shown below.
No decision has been recorded yet.