Skip to content

Linux ScreenCast:Portal 资源回收、应用身份及多屏 UInput 坐标问题 #1584

Open

Description

@hiuyt

使用场景

Linux KDE Wayland,ScreenCast Portal + PipeWire 截图,UInput 输入。

问题

当前 main 源码

  • source/MaaToolkit/Portal/PortalHelper.cpp 的 close_internal() 清空 session handle 和 FD 数字,只 unref 共享 D-Bus connection,没有发送 Session.Close。
  • 同文件 dbus_open_pipewire_remote():dbus_message_get_args 返回的 UNIX_FD 已是独立描述符,随后又 dup,原描述符未释放。
  • source/MaaLinuxControlUnit/Manager/LinuxControlUnitMgr.cpp:输入初始化失败时,已初始化的截图对象仍然保留。
  • source/MaaLinuxControlUnit/Input/UInput.cpp:ABS_X/ABS_Y 使用截图尺寸作为范围,直接发送截图坐标,没有所选显示器的桌面位置映射。

复现

  1. 以 Portal + UInput 配置创建 Linux 控制器,省略 UInput 尺寸,检查输入初始化失败后的共享 session。
  2. 在扩展双屏桌面上选择单个屏幕截图,填入该屏幕尺寸并连接,比较识别坐标与实际点击的显示器。
  3. 检查授权对话框中的应用名称,以及释放控制器后是否结束共享。

预期

失败路径及时释放截图和 FD;Portal session 跟随实际使用者回收;可识别调用应用;所选截图屏幕与输入坐标一致。Session.Close 的修复需同步调整客户端 helper 的持有期限,避免在控制器连接前提前关闭 session。

Activity

  1. hiuyt commented on Oct 23, 2026

    @hiuyt
    ContributorAuthor

    已提交两个独立修复:

    Portal session 的完整生命周期、应用身份注册和双屏坐标映射仍由本 Issue 跟踪,以上两个 PR 不宣称修复这三项。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions