Screenshot apenas monitor ativo (gnome-screenshot)

3

Pressionar printscreen ou clicar na captura de tela irá capturar as duas telas, e se eu quiser apenas que a exibição do monitor ativo seja capturada, é possível? Ou devo usar o obturador ou sth?

Portanto, não são espaços da mesma tela, mas duas telas do sistema de dois monitores.

    
por Mookey 28.05.2016 / 09:55

2 respostas

2

Para filmar apenas a tela atual não é o comportamento padrão, nem é uma opção em gnome-screenshot , nem qualquer outro aplicativo de captura de tela, até onde eu sei.

Como praticamente qualquer coisa, no entanto, pode ser roteirizado.

Um exemplo

O script mais abaixo será:

  • tire uma captura de tela
  • cria automaticamente uma imagem (numerada) em um diretório arbitrário
  • recorte automaticamente a imagem para a seção da tela em que você está atualmente (recuperado da posição do mouse), e crie uma imagem recortada chamada:

    cropped_<image>.png
    

Para evitar a substituição de capturas de tela anteriores, essas imagens recortadas são numeradas como seus oroginals.

screenshot

seeuestivernatelaesquerda:

seeuestivernateladadireita:

Oscript

#!/usr/bin/env python3 import os from PIL import Image import subprocess # ---set the name of your (automatically numbered) screenshots (no extension) imagename = "screenshot" # ---set the path to where you (want to) save your screenshots savepath = "/home/jacob/Bureaublad" def get(cmd): return subprocess.check_output(cmd).decode("utf-8") n = 1 while True: name = imagename+"_"+str(n)+".png" path = os.path.join(savepath, name) if os.path.exists(path): n += 1 else: break # make the shot subprocess.call(["gnome-screenshot", "-f", path]) # get the width of the left screen screenborder = [int(n) for n in [s for s in get("xrandr").split()\ if "+0+0" in s][0].split("+")[0].split("x")] # read the screenshot im = Image.open(path) width, height = im.size # get the mouse position mousepos = int(get(["xdotool", "getmouselocation"]).split()[0].split(":")[1]) top = 0 bottom = height if mousepos <= screenborder[0]: left = 0 right = screenborder[0] else: left = screenborder[0] right = width # create the image im.crop((left, top, right, bottom)).save(os.path.join(savepath, "cropped_"+name))

Como usar

  1. O script precisa de xdotool para obter a posição do mouse:

    sudo apt-get install xdotool
    

    Além disso, não tenho certeza se python3-pil está instalado por padrão:

    sudo apt-get install python3-pil
    
  2. Copie o script acima em um arquivo vazio, salve-o como crop_screenshot.py
  3. Na seção principal do script, defina o nome desejado da captura de tela e o diretório que você usa para suas capturas de tela:

    # ---set the name of your (automatically numbered) screenshots (no extension)
    imagename = "screenshot"
    # ---set the path to where you (want to) save your screenshots
    savepath = "/home/jacob/Bureaublad"
    
  4. Teste- execute o script a partir de um terminal:

    python3 /path/to/crop_screenshot.py
    

    O resultado:

  5. Setudofuncionarbem,adicione-oaumatalho.Escolha:Configuraçõesdosistema>"Teclado" > "Atalhos" > "Atalhos personalizados". Clique no botão "+" e adicione o comando:

    python3 /path/to/crop_screenshot.py
    

Nota

O script, como é, simplesmente divide a imagem na largura da tela esquerda. Isso é suficiente, porque suas telas são da mesma resolução y e alinhadas.

O script pode, no entanto, ser muito bem editado para trabalhar com qualquer arranjo de telas, com qualquer número de telas, desde que as telas estejam organizadas em um arranjo sem sobreposição. A matemática é um pouco mais complicada nesse caso, no entanto.

Se alguém estiver interessado, eu adicionarei mais tarde.

    
por Jacob Vlijm 28.05.2016 / 11:29
1

Não suportando o elegante script acima, no Ubuntu 16.04 eu achei que a tela alt-print, como descrito em: O Print Screen captura dois Espaços, não um trabalho. Na verdade, isso apenas imprime a janela atual. Se o objetivo é capturar um histórico, não acho que funcionará.

    
por user75505 05.12.2017 / 18:15