Bug report checklist
Describe the bug
On Wayland under niri, starting a portal-based screencast fails immediately.
vokoscreenNG cannot set the GStreamer pipeline to PLAYING and reports GST_STATE_CHANGE_FAILURE.
PipeWire / GStreamer logs show negotiation failing with:
pipewiresrc ... stream error: no more input formats
streaming stopped, reason not-negotiated (-4)
- PipeWire link negotiation:
negotiating -> error (no more input formats)
On X11 with the same audio-track selection, recording works as expected.
Environment
From vokoscreenNG log header:
- vokoscreenNG: 4.7.4
- Desktop: niri (Wayland session)
- OS: EndeavourOS (Arch-based), x86_64, CPU threads: 16
- Qt: 6.10.1
- GStreamer: 1.26.10
- PulseAudio library: 17.0.0 (pipewire-pulse)
- PipeWire: 1.4.9
Portal packages:
pacman -Qs xdg-desktop-portal
local/xdg-desktop-portal 1.20.3-2
local/xdg-desktop-portal-gnome 49.0-1 (gnome)
local/xdg-desktop-portal-gtk 1.15.3-1
Portal services (confirm no wlr backend is active):
systemctl --user status xdg-desktop-portal xdg-desktop-portal-gnome xdg-desktop-portal-wlr --no-pager
# xdg-desktop-portal: active (running)
# xdg-desktop-portal-gnome: active (running)
# Unit xdg-desktop-portal-wlr.service could not be found.
Log messages
1) vokoscreenNG log
22:40:53 [vokoscreenNG] Desktop session is a Wayland session
22:40:53 [vokoscreenNG] Version: 4.7.4
22:40:53 [vokoscreenNG] Locale: zh_CN
22:40:53 [vokoscreenNG] Log from: 2025-12-29 22:40:53
22:40:53 [vokoscreenNG] Country: China
22:40:53 [vokoscreenNG] Qt: 6.10.1
22:40:53 [vokoscreenNG] GStreamer 1.26.10
22:40:53 [vokoscreenNG] PulseAudio library version: 17.0.0
22:40:53 [vokoscreenNG] Pipewire version: 1.4.9
22:40:53 [vokoscreenNG] Operating system: EndeavourOS
22:40:53 [vokoscreenNG] CPU Architecture: x86_64
22:40:53 [vokoscreenNG] Count CPU: 16
22:40:53 [vokoscreenNG] vokoscreenNG running as: wayland client
22:40:53 [vokoscreenNG] vokoscreenNG running on: wayland
22:40:53 [vokoscreenNG] Desktop: niri
22:40:53 [vokoscreenNG] Systray: Supported
22:40:53 [vokoscreenNG] Icon-Theme: Qogir-Dark
22:40:53 [vokoscreenNG] Styles: QList(kvantum-dark, kvantum, qt5ct-style, qt6ct-style, Windows, Fusion)
22:40:53 [vokoscreenNG] Qt-PluginsPath: /usr/lib/qt6/plugins
22:40:53 [vokoscreenNG] Qt-TranslationsPath: /usr/share/qt6/translations
22:40:53 [vokoscreenNG] Qt-LibraryPath: /usr/lib
22:40:53 [vokoscreenNG] SettingsPath: /home/fengyu/.config/vokoscreenNG/vokoscreenNG.ini
22:40:53 [vokoscreenNG] LogPath: /home/fengyu/.config/vokoscreenNG/log/2025-12-29_22-40-51.log
22:40:53 [vokoscreenNG] Default Videopath: /home/fengyu/视频
22:40:53 [vokoscreenNG] --- Screencast: GStreamer elements ---
22:40:53 [vokoscreenNG] + pipewiresrc
22:40:53 [vokoscreenNG] + videoconvert
22:40:53 [vokoscreenNG] + videorate
22:40:53 [vokoscreenNG] + queue
22:40:53 [vokoscreenNG] + h264parse
22:40:53 [vokoscreenNG] + pulsesrc
22:40:53 [vokoscreenNG] + audioconvert
22:40:53 [vokoscreenNG] + audiorate
22:40:53 [vokoscreenNG] + audioresample
22:40:53 [vokoscreenNG] + audiomixer
22:40:53 [vokoscreenNG] + filesink
22:40:53 [vokoscreenNG] + videocrop
22:40:53 [vokoscreenNG] --- Convert to GIF: GStreamer elements ---
22:40:53 [vokoscreenNG] + filesrc
22:40:53 [vokoscreenNG] + matroskademux
22:40:53 [vokoscreenNG] + h264parse
22:40:53 [vokoscreenNG] + openh264dec
22:40:53 [vokoscreenNG] + queue
22:40:53 [vokoscreenNG] + videoconvert
22:40:53 [vokoscreenNG] - gifenc
22:40:53 [vokoscreenNG] + filesink
22:40:53 [vokoscreenNG] --- Convert to MP4: GStreamer elements ---
22:40:53 [vokoscreenNG] + filesrc
22:40:53 [vokoscreenNG] + matroskademux
22:40:53 [vokoscreenNG] + h264parse
22:40:53 [vokoscreenNG] + queue
22:40:53 [vokoscreenNG] + mp4mux
22:40:53 [vokoscreenNG] + filesink
22:40:53 [vokoscreenNG] + mpegaudioparse
22:40:53 [vokoscreenNG] + opusparse
22:40:53 [vokoscreenNG] --- Convert to WEBM: GStreamer elements ---
22:40:53 [vokoscreenNG] + filesrc
22:40:53 [vokoscreenNG] + matroskademux
22:40:53 [vokoscreenNG] + h264parse
22:40:53 [vokoscreenNG] + openh264dec
22:40:53 [vokoscreenNG] + queue
22:40:53 [vokoscreenNG] + videoconvert
22:40:53 [vokoscreenNG] + vp8enc
22:40:53 [vokoscreenNG] + webmmux
22:40:53 [vokoscreenNG] + filesink
22:40:53 [vokoscreenNG] + uridecodebin
22:40:53 [vokoscreenNG] + audioconvert
22:40:53 [vokoscreenNG] + audiorate
22:40:53 [vokoscreenNG] + vorbisenc
22:40:53 [vokoscreenNG] Formats, video- and audio codec are only for record, not for the player
22:40:53 [vokoscreenNG] Video formats:
22:40:53 [vokoscreenNG] + matroskamux (mkv)
22:40:53 [vokoscreenNG] Video encoder:
22:40:53 [vokoscreenNG] + openh264enc
22:40:53 [vokoscreenNG] Audio encoder:
22:40:53 [vokoscreenNG] + opusenc
22:40:53 [vokoscreenNG] + lamemp3enc
22:40:53 [vokoscreenNG] [Audio] Found: Noise Canceling source Device: rnnoise_source
22:40:53 [vokoscreenNG] [Audio] Found: Monitor of Ellesmere HDMI Audio [Radeon RX 470/480 / 570/580/590] Digital Stereo (HDMI 6) Device: alsa_output.pci-0000_08_00.1.hdmi-stereo-extra5.monitor
22:40:53 [vokoscreenNG] [Audio] Found: Monitor of Starship/Matisse HD Audio Controller 模拟立体声 Device: alsa_output.pci-0000_0a_00.4.analog-stereo.monitor
22:40:53 [vokoscreenNG] [Audio] Found: Starship/Matisse HD Audio Controller 模拟立体声 Device: alsa_input.pci-0000_0a_00.4.analog-stereo
22:40:53 [vokoscreenNG] This screen is the primary screen: HDMI-A-1
22:40:53 [vokoscreenNG] DevicePixelRatio: 1.25 (Normal displays is 1, Retina display is 2)
22:40:53 [vokoscreenNG] myDevicePixelRatio: 1.25
22:40:53 [vokoscreenNG] Screen Resolution width : 2048
22:40:53 [vokoscreenNG] Screen Resolution height : 1152
22:40:53 [vokoscreenNG] Vertical refresh rate of the screen in Hz: 74.968
22:40:53 [vokoscreenNG] Screen orientation QFlags<Qt::ScreenOrientation>(LandscapeOrientation)
22:40:53 [vokoscreenNG] Color depth of the screen: 32
22:40:53 [vokoscreenNG] Model from screen: PHL 245E1
22:40:53 [vokoscreenNG] Manufactur from screen: Philips Consumer Electronics Company
22:40:53 [vokoscreenNG] SerialNumber from screen:
22:41:10 [vokoscreenNG] Start portal fullscreen
22:41:10 [vokoscreenNG] Mouse cursor is recording
22:41:10 [vokoscreenNG] request path /org/freedesktop/portal/desktop/request/1_337/
22:41:10 [vokoscreenNG] [QvkMainWindow_wl] slot_pre_portal_start()
22:42:58 [vokoscreenNG] SecondWaitBeforeRecording: 1
22:42:58 [vokoscreenNG] Free disk space at the beginning of the recording: 319269 MB
22:42:58 [vokoscreenNG] Separated audio tracks: false
22:42:58 [vokoscreenNG] Start record with: pipewiresrc fd=58 path=122 do-timestamp=true ! videoconvert ! videorate ! queue max-size-bytes=1073741824 max-size-time=10000000000 max-size-buffers=1000 ! video/x-raw, framerate=25/1 ! openh264enc qp-min=23 qp-max=23 usage-type=camera complexity=low multi-thread=0 slice-mode=auto ! h264parse ! matroskamux name=mux writing-app=vokoscreenNG_4.7.4 ! filesink location="/home/fengyu/视频/vokoscreenNG-2025-12-29_22-42-58.mkv"
22:42:58 gst-launch-1.0 -e \
pipewiresrc fd=58 path=122 do-timestamp=true \
! videoconvert \
! videorate \
! queue max-size-bytes=1073741824 max-size-time=10000000000 max-size-buffers=1000 \
! video/x-raw, framerate=25/1 \
! openh264enc qp-min=23 qp-max=23 usage-type=camera complexity=low multi-thread=0 slice-mode=auto \
! h264parse \
! matroskamux name=mux writing-app=vokoscreenNG_4.7.4 \
! filesink location="/home/fengyu/视频/vokoscreenNG-2025-12-29_22-42-58.mkv"
22:42:58 [vokoscreenNG] Start was clicked GST_STATE_CHANGE_FAILURE Returncode = 0
22:42:58 [vokoscreenNG] Unable to set the pipeline to the playing state.
22:51:21 [vokoscreenNG] Stop record
22:51:21 [vokoscreenNG] Free disk space at the end of the recording: 319332 MB
2) Additional logs (GStreamer / PipeWire) — for diagnosis
These are extra diagnostic logs that show the failure mode.
GStreamer log (filtered):
WARN pipewiresrc ... error: stream error: no more input formats
WARN basesrc ... error: Internal data stream error.
WARN basesrc ... error: streaming stopped, reason not-negotiated (-4)
PipeWire / portal related journal (trimmed):
pw.context: params Spa:Enum:ParamId:EnumFormat: 1:0 invalid param (output format (no more input formats))
pw.link: (SOURCE -> SINK) negotiating -> error (no more input formats) (configure-configure)
pw.core: ... error -32 ...: no more input formats
mod.client-node: ... error seq:... -32 (no more input formats)
To Reproduce
- Login to a Wayland session with niri.
- Start vokoscreenNG.
- Choose portal/fullscreen (screen sharing portal dialog appears).
- Click Start.
- In the portal dialog, select a monitor/window and click Share.
- Recording fails immediately; pipeline cannot enter PLAYING.
Expected behavior
Recording should start successfully and write a valid video file (with or without audio tracks).
Actual behavior
Recording fails right after granting portal capture permission:
- vokoscreenNG reports it cannot set the pipeline to PLAYING (GST_STATE_CHANGE_FAILURE)
- GStreamer:
not-negotiated
- PipeWire:
no more input formats
Additional context (PipeWire nodes / format negotiation)
Right after clicking Share, two PipeWire nodes appear:
- Source:
niri (video output stream)
- Sink:
vokoscreenNG (video input stream)
Example IDs from one run (IDs change per run):
SOURCE node (Stream/Output/Video): id 122 node.name="niri"
SINK node (Stream/Input/Video): id 94 node.name="vokoscreenNG"
Enumerating formats on the niri source node:
shows (trimmed):
Video:format ... BGRx
Video:size ... 2560x1440
Video:maxFramerate ... 74968/1000
During a failing run, PipeWire repeatedly enumerates many formats (e.g. I420/NV12/Y444_10BE etc.) and ends with:
... output format (no more input formats)
pw.link: (122 -> 94) negotiating -> error (no more input formats)
This looks like no common format can be negotiated between source and sink, resulting in no more input formats.
If you want, I can provide full output of:
pw-cli info <SOURCE_ID> and pw-cli info <SINK_ID>
pw-cli enum-params <SOURCE_ID> 3 and <SINK_ID> 3
pw-dump (full graph)
Bug report checklist
Describe the bug
On Wayland under niri, starting a portal-based screencast fails immediately.
vokoscreenNG cannot set the GStreamer pipeline to PLAYING and reports GST_STATE_CHANGE_FAILURE.
PipeWire / GStreamer logs show negotiation failing with:
pipewiresrc ... stream error: no more input formatsstreaming stopped, reason not-negotiated (-4)negotiating -> error (no more input formats)On X11 with the same audio-track selection, recording works as expected.
Environment
From vokoscreenNG log header:
Portal packages:
Portal services (confirm no wlr backend is active):
Log messages
1) vokoscreenNG log
22:40:53 [vokoscreenNG] Desktop session is a Wayland session 22:40:53 [vokoscreenNG] Version: 4.7.4 22:40:53 [vokoscreenNG] Locale: zh_CN 22:40:53 [vokoscreenNG] Log from: 2025-12-29 22:40:53 22:40:53 [vokoscreenNG] Country: China 22:40:53 [vokoscreenNG] Qt: 6.10.1 22:40:53 [vokoscreenNG] GStreamer 1.26.10 22:40:53 [vokoscreenNG] PulseAudio library version: 17.0.0 22:40:53 [vokoscreenNG] Pipewire version: 1.4.9 22:40:53 [vokoscreenNG] Operating system: EndeavourOS 22:40:53 [vokoscreenNG] CPU Architecture: x86_64 22:40:53 [vokoscreenNG] Count CPU: 16 22:40:53 [vokoscreenNG] vokoscreenNG running as: wayland client 22:40:53 [vokoscreenNG] vokoscreenNG running on: wayland 22:40:53 [vokoscreenNG] Desktop: niri 22:40:53 [vokoscreenNG] Systray: Supported 22:40:53 [vokoscreenNG] Icon-Theme: Qogir-Dark 22:40:53 [vokoscreenNG] Styles: QList(kvantum-dark, kvantum, qt5ct-style, qt6ct-style, Windows, Fusion) 22:40:53 [vokoscreenNG] Qt-PluginsPath: /usr/lib/qt6/plugins 22:40:53 [vokoscreenNG] Qt-TranslationsPath: /usr/share/qt6/translations 22:40:53 [vokoscreenNG] Qt-LibraryPath: /usr/lib 22:40:53 [vokoscreenNG] SettingsPath: /home/fengyu/.config/vokoscreenNG/vokoscreenNG.ini 22:40:53 [vokoscreenNG] LogPath: /home/fengyu/.config/vokoscreenNG/log/2025-12-29_22-40-51.log 22:40:53 [vokoscreenNG] Default Videopath: /home/fengyu/视频 22:40:53 [vokoscreenNG] --- Screencast: GStreamer elements --- 22:40:53 [vokoscreenNG] + pipewiresrc 22:40:53 [vokoscreenNG] + videoconvert 22:40:53 [vokoscreenNG] + videorate 22:40:53 [vokoscreenNG] + queue 22:40:53 [vokoscreenNG] + h264parse 22:40:53 [vokoscreenNG] + pulsesrc 22:40:53 [vokoscreenNG] + audioconvert 22:40:53 [vokoscreenNG] + audiorate 22:40:53 [vokoscreenNG] + audioresample 22:40:53 [vokoscreenNG] + audiomixer 22:40:53 [vokoscreenNG] + filesink 22:40:53 [vokoscreenNG] + videocrop 22:40:53 [vokoscreenNG] --- Convert to GIF: GStreamer elements --- 22:40:53 [vokoscreenNG] + filesrc 22:40:53 [vokoscreenNG] + matroskademux 22:40:53 [vokoscreenNG] + h264parse 22:40:53 [vokoscreenNG] + openh264dec 22:40:53 [vokoscreenNG] + queue 22:40:53 [vokoscreenNG] + videoconvert 22:40:53 [vokoscreenNG] - gifenc 22:40:53 [vokoscreenNG] + filesink 22:40:53 [vokoscreenNG] --- Convert to MP4: GStreamer elements --- 22:40:53 [vokoscreenNG] + filesrc 22:40:53 [vokoscreenNG] + matroskademux 22:40:53 [vokoscreenNG] + h264parse 22:40:53 [vokoscreenNG] + queue 22:40:53 [vokoscreenNG] + mp4mux 22:40:53 [vokoscreenNG] + filesink 22:40:53 [vokoscreenNG] + mpegaudioparse 22:40:53 [vokoscreenNG] + opusparse 22:40:53 [vokoscreenNG] --- Convert to WEBM: GStreamer elements --- 22:40:53 [vokoscreenNG] + filesrc 22:40:53 [vokoscreenNG] + matroskademux 22:40:53 [vokoscreenNG] + h264parse 22:40:53 [vokoscreenNG] + openh264dec 22:40:53 [vokoscreenNG] + queue 22:40:53 [vokoscreenNG] + videoconvert 22:40:53 [vokoscreenNG] + vp8enc 22:40:53 [vokoscreenNG] + webmmux 22:40:53 [vokoscreenNG] + filesink 22:40:53 [vokoscreenNG] + uridecodebin 22:40:53 [vokoscreenNG] + audioconvert 22:40:53 [vokoscreenNG] + audiorate 22:40:53 [vokoscreenNG] + vorbisenc 22:40:53 [vokoscreenNG] Formats, video- and audio codec are only for record, not for the player 22:40:53 [vokoscreenNG] Video formats: 22:40:53 [vokoscreenNG] + matroskamux (mkv) 22:40:53 [vokoscreenNG] Video encoder: 22:40:53 [vokoscreenNG] + openh264enc 22:40:53 [vokoscreenNG] Audio encoder: 22:40:53 [vokoscreenNG] + opusenc 22:40:53 [vokoscreenNG] + lamemp3enc 22:40:53 [vokoscreenNG] [Audio] Found: Noise Canceling source Device: rnnoise_source 22:40:53 [vokoscreenNG] [Audio] Found: Monitor of Ellesmere HDMI Audio [Radeon RX 470/480 / 570/580/590] Digital Stereo (HDMI 6) Device: alsa_output.pci-0000_08_00.1.hdmi-stereo-extra5.monitor 22:40:53 [vokoscreenNG] [Audio] Found: Monitor of Starship/Matisse HD Audio Controller 模拟立体声 Device: alsa_output.pci-0000_0a_00.4.analog-stereo.monitor 22:40:53 [vokoscreenNG] [Audio] Found: Starship/Matisse HD Audio Controller 模拟立体声 Device: alsa_input.pci-0000_0a_00.4.analog-stereo 22:40:53 [vokoscreenNG] This screen is the primary screen: HDMI-A-1 22:40:53 [vokoscreenNG] DevicePixelRatio: 1.25 (Normal displays is 1, Retina display is 2) 22:40:53 [vokoscreenNG] myDevicePixelRatio: 1.25 22:40:53 [vokoscreenNG] Screen Resolution width : 2048 22:40:53 [vokoscreenNG] Screen Resolution height : 1152 22:40:53 [vokoscreenNG] Vertical refresh rate of the screen in Hz: 74.968 22:40:53 [vokoscreenNG] Screen orientation QFlags<Qt::ScreenOrientation>(LandscapeOrientation) 22:40:53 [vokoscreenNG] Color depth of the screen: 32 22:40:53 [vokoscreenNG] Model from screen: PHL 245E1 22:40:53 [vokoscreenNG] Manufactur from screen: Philips Consumer Electronics Company 22:40:53 [vokoscreenNG] SerialNumber from screen: 22:41:10 [vokoscreenNG] Start portal fullscreen 22:41:10 [vokoscreenNG] Mouse cursor is recording 22:41:10 [vokoscreenNG] request path /org/freedesktop/portal/desktop/request/1_337/ 22:41:10 [vokoscreenNG] [QvkMainWindow_wl] slot_pre_portal_start() 22:42:58 [vokoscreenNG] SecondWaitBeforeRecording: 1 22:42:58 [vokoscreenNG] Free disk space at the beginning of the recording: 319269 MB 22:42:58 [vokoscreenNG] Separated audio tracks: false 22:42:58 [vokoscreenNG] Start record with: pipewiresrc fd=58 path=122 do-timestamp=true ! videoconvert ! videorate ! queue max-size-bytes=1073741824 max-size-time=10000000000 max-size-buffers=1000 ! video/x-raw, framerate=25/1 ! openh264enc qp-min=23 qp-max=23 usage-type=camera complexity=low multi-thread=0 slice-mode=auto ! h264parse ! matroskamux name=mux writing-app=vokoscreenNG_4.7.4 ! filesink location="/home/fengyu/视频/vokoscreenNG-2025-12-29_22-42-58.mkv" 22:42:58 gst-launch-1.0 -e \ pipewiresrc fd=58 path=122 do-timestamp=true \ ! videoconvert \ ! videorate \ ! queue max-size-bytes=1073741824 max-size-time=10000000000 max-size-buffers=1000 \ ! video/x-raw, framerate=25/1 \ ! openh264enc qp-min=23 qp-max=23 usage-type=camera complexity=low multi-thread=0 slice-mode=auto \ ! h264parse \ ! matroskamux name=mux writing-app=vokoscreenNG_4.7.4 \ ! filesink location="/home/fengyu/视频/vokoscreenNG-2025-12-29_22-42-58.mkv" 22:42:58 [vokoscreenNG] Start was clicked GST_STATE_CHANGE_FAILURE Returncode = 0 22:42:58 [vokoscreenNG] Unable to set the pipeline to the playing state. 22:51:21 [vokoscreenNG] Stop record 22:51:21 [vokoscreenNG] Free disk space at the end of the recording: 319332 MB2) Additional logs (GStreamer / PipeWire) — for diagnosis
These are extra diagnostic logs that show the failure mode.
GStreamer log (filtered):
PipeWire / portal related journal (trimmed):
To Reproduce
Expected behavior
Recording should start successfully and write a valid video file (with or without audio tracks).
Actual behavior
Recording fails right after granting portal capture permission:
not-negotiatedno more input formatsAdditional context (PipeWire nodes / format negotiation)
Right after clicking Share, two PipeWire nodes appear:
niri(video output stream)vokoscreenNG(video input stream)Example IDs from one run (IDs change per run):
Enumerating formats on the niri source node:
shows (trimmed):
During a failing run, PipeWire repeatedly enumerates many formats (e.g. I420/NV12/Y444_10BE etc.) and ends with:
This looks like no common format can be negotiated between source and sink, resulting in
no more input formats.If you want, I can provide full output of:
pw-cli info <SOURCE_ID>andpw-cli info <SINK_ID>pw-cli enum-params <SOURCE_ID> 3and<SINK_ID> 3pw-dump(full graph)