Skip to content

[Bug] Linux 桌面端无法将剪贴板图片粘贴到聊天输入框(WebKitGTK 2.52.5) #40

Description

@duanluan

问题描述

在 Linux 桌面版 Pi Agent v0.4.1 中,无法通过 Ctrl+V 将剪贴板里的图片粘贴到聊天输入框。

文本粘贴正常,剪贴板也明确提供了 image/pngimage/jpeg 等格式。复现时 Agent 处于空闲状态,因此不是运行期间禁止添加图片附件的限制。

当前 main 分支中的 ChatInput.tsx 仍然只从 clipboardData.items 获取图片:

https://github.com/abcwyc/pi-agent-desktop/blob/main/components/ChatInput.tsx#L1228-L1235

复现步骤

  1. 在 Linux 桌面环境中复制一张截图或位图到剪贴板。
  2. 启动 Pi Agent Desktop v0.4.1。
  3. 新建会话并确认 Agent 处于空闲状态。
  4. 点击聊天输入框。
  5. 按 Ctrl+V。

实际结果

界面没有任何变化,也没有错误提示或图片预览。

X11 剪贴板能够提供图片格式:

image/png
image/jpeg
image/webp
image/bmp

使用最小 WebKitGTK 页面监听 paste 事件时,事件会触发,但其中的数据为空:

{
  "types": [],
  "items": [],
  "files": []
}

因此现有的 handlePaste() 无法获得任何 image/* 条目。

预期结果

粘贴图片后,聊天输入框上方应显示图片附件预览,并允许随下一条消息发送。

环境

  • Pi Agent Desktop: v0.4.1
  • Linux: Arch Linux
  • 桌面环境: KDE Plasma
  • 会话类型: X11
  • webkit2gtk-4.1: 2.52.5-2
  • GTK3: 3.24.52
  • 安装来源: AUR pi-agent-desktop-bin
    • 该包直接重新打包官方 .deb,没有修改前端粘贴逻辑

已完成的排查

  1. Agent 空闲时仍然可以稳定复现。
  2. 剪贴板确实包含 image/png 等图片目标。
  3. 在 Chromium 页面中注入标准 image/png ClipboardEvent 后,现有代码能够生成图片预览,说明附件处理逻辑本身可用。
  4. 独立 WebKitGTK 2.52.5 页面收到的 paste 事件中,types/items/files 全部为空。
  5. WEBKIT_DISABLE_DMABUF_RENDERER 等渲染设置不会改变结果。
  6. WebKit 官方已有相同问题:

https://bugs.webkit.org/show_bug.cgi?id=320303

该问题同时在 WebKitGTK 2.52.5、Wayland、Epiphany 和 MiniBrowser 中复现,目前状态为 NEW

建议修复方式

应用已经初始化了官方 Tauri clipboard-manager 插件:

https://github.com/abcwyc/pi-agent-desktop/blob/main/src-tauri/src/lib.rs

但当前 capability 只允许读取和写入文本,没有允许读取图片:

https://github.com/abcwyc/pi-agent-desktop/blob/main/src-tauri/capabilities/desktop-dialog.json

建议:

  1. 增加以下权限:
"clipboard-manager:allow-read-image"
  1. Linux 桌面端收到 paste 事件但 clipboardData.items 没有图片时,调用 @tauri-apps/plugin-clipboard-managerreadImage()
  2. 读取图片的 RGBA 数据和尺寸,通过 Canvas/ImageData 转换成 PNG Blob/File。
  3. 将生成的 File 继续交给现有 processImageFiles(),复用大小、数量和预览处理。
  4. 只在桌面端且浏览器 ClipboardEvent 没有图片时启用回退,避免影响普通文本粘贴。

Tauri 官方 clipboard-manager 的 readImage() 支持 Linux,因此不需要等待 WebKitGTK 修复:

https://github.com/tauri-apps/plugins-workspace/tree/v2/plugins/clipboard-manager

是否可以接受这个修复方向?如果方向合适,我可以进一步准备 PR。

Activity

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

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions