You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Ubuntu 18.04下在Workspace 1抓取Workspace 2截图的Python可行性问询

可行!分两种场景实现你的需求

针对你的Ubuntu 18.04环境(默认Xorg桌面),完全可以实现无需切换工作区抓取Workspace 2截图,以及特定事件触发切换到Workspace 2的需求,下面是具体实现方案:

一、无需切换工作区抓取Workspace 2的截图

Pyscreenshot本身默认抓取当前显示的屏幕,但结合X11桌面的虚拟桌面机制,我们可以通过工具定位Workspace 2的虚拟区域,直接抓取其内容。步骤如下:

1. 安装依赖工具

首先安装所需的命令行工具和Python库:

sudo apt update && sudo apt install wmctrl xdotool python3-pyscreenshot python3-pil

2. 获取Workspace 2的虚拟桌面信息

wmctrl -d命令查看所有工作区的信息,输出示例:

0  * DG: 1920x1080  VP: 0,0  WA: 0,27 1920x1053  Workspace 1
1  - DG: 1920x1080  VP: 0,0  WA: 0,27 1920x1053  Workspace 2

这里1就是Workspace 2的编号(注意:工作区编号从0开始),DG是虚拟桌面的总尺寸,WA是可用区域(去掉顶部状态栏后的尺寸)。

3. Python脚本抓取Workspace 2截图

我们可以通过调用xwd(X11窗口抓取工具)获取整个虚拟桌面的内容,再用PIL裁剪出Workspace 2的区域;或者直接用Pyscreenshot结合工作区坐标抓取。下面是示例脚本:

import subprocess
import pyscreenshot as ImageGrab
from PIL import Image

def get_workspace_geom(workspace_num):
    # 调用wmctrl获取工作区几何信息
    result = subprocess.run(["wmctrl", "-d"], capture_output=True, text=True)
    lines = result.stdout.strip().split("\n")
    for line in lines:
        parts = line.split()
        if parts[0] == str(workspace_num):
            # 解析DG(虚拟桌面尺寸)和VP(偏移)
            dg = parts[3].split("x")
            return (0, 0, int(dg[0]), int(dg[1]))  # 因为每个工作区是独立虚拟桌面,偏移为0,0
    return None

# 抓取Workspace 2(编号1)的截图
workspace_geom = get_workspace_geom(1)
if workspace_geom:
    # 抓取整个虚拟桌面
    img = ImageGrab.grab(bbox=workspace_geom)
    # 保存截图
    img.save("workspace2_screenshot.png")
    print("Workspace 2截图已保存!")
else:
    print("未找到Workspace 2")

注意:如果你的桌面环境中工作区是横向排列的,虚拟桌面的宽度可能是多个屏幕的总和,此时需要根据工作区编号计算偏移。比如两个1920x1080的屏幕,Workspace 2的偏移是1920,0,此时bbox应为(1920, 0, 3840, 1080)。

二、特定事件触发切换到Workspace 2

当需要在特定事件(比如某个函数调用、定时器触发)时切换到Workspace 2,可以用xdotool命令实现,Python中通过subprocess调用即可:

示例代码片段

import subprocess

def switch_to_workspace2():
    # Workspace 2的编号是1(根据wmctrl -d的输出调整)
    subprocess.run(["xdotool", "set_desktop", "1"], check=True)
    print("已切换到Workspace 2")

# 模拟特定事件触发
if some_condition:  # 替换为你的触发条件
    switch_to_workspace2()

关键注意事项

  • 确保你的Ubuntu 18.04使用的是Xorg桌面(默认是Xorg,若手动切换到Wayland,上述工具可能无法正常工作)。
  • 工作区编号可能因桌面配置不同而变化,务必用wmctrl -d确认准确编号。
  • 如果遇到权限问题,确保当前用户有访问X11显示的权限(通常无需额外设置,除非是远程桌面环境)。

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

火山引擎 最新活动