Closed MTRNord closed 9 months ago
Fedora Workstation:
Fedora 38 Gnome 44.1 Wayland
Same here, regular Fedora 38 Workstation.
Kooha was definetely my most loved screen recorder. Now I'm stuck
Same issue here, using the Kooha flatpak on Fedora 38 Silverblue with Wayland.
Kooha was a dream come true for simple screen recording on GNOME, it was so easy to use. I look forward to when it works again. In the meantime I'll just be sticking with good ol' trusty OBS Studio, even though it's rather overkill for what I need (just recording and narrating some coding and gaming videos with my kids for fun).
Edit: I guess it might be related to a lack of cropping support sway's desktop portal implementation https://github.com/emersion/xdg-desktop-portal-wlr/pull/156
Fedora 38 Kinoite (like Silverblue but KDE defaults) with Sway/Wayland, kooha installed from flatpak. Recording the entire screen works but a single region does not (I guess this is probably a limitation of the desktop portal rather than anything else). The recording starts and immediately goes into Paused state. Logs are:
2023-11-15T12:31:44.969783Z INFO kooha::application: Kooha (io.github.seadve.Kooha)
2023-11-15T12:31:44.969795Z INFO kooha::application: Version: 2.2.4 ()
2023-11-15T12:31:44.969798Z INFO kooha::application: Datadir: /app/share/kooha
2023-11-15T12:31:51.839843Z DEBUG kooha::screencast_session: Waiting request response for method `CreateSession`
2023-11-15T12:31:51.840047Z DEBUG kooha::screencast_session: Request response received for method `CreateSession`
2023-11-15T12:31:51.840056Z DEBUG kooha::screencast_session: Created screencast session response=Variant { ptr: 0x55e249b2c020, type: VariantTy { inner: "a{sv}" }, value: "{'session_handle': <'/org/freedesktop/portal/desktop/session/1_310/kooha_0'>}" }
2023-11-15T12:31:51.840069Z DEBUG kooha::recording: ScreenCast portal version: Ok(4)
2023-11-15T12:31:51.840072Z DEBUG kooha::recording: Available cursor modes: Ok(CursorMode(HIDDEN | EMBEDDED))
2023-11-15T12:31:51.840076Z DEBUG kooha::recording: Available source types: Ok(SourceType(MONITOR))
2023-11-15T12:31:51.843102Z DEBUG kooha::screencast_session: Waiting request response for method `SelectSources`
2023-11-15T12:31:51.843295Z DEBUG kooha::screencast_session: Request response received for method `SelectSources`
2023-11-15T12:31:51.843312Z DEBUG kooha::screencast_session: Selected sources response=Variant { ptr: 0x55e249256d40, type: VariantTy { inner: "a{sv}" }, value: "@a{sv} {}" }
2023-11-15T12:31:51.844444Z DEBUG kooha::screencast_session: Waiting request response for method `Start`
2023-11-15T12:31:51.847545Z DEBUG kooha::screencast_session: Request response received for method `Start`
2023-11-15T12:31:51.847575Z DEBUG kooha::screencast_session: Started screencast session response=Variant { ptr: 0x55e248b9c500, type: VariantTy { inner: "a{sv}" }, value: "{'restore_token': <'b2903dde-7355-4b0d-b1e2-d8ead699841b'>, 'streams': <[(uint32 87, {'position': <(0, 0)>, 'size': <(2560, 1600)>, 'source_type': <uint32 2>})]>}" }
2023-11-15T12:31:51.849464Z DEBUG kooha::screencast_session: Opened pipe wire remote response=(handle 0,) fd_list=[10]
2023-11-15T12:31:51.852859Z DEBUG kooha::pipeline: pipewiresrc needs copy: false
[I][96463.322936] pw.context | [ pipewire.c: 647 pw_init()] version 0.3.81
[I][96463.323777] pw.conf | [ conf.c: 404 conf_load()] 0x55e249f01da0: loaded config '/usr/share/pipewire/client.conf' with 5 items
[I][96463.323807] pw.conf | [ conf.c: 957 pw_conf_section_for_each()] handle config '/usr/share/pipewire/client.conf' section 'context.properties'
[I][96463.323823] pw.context | [ context.c: 245 pw_context_new()] 0x55e249f03480: parsed 1 context.properties items
[I][96463.324063] pw.conf | [ conf.c: 957 pw_conf_section_for_each()] handle config '/usr/share/pipewire/client.conf' section 'context.spa-libs'
[I][96463.324090] pw.context | [ context.c: 346 pw_context_new()] 0x55e249f03480: parsed 2 context.spa-libs items
[I][96463.324102] pw.conf | [ conf.c: 957 pw_conf_section_for_each()] handle config '/usr/share/pipewire/client.conf' section 'context.modules'
[I][96463.324115] pw.module | [ impl-module.c: 157 pw_context_load_module()] 0x55e249f03480: name:libpipewire-module-protocol-native args:(null)
[I][96463.324334] pw.conf | [ conf.c: 581 load_module()] 0x55e249f03480: loaded module libpipewire-module-protocol-native
[I][96463.324348] pw.module | [ impl-module.c: 157 pw_context_load_module()] 0x55e249f03480: name:libpipewire-module-client-node args:(null)
[I][96463.324573] pw.conf | [ conf.c: 581 load_module()] 0x55e249f03480: loaded module libpipewire-module-client-node
[I][96463.324587] pw.module | [ impl-module.c: 157 pw_context_load_module()] 0x55e249f03480: name:libpipewire-module-client-device args:(null)
[I][96463.324713] pw.conf | [ conf.c: 581 load_module()] 0x55e249f03480: loaded module libpipewire-module-client-device
[I][96463.324727] pw.module | [ impl-module.c: 157 pw_context_load_module()] 0x55e249f03480: name:libpipewire-module-adapter args:(null)
[I][96463.324878] pw.conf | [ conf.c: 581 load_module()] 0x55e249f03480: loaded module libpipewire-module-adapter
[I][96463.324892] pw.module | [ impl-module.c: 157 pw_context_load_module()] 0x55e249f03480: name:libpipewire-module-metadata args:(null)
[I][96463.325027] pw.conf | [ conf.c: 581 load_module()] 0x55e249f03480: loaded module libpipewire-module-metadata
[I][96463.325039] pw.module | [ impl-module.c: 157 pw_context_load_module()] 0x55e249f03480: name:libpipewire-module-session-manager args:(null)
[I][96463.325184] pw.conf | [ conf.c: 581 load_module()] 0x55e249f03480: loaded module libpipewire-module-session-manager
[I][96463.325197] pw.context | [ context.c: 350 pw_context_new()] 0x55e249f03480: parsed 6 context.modules items
[I][96463.325208] pw.context | [ context.c: 355 pw_context_new()] 0x55e249f03480: parsed 0 context.objects items
[I][96463.325219] pw.context | [ context.c: 358 pw_context_new()] 0x55e249f03480: parsed 0 context.exec items
[W][96463.325257] default | [ thread.c: 105 impl_acquire_rt()] acquire_rt thread:0x7fd7b11fc6c0 prio:-1 not implemented
[I][96463.325274] pw.metadata | [ impl-metadata.c: 186 impl_set_property()] 0x55e249f17a80: add id:0 key:log.level type: value:0
[I][96463.325286] pw.metadata | [ impl-metadata.c: 186 impl_set_property()] 0x55e249f17a80: add id:0 key:clock.rate type: value:48000
[I][96463.325297] pw.metadata | [ impl-metadata.c: 186 impl_set_property()] 0x55e249f17a80: add id:0 key:clock.allowed-rates type: value:[ 48000 ]
[I][96463.325307] pw.metadata | [ impl-metadata.c: 186 impl_set_property()] 0x55e249f17a80: add id:0 key:clock.quantum type: value:1024
[I][96463.325318] pw.metadata | [ impl-metadata.c: 186 impl_set_property()] 0x55e249f17a80: add id:0 key:clock.min-quantum type: value:32
[I][96463.325327] pw.metadata | [ impl-metadata.c: 186 impl_set_property()] 0x55e249f17a80: add id:0 key:clock.max-quantum type: value:2048
[I][96463.325338] pw.metadata | [ impl-metadata.c: 186 impl_set_property()] 0x55e249f17a80: add id:0 key:clock.force-quantum type: value:0
[I][96463.325348] pw.metadata | [ impl-metadata.c: 186 impl_set_property()] 0x55e249f17a80: add id:0 key:clock.force-rate type: value:0
[I][96463.325441] pw.conf | [ conf.c: 957 pw_conf_section_for_each()] handle config '/usr/share/pipewire/client.conf' section 'stream.properties'
0:00:06.894598898 2 0x7fd7ac001280 FIXME default gstutils.c:4036:gst_pad_create_stream_id_internal:<pipewiresrc0:src> Creating random stream-id, consider implementing a deterministic way of creating a stream-id
[I][96463.328078] pw.stream | [ stream.c: 884 parse_latency()] stream 0x55e249f36010: set output latency 0.000000-0.000000 0-0 0-0
[I][96463.347834] pw.stream | [ stream.c: 651 impl_send_command()] 0x55e249f36010: command Spa:Pod:Object:Command:Node:Start
[I][96463.347962] pw.node | [ impl-node.c: 408 node_update_state()] (kooha-95) creating -> running
2023-11-15T12:31:51.899512Z DEBUG kooha::area_selector: Pipeline changed state from `Null` -> `Ready`
2023-11-15T12:31:51.899573Z DEBUG kooha::area_selector: Pipeline changed state from `Ready` -> `Paused`
0:00:06.955526714 2 0x7fd7ac0016e0 FIXME basesink gstbasesink.c:3395:gst_base_sink_default_event:<gtk4paintablesink0> stream-start event without group-id. Consider implementing group-id handling in the upstream elements
2023-11-15T12:31:51.934661Z DEBUG kooha::area_selector: Pipeline changed state from `Paused` -> `Playing`
2023-11-15T12:31:53.595650Z DEBUG kooha::area_selector::view_port: Drag begin at (2.578125238418579, 33.25390625)
2023-11-15T12:31:54.506099Z DEBUG kooha::area_selector::view_port: Drag end offset (206.78124976158142, 223.3671875)
[I][96466.903832] pw.stream | [ stream.c: 651 impl_send_command()] 0x55e249f36010: command Spa:Pod:Object:Command:Node:Pause
[I][96466.903908] pw.node | [ impl-node.c: 408 node_update_state()] (kooha-95) running -> idle
[I][96466.907215] pw.stream | [ stream.c: 651 impl_send_command()] 0x55e249f36010: command Spa:Pod:Object:Command:Node:Suspend
[I][96466.907432] pw.node | [ impl-node.c: 408 node_update_state()] (kooha-95) idle -> suspended
[I][96466.907544] pw.node | [ impl-node.c: 2042 pw_impl_node_destroy()] (kooha-95) destroy
2023-11-15T12:31:57.442976Z DEBUG kooha::pipeline: file_path=/home/user/Videos/Kooha/Kooha-2023-11-15-12-31-57.gif framerate=24 profile=GifProfile stream_len=1 streams=[Stream { node_id: 87, id: None, position: Some((0, 0)), size: Some((2560, 1600)), source_type: Some(SourceType(WINDOW)) }] speaker_source=None mic_source=None select_area_data=Some(Data { selection: Selection { x: 2.5781252, y: 33.253906, width: 206.78125, height: 223.36719 }, paintable_rect: Rect { x: 0.0, y: 1.5, width: 906.0, height: 566.25 }, stream_size: (2560, 1600) })
2023-11-15T12:31:57.443624Z DEBUG kooha::pipeline: raw_top_crop=89.72406005859375 raw_left_crop=7.284769058227539 raw_right_crop=1968.4326171875 raw_bottom_crop=879.1280517578125
2023-11-15T12:31:57.443632Z DEBUG kooha::pipeline: top_crop=90 left_crop=8 right_crop=1968 bottom_crop=880
2023-11-15T12:31:57.445399Z DEBUG kooha::pipeline: pipewiresrc needs copy: false
[I][96468.917184] pw.conf | [ conf.c: 404 conf_load()] 0x55e249a2eff0: loaded config '/usr/share/pipewire/client.conf' with 5 items
[I][96468.917226] pw.conf | [ conf.c: 957 pw_conf_section_for_each()] handle config '/usr/share/pipewire/client.conf' section 'context.properties'
[I][96468.917238] pw.context | [ context.c: 245 pw_context_new()] 0x55e249dd7550: parsed 1 context.properties items
[I][96468.917494] pw.conf | [ conf.c: 957 pw_conf_section_for_each()] handle config '/usr/share/pipewire/client.conf' section 'context.spa-libs'
[I][96468.917520] pw.context | [ context.c: 346 pw_context_new()] 0x55e249dd7550: parsed 2 context.spa-libs items
[I][96468.917530] pw.conf | [ conf.c: 957 pw_conf_section_for_each()] handle config '/usr/share/pipewire/client.conf' section 'context.modules'
[I][96468.917541] pw.module | [ impl-module.c: 157 pw_context_load_module()] 0x55e249dd7550: name:libpipewire-module-protocol-native args:(null)
[I][96468.917787] pw.conf | [ conf.c: 581 load_module()] 0x55e249dd7550: loaded module libpipewire-module-protocol-native
[I][96468.917801] pw.module | [ impl-module.c: 157 pw_context_load_module()] 0x55e249dd7550: name:libpipewire-module-client-node args:(null)
[I][96468.918030] pw.conf | [ conf.c: 581 load_module()] 0x55e249dd7550: loaded module libpipewire-module-client-node
[I][96468.918044] pw.module | [ impl-module.c: 157 pw_context_load_module()] 0x55e249dd7550: name:libpipewire-module-client-device args:(null)
[I][96468.918165] pw.conf | [ conf.c: 581 load_module()] 0x55e249dd7550: loaded module libpipewire-module-client-device
[I][96468.918178] pw.module | [ impl-module.c: 157 pw_context_load_module()] 0x55e249dd7550: name:libpipewire-module-adapter args:(null)
[I][96468.918318] pw.conf | [ conf.c: 581 load_module()] 0x55e249dd7550: loaded module libpipewire-module-adapter
[I][96468.918331] pw.module | [ impl-module.c: 157 pw_context_load_module()] 0x55e249dd7550: name:libpipewire-module-metadata args:(null)
[I][96468.918466] pw.conf | [ conf.c: 581 load_module()] 0x55e249dd7550: loaded module libpipewire-module-metadata
[I][96468.918479] pw.module | [ impl-module.c: 157 pw_context_load_module()] 0x55e249dd7550: name:libpipewire-module-session-manager args:(null)
[I][96468.918620] pw.conf | [ conf.c: 581 load_module()] 0x55e249dd7550: loaded module libpipewire-module-session-manager
[I][96468.918634] pw.context | [ context.c: 350 pw_context_new()] 0x55e249dd7550: parsed 6 context.modules items
[I][96468.918644] pw.context | [ context.c: 355 pw_context_new()] 0x55e249dd7550: parsed 0 context.objects items
[I][96468.918653] pw.context | [ context.c: 358 pw_context_new()] 0x55e249dd7550: parsed 0 context.exec items
[W][96468.918690] default | [ thread.c: 105 impl_acquire_rt()] acquire_rt thread:0x7fd79affd6c0 prio:-1 not implemented
[I][96468.918705] pw.metadata | [ impl-metadata.c: 186 impl_set_property()] 0x55e249dd94b0: add id:0 key:log.level type: value:0
[I][96468.918720] pw.metadata | [ impl-metadata.c: 186 impl_set_property()] 0x55e249dd94b0: add id:0 key:clock.rate type: value:48000
[I][96468.918731] pw.metadata | [ impl-metadata.c: 186 impl_set_property()] 0x55e249dd94b0: add id:0 key:clock.allowed-rates type: value:[ 48000 ]
[I][96468.918740] pw.metadata | [ impl-metadata.c: 186 impl_set_property()] 0x55e249dd94b0: add id:0 key:clock.quantum type: value:1024
[I][96468.918749] pw.metadata | [ impl-metadata.c: 186 impl_set_property()] 0x55e249dd94b0: add id:0 key:clock.min-quantum type: value:32
[I][96468.918759] pw.metadata | [ impl-metadata.c: 186 impl_set_property()] 0x55e249dd94b0: add id:0 key:clock.max-quantum type: value:2048
[I][96468.918770] pw.metadata | [ impl-metadata.c: 186 impl_set_property()] 0x55e249dd94b0: add id:0 key:clock.force-quantum type: value:0
[I][96468.918780] pw.metadata | [ impl-metadata.c: 186 impl_set_property()] 0x55e249dd94b0: add id:0 key:clock.force-rate type: value:0
[I][96468.918857] pw.conf | [ conf.c: 957 pw_conf_section_for_each()] handle config '/usr/share/pipewire/client.conf' section 'stream.properties'
0:00:12.488005665 2 0x7fd7ac000db0 FIXME default gstutils.c:4036:gst_pad_create_stream_id_internal:<pipewiresrc1:src> Creating random stream-id, consider implementing a deterministic way of creating a stream-id
[I][96468.921787] pw.stream | [ stream.c: 884 parse_latency()] stream 0x55e249f1c880: set output latency 0.000000-0.000000 0-0 0-0
[I][96468.923039] pw.stream | [ stream.c: 651 impl_send_command()] 0x55e249f1c880: command Spa:Pod:Object:Command:Node:Start
[I][96468.923115] pw.node | [ impl-node.c: 408 node_update_state()] (kooha-95) creating -> running
2023-11-15T12:31:57.454180Z DEBUG kooha::recording: Pipeline changed state from `Null` -> `Ready`
2023-11-15T12:31:57.454297Z DEBUG kooha::recording: Pipeline changed state from `Ready` -> `Paused`
2023-11-15T12:32:01.369078Z DEBUG kooha::recording: Sending eos event to pipeline
2023-11-15T12:32:15.970523Z DEBUG kooha::recording: Cancelling recording
[I][96487.440059] pw.stream | [ stream.c: 651 impl_send_command()] 0x55e249f1c880: command Spa:Pod:Object:Command:Node:Pause
[I][96487.440148] pw.node | [ impl-node.c: 408 node_update_state()] (kooha-95) running -> idle
[I][96487.440258] pw.stream | [ stream.c: 651 impl_send_command()] 0x55e249f1c880: command Spa:Pod:Object:Command:Node:Suspend
[I][96487.440323] pw.node | [ impl-node.c: 408 node_update_state()] (kooha-95) idle -> suspended
[I][96487.440399] pw.node | [ impl-node.c: 2042 pw_impl_node_destroy()] (kooha-95) destroy
2023-11-15T12:32:15.972503Z DEBUG kooha::window: Cancelled recording
2023-11-15T12:32:15.985018Z DEBUG kooha::screencast_session: Closed screencast session response=()
Hope it helps with debugging - I don't see a clear cause why we get the pipeline state from Ready -> Paused.
It seems to be working for me again in kinoite fedora 39. Not sure what changed.
It seems to be working for me again in kinoite fedora 39. Not sure what changed.
Closing this as fixed then, thanks for letting us know
System Info
io.github.seadve.Kooha 2.2.3
Flatpak: true
Experimental: false
Distribution: GNOME 43 (Flatpak runtime)
Desktop Session: plasma
Display Server: wayland
GTK 4.8.3
Libadwaita 1.2.4
GStreamer 1.20.6
Pipewire 0.3.69
Describe the bug It seems to fail to get a buffer of the screen.
To Reproduce Steps to reproduce the behavior:
Expected behavior It should record the screen
Screenshots See above
Additional context