Wayland XDG远程桌面门户restore_token在Python3中无法获取的问题求助
Wayland XDG远程桌面门户restore_token在Python3中无法获取的问题求助
各位开发者朋友好,我现在基于一个GNOME的示例项目做开发,遇到了个棘手的问题——没法在Python3里获取到Wayland XDG远程桌面门户的restore_token,想请大家帮忙排查下原因。
先跟大家说下我的操作和代码情况:
- 我最初的
on_create_session_response函数是这样的:
def on_create_session_response(response, results): if response != 0: print("Failed to create session: %d"%response) terminate() return global session session = results['session_handle'] print("session %s created"%session) remote_desktop_call(portal.SelectDevices, on_select_devices_response, session, options={ 'types': dbus.UInt32(7) })
- 之后我参照XDG官方文档和OBS Studio的源码,对这个函数做了修改,调整后的代码如下:
def on_create_session_response(response, results): if response != 0: print("Failed to create session: %d"%response) terminate() os._exit(2) return global session session = results['session_handle'] #print(session) print("session %s created"%session) if restore_token is not None: remote_desktop_call(portal.SelectDevices, on_select_devices_response, session, options={ 'types': dbus.UInt32(3), 'restore_token': restore_token ,'persist_mode': dbus.UInt32(2)}) x =GLib.Variant.lookup_value(results,"restore_token",GLib.VariantType("s")) print(x) else: remote_desktop_call(portal.SelectDevices, on_select_devices_response, session, options={ 'types': dbus.UInt32(3), 'restore_token': "NULL" ,'persist_mode': dbus.UInt32(2)})
按照文档和OBS的实现逻辑,我应该能在on_start_response函数的返回结果里拿到restore_token,这个函数的代码是:
def on_start_response(response, results): if response != 0: print("Failed to start: %s"%response) terminate() return print(results) print("streams:") if 'streams' in results: for (node_id, stream_properties) in results['streams']: print("stream {}".format(node_id)) play_pipewire_stream(node_id) else: print("no screen casting") print("devices: {}".format(results['devices']))
但实际运行后,我在results里完全找不到restore_token这个值。我的系统是Ubuntu 23.10 amd64,已经反复对照OBS源码里的screencast-portal.c检查过自己的代码,也调整过打印语句的位置尝试定位问题,但始终拿不到这个token。
有没有朋友遇到过类似的问题?或者能帮我看看代码哪里有疏漏吗?
备注:内容来源于stack exchange,提问作者AlexiK
相关产品推荐
相关产品推荐

