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

如何统计当前KDE活动及虚拟桌面内的活跃窗口总数

问题原因

xdotool 原生的 --desktop 参数仅能识别X11协议层面的虚拟桌面标记,而KDE Activities是KDE独立实现的窗口隔离逻辑,不会将窗口的Activity归属信息写入X11原生桌面属性,因此直接调用该参数会跨Activity返回所有匹配桌面的窗口,无法按Activity做筛选。

实现方案

KDE会在每个窗口上写入自定义X属性 _KDE_NET_WM_ACTIVITIES,存储该窗口归属的Activity UUID列表,我们可以先获取目标Activity的ID,再通过该属性过滤窗口完成统计:

  • 获取目标Activity的UUID
    统计当前激活Activity下的窗口时,可直接执行以下命令拿到当前Activity ID:
    qdbus org.kde.ActivityManager /ActivityManager/Activities CurrentActivity
    
    如果需要统计其他指定Activity的窗口,可先执行以下命令拿到系统内所有Activity的ID列表,再替换为目标ID即可:
    qdbus org.kde.ActivityManager /ActivityManager/Activities ListActivities
    
  • 筛选窗口并统计数量
    搭配 xprop 读取每个窗口的Activity归属属性做匹配,以下是统计「X11虚拟桌面2 + 目标Activity」下可见窗口数量的完整可执行脚本:
    # 可替换为你需要统计的任意Activity ID
    TARGET_ACT=$(qdbus org.kde.ActivityManager /ActivityManager/Activities CurrentActivity)
    window_count=0
    
    # 枚举所有可见、归属X11虚拟桌面2的窗口ID
    for wid in $(xdotool search --onlyvisible --desktop 2); do
        # 读取当前窗口的KDE Activity归属属性
        act_attr=$(xprop -id "$wid" _KDE_NET_WM_ACTIVITIES | cut -d '"' -f2)
        # 属性为空代表窗口在所有Activity下显示,属性包含目标ID代表窗口属于目标Activity
        if [ -z "$act_attr" ] || [[ "$act_attr" == *"$TARGET_ACT"* ]]; then
            window_count=$((window_count+1))
        fi
    done
    
    echo "目标范围窗口总数:$window_count"
    
补充说明
  • 如果不需要限制X11虚拟桌面范围,仅统计目标Activity下的所有可见窗口,删除 xdotool search 命令中的 --desktop 2 参数即可。
  • 针对焦点bug场景,要实现「仅当目标范围存在窗口时才执行Alt+Tab切换」,只需要在统计完成后加判断逻辑即可:
    if [ $window_count -gt 0 ]; then
        xdotool key alt+Tab
    fi
    
  • 以上方案仅适用于KDE的X11会话,如果你使用Wayland会话,xdotool 无法正常工作,可以替换为适配KDE Wayland的窗口控制工具(如kdotool),核心筛选逻辑不变,替换对应窗口枚举、属性读取的命令即可。

内容的提问来源于stack exchange,提问作者Alsaraha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 05:57:17