Como fazer o Ubuntu mudar o papel de parede quando o monitor está desconectado?

2

Eu tenho um laptop e, na maioria das vezes, ele é conectado a um monitor. Mas este monitor tem uma resolução diferente da tela do meu laptop, então a imagem de fundo que eu uso no meu monitor não cabe na tela do meu laptop. Existe alguma maneira que eu possa fazer o Ubuntu mudar os papéis de parede quando meu monitor está conectado / desconectado?

    
por Julian 27.04.2015 / 18:13

1 resposta

2

Será necessário um script de segundo plano para saber se o segundo monitor está conectado ou não.

O script abaixo verifica a cada cinco segundos, se for o caso, e define o papel de parede de acordo. O script também lembra o papel de parede definido para os dois estados (conectado / desconectado) em um arquivo oculto. O arquivo é atualizado automaticamente se você alterar o papel de parede para qualquer uma das situações.

Como usar

  1. Copie o script em um arquivo vazio, salve-o como change_wallpaper.py
  2. Na seção head do script, defina o nome de sua segunda tela (execute o comando xrandr de uma janela de terminal para ver o nome da tela na saída). Deixei "VGA-0" como exemplo.
  3. Inicie o script com o comando (do terminal):

    python3 /path/to/change_wallpaper.py
    
  4. Conecte a segunda tela, aguarde alguns segundos e defina o papel de parede. (o papel de parede deve ser mudado para lembrar). Novamente espere alguns segundos. Desconecte o segundo monitor, defina o papel de parede para a situação do monitor único.

Se o papel de parede estiver definido para as duas situações, o script deve alterar o papel de parede automaticamente. Se você mudar o papel de parede como de costume, o script irá lembrá-lo para a situação correspondente (conectado / desconectado)

Se tudo funcionar bem, adicione-o aos seus aplicativos de inicialização: Dash > Aplicativos de inicialização > Adicione o comando:

/bin/bash -c "sleep 15&&python3 /path/to/change_wallpaper.py"

O script:

#!/usr/bin/env python3
import subprocess
import os
import time

#--- set the name of your secundary screen below
second = "VGA-0"
#---
# the script uses the key org.gnome.desktop.background picture-uri to set/change the wallpaper
key = ["gsettings get ", "gsettings set ",
    "org.gnome.desktop.background picture-uri"]
# set the name of the wallpaper- datafile(s)    
wallbody = os.environ["HOME"]+"/.wallpaperset"
# define the string to be found (or not) in the output of xrandr
tocheck = second+" connected"

def set_wallpaper(w):
    try:
        cmd = key[1]+key[2]+' "'+open(wallbody+str(w)).read().strip()+'"'
        subprocess.Popen(["/bin/bash", "-c", cmd])
    except FileNotFoundError:
        pass

check = lambda cmd: subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8")
# first call of xrandr, and get the current wallpaper
xr1 = tocheck in check("xrandr")
if xr1 == True:
    set_wallpaper(2)
else:
    set_wallpaper(1)
wall1 = check(key[0]+key[2])

while True:
    time.sleep(5)
    # second call of xrandr, and get the current wallpaper
    xr2 = tocheck in check("xrandr")
    wall2 = check(key[0]+key[2])
    # if the second screen either connects or disconnects, change the wallpaper
    if (xr1, xr2).count(True) == 1:
        w = 2 if xr2 == True else 1
        set_wallpaper(w)
    # if wallpaper is changed, remember the new wallpaper
    elif wall2 != wall1:
        w = 2 if xr2 == True else 1
        open(wallbody+str(w), "wt").write(wall2)
    xr1 = xr2
    wall1 = wall2
    
por Jacob Vlijm 27.04.2015 / 22:17