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 via HDMI. Eu uso o Ubuntu Gnome 14.04 e aqui está o que eu quero:

  • Quando nenhum monitor está conectado, quero uma imagem de plano 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 questão bem como nitrogênio . Mas os dois não me ajudaram.

Editar:

After running gnome-tweak-tool, go to the "Desktop" tab in the left-side panel and then turn off the setting "Have file manager handle the desktop".

Fonte: Fóruns do Ubuntu .

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

Eutenteiencontraramesmaconfiguraçãousandodconf-editoremorg.gnome.desktop.background,mastudooquefoiditofoi:

Summary:DrawDesktopBackground
Description:HaveGNOMEdrawthedesktopbackground.DEPRECATED:Thiskeyisdeprecatedandignored.

Alémdisso,meugnome-shell--versionéGNOMEShell3.10.4.

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

    
por byf-ferdy 02.10.2014 / 20:46

2 respostas

9

O truque

Parece impossível definir papéis de parede separadamente para a tela principal e a segunda tela. O que pode ser feito, no entanto, é definir um papel de parede e tê-lo dividido em duas telas. Podemos criar automaticamente uma imagem abrangente 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 se a segunda tela está conectada ou não.
Para fazer com que pareça bonito, é necessário que pelo menos a resolução da tela vertical de ambas as telas seja idêntica, o que é o caso em sua situação.

Naprática

Preparação

Nestasolução,otrabalhodepreparaçãoquevocêprecisafazeré:

  • Primeiro,instaleoimagemagickparacriarautomaticamenteaimagemdeabrangência:

    sudoapt-getinstallimagemagick
  • Prepareduasimagensdeplanodefundoseparadasdesuaescolhaparaasduastelas:

    • Asdimensõesdevemexatamentecorresponderàsdimensõesdatela(16:9noseucaso)
    • Aresoluçãoverticaldasduasimagensdeveserexatamenteamesma.

    chame-osdescreen_1.jpegescreen_2.jpeg(exatamenteessesnomes).Umscriptcriaráaimagemdeabrangência.

  • Crieumapastanoseudiretóriopessoalecopieasduasimagensparaapasta.

  • Copieoscriptabaixoemumarquivovazioesalve-ocomoauto_wall.py,juntocomasduasimagensquevocêpreparou.

  • Naseçãoprincipaldoscript,háumalinha:

    screen_check="HDMI-0 connected"
    

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

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

python3 /path/to/auto_wall.py

Agora, se você conectar sua segunda tela, o papel de parede na segunda tela deverá mudar em alguns segundos para screen_2.jpeg que você preparou.

  • Se tudo funcionar bem, adicione-o aos seus 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)

Substituir imagens

Caso você queira alterar o (s) papel de parede (s), apenas substitua uma ou ambas as imagens que você copiou para a pasta (mas lembre-se do nome) e remova o span_image.jpeg criado 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.

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

Se, por algum motivo, você preferir alternar manualmente para o papel de parede expandido depois de 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 mudança: "Configurações do sistema" > "Teclado" > "Atalhos" > "Atalhos personalizados"

Adicione o comando:

python3 /path/to/auto_wall.py

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

    
por Jacob Vlijm 10.10.2014 / 19:56
1

Além da resposta acima, você pode unir duas imagens de tamanho exato usando este serviço: link

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

    
por onesvat 10.12.2015 / 18:37