You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Wayland XDG远程桌面门户restore_token在Python3中无法获取的问题求助

Wayland XDG远程桌面门户restore_token在Python3中无法获取的问题求助

各位开发者朋友好,我现在基于一个GNOME的示例项目做开发,遇到了个棘手的问题——没法在Python3里获取到Wayland XDG远程桌面门户的restore_token,想请大家帮忙排查下原因。

先跟大家说下我的操作和代码情况:

  1. 我最初的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) })
  1. 之后我参照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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 13:28:07