El truco
Parece imposible establecer fondos de pantalla por separado para la pantalla principal y la segunda pantalla. Sin embargo, lo que se puede hacer es establecer un fondo de pantalla y que abarque dos pantallas. Podemos crear automáticamente una imagen extendida de dos fondos de pantalla de su elección y (también automáticamente) cambiar el fondo de pantalla y las opciones de imagen, dependiendo de si la segunda pantalla está conectada o no.
Para que se vea bien, es necesario que al menos la resolución de pantalla vertical de ambas pantallas sea idéntica, como es el caso en su situación.
En la práctica
Preparación
En esta solución, el trabajo de preparación que debe hacer es:
Primero, instale imagemagick para crear automáticamente la imagen de expansión:
sudo apt-get install imagemagick
Prepare dos imágenes de fondo separadas de su elección para ambas pantallas:
- Las dimensiones deben coincidir exactamente con las dimensiones de la pantalla (16: 9 en su caso)
- La resolución vertical de ambas imágenes debe ser exactamente la misma.
llámalos screen_1.jpeg
y screen_2.jpeg
(exactamente esos nombres). Un guión creará la imagen de expansión.
Cree una carpeta en su directorio personal y copie ambas imágenes en la carpeta.
Copie el script a continuación en un archivo vacío y guárdelo como auto_wall.py
, junto con las dos imágenes que preparó.
En la sección principal del guión, hay una línea:
screen_check = "HDMI-0 connected"
si es necesario, reemplácelo HDMI-0
por <your_second_screenname>
(ejecute el comando xrandr
si es necesario para averiguarlo)
Ejecute el script (y manténgalo ejecutándose en segundo plano) mediante el comando:
python3 /path/to/auto_wall.py
Ahora, si conecta su segunda pantalla, el fondo de pantalla en su segunda pantalla debería cambiar en unos segundos para que screen_2.jpeg
esté preparado.
- Si todo funciona bien, agréguelo a sus aplicaciones de inicio.
La secuencia de comandos
#!/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)
Reemplazar imágenes
En caso de que desee cambiar los fondos de pantalla, simplemente reemplace una o ambas imágenes que copió a la carpeta (pero tenga en cuenta el nombre) y elimine las span_image.jpeg
creadas por el script.
Lo probé en Ubuntu 14.04 y 14.10, y funcionó perfectamente. El hecho de que uses Gnome no debería marcar la diferencia.
Cambiar la configuración del fondo de pantalla manualmente con una combinación de teclas
Si, por algún motivo, prefiere cambiar al fondo de pantalla extendido manualmente después de conectar / desconectar el monitor externo, puede reemplazar las últimas tres líneas:
while True:
arrange()
time.sleep(5)
por una sola línea:
arrange()
y agregue un atajo de teclado para hacer el cambio: "Configuración del sistema"> "Teclado"> "Atajos"> "Atajos personalizados"
Agrega el comando:
python3 /path/to/auto_wall.py
a una combinación de teclas de su elección.