Papéis de parede diferentes em vários monitores

16

Eu tenho um laptop e um monitor. Na maioria das vezes, meu laptop está conectado ao monitor através de HDMI. Eu uso o Ubuntu Gnome 14.04 e aqui está o que eu quero:

  • Quando nenhum monitor está conectado, quero uma imagem de fundo simples
  • Quando o monitor está conectado, gostaria de ter a mesma imagem de fundo no meu laptop e outra no meu monitor.

Isso é possível? Eu encontrei esta pergunta , bem como o nitrogênio . Mas ambos não me ajudaram.

Editar:

Após executar o gnome-tweak-tool, vá para a guia "Área de trabalho" no painel esquerdo e desative a configuração "O gerenciador de arquivos lida com a área de trabalho".

Fonte: Fóruns do Ubuntu .

Infelizmente, não consigo encontrar isso na minha Gnome-Tweak-Tool: ferramenta-gnome-tweak

Eu tentei encontrar a mesma configuração usando dconf-editorunder, org.gnome.desktop.backgroundmas tudo o que disse foi:

Resumo: Desenhar o plano de fundo da área de trabalho
Descrição: Faça o GNOME desenhar o plano de fundo da área de trabalho. DEPRECADO : Essa chave foi preterida e ignorada.

Também gnome-shell --versioné o meu GNOME Shell 3.10.4.

Nesta essência está a saída de xrandr. O primeiro é com o segundo monitor conectado. O segundo é sem ele.

byf-ferdy
fonte
Ao usar o Nitrogen, você desativou o gerenciador de arquivos da área de trabalho?
Kaz Wolfe
Não consegui mais encontrar a opção na Ferramenta Gnome-Tweak. Eu adicionei informações adicionais à minha pergunta. Espero que ajude
BYF-ferdy
@Whaaaaaat nitro é apenas para 13.10 e inferior : /
blade19899
Acho que consegui alguma coisa, quais são as resoluções das suas telas?
Jacob Vlijm
ambos 1920 x 1080 (16: 9). Laptop é 19 '' eu acho, Monitor 27 ''.
Byf-ferdy

Respostas:

10

O truque

Parece impossível definir papéis de parede separadamente para a tela principal e a segunda tela. No entanto, o que pode ser feito é definir um papel de parede e estendê-lo em duas telas. Podemos criar automaticamente uma imagem estendida de dois papéis de parede de sua escolha e (também automaticamente) alternar o papel de parede e as opções de imagem, dependendo de a segunda tela estar conectada ou não.
Para torná-la agradável, é necessário que pelo menos a resolução vertical da tela seja idêntica, como é o caso da sua situação.

insira a descrição da imagem aqui

Na prática

Preparação

Nesta solução, o trabalho de preparação que você deve fazer é:

  • Primeiro, instale o imagemagick para criar automaticamente a imagem de abrangência:

    sudo apt-get install imagemagick
    
  • Prepare duas imagens de fundo separadas de sua escolha para as duas telas:

    • As dimensões devem corresponder exatamente às dimensões da tela (16: 9 no seu caso)
    • A resolução vertical de ambas as imagens deve ser exatamente a mesma.

    chame-os screen_1.jpege screen_2.jpeg(exatamente esses nomes). Um script criará a imagem de abrangência.

  • Crie uma pasta no seu diretório pessoal e copie as duas imagens para a pasta.

  • Copie o script abaixo em um arquivo vazio e salve-o como auto_wall.py, junto com as duas imagens que você preparou.

  • Na seção principal do script, há uma linha:

    screen_check = "HDMI-0 connected"
    

    se necessário, substitua HDMI-0por <your_second_screenname>(execute o comando xrandrse necessário para descobrir)

Execute o script (e mantenha-o em execução em segundo plano) pelo comando:

python3 /path/to/auto_wall.py

Agora, se você conectar sua segunda tela, o papel de parede da segunda tela deverá mudar dentro de alguns segundos para screen_2.jpegvocê estar preparado.

  • Se tudo funcionar bem, adicione-o aos aplicativos de inicialização.

O script

#!/usr/bin/env python3

import subprocess
import os
import time

curr_dir = os.path.dirname(os.path.abspath(__file__))
screen_check = "HDMI-0 connected"

single_picture = "'file://"+curr_dir+"/screen_1.jpeg'"
double_picture = "'file://"+curr_dir+"/span_image.jpeg'"

def execute_set(command):
    subprocess.call(["/bin/bash", "-c", command])

def execute_get(command):
    return subprocess.check_output(["/bin/bash", "-c", command]).decode("utf-8").strip()

def switch_tosingle():
    execute_set("gsettings set org.gnome.desktop.background picture-uri "+single_picture)
    execute_set("gsettings set org.gnome.desktop.background picture-options zoom")

def switch_todouble():
    if not os.path.exists(double_picture):
        create_spanimage()
    execute_set("gsettings set org.gnome.desktop.background picture-uri "+double_picture)
    execute_set("gsettings set org.gnome.desktop.background picture-options spanned")

def create_spanimage():
    image_1 = curr_dir+"/"+"screen_1.jpeg"
    image_2 = curr_dir+"/"+"screen_2.jpeg"
    span_image = curr_dir+"/"+"span_image.jpeg"
    execute_set("convert "+image_1+" "+image_2+" "+"+append "+span_image)

def check_ifconnected():
    command = "xrandr"
    check = execute_get(command)
    if screen_check in check:
        return True

def check_wallpaper():
    check = execute_get("gsettings get org.gnome.desktop.background picture-uri")
    if check == single_picture:
        return "single"
    elif check == double_picture:
        return "double"

def arrange():
    test = (check_ifconnected(), check_wallpaper())
    if test == (True, "double") or test == (False, "single"):
        pass
    elif test[0] == True:
        switch_todouble()
    else:
        switch_tosingle()

while True:
    arrange()
    time.sleep(5)

Substituindo imagens

Caso deseje alterar os papéis de parede, substitua uma ou ambas as imagens que você copiou para a pasta (mas lembre-se do nome) e remova a span_image.jpeg, criada pelo script.

Eu testei no Ubuntu 14.04 e 14.10, e funcionou perfeitamente. O fato de você usar o Gnome não deve fazer diferença.

Alternando manualmente as configurações do papel de parede com uma combinação de teclas

Se, por algum motivo, você preferir alternar para o papel de parede estendido manualmente após conectar / desconectar o monitor externo, poderá substituir as três últimas linhas:

while True:
    arrange()
    time.sleep(5)

por uma única linha:

arrange()

e adicione um atalho de teclado para fazer a troca: "Configurações do sistema"> "Teclado"> "Atalhos"> "Atalhos personalizados"

Adicione o comando:

python3 /path/to/auto_wall.py

para uma combinação de teclas de sua escolha.

Jacob Vlijm
fonte
Isso parece incrível. Vou verificar o mais rápido possível e que você saiba! Obrigado pelo trabalho de qualquer maneira!
Byf-ferdy 10/10
@ byf-ferdy oops, acidentalmente deixei meu próprio diretório (testing) em script, corrigi-lo agora.
Jacob Vlijm 10/10
Ótimo trabalho! Funciona perfeitamente!
Byf-ferdy
11
Obrigado pela boa pergunta! É isso que eu gosto de fazer.
Jacob Vlijm
1

Além da resposta acima, você pode juntar duas imagens de tamanho exato usando este serviço: http://www.photojoiner.net/

Depois de juntar duas ou mais imagens, você deve selecionar a opção "extensão" na página de configurações de plano de fundo.

onesvat
fonte