Diferentes fondos de pantalla en múltiples monitores

16

Tengo una computadora portátil y un monitor. La mayoría de las veces mi computadora portátil está conectada al monitor a través de HDMI. Yo uso Ubuntu Gnome 14.04 y esto es lo que quiero:

  • Cuando no hay un monitor conectado, quiero una imagen de fondo simple
  • Cuando el monitor está conectado, me gustaría tener la misma imagen de fondo en mi computadora portátil y otra en mi monitor.

¿Es eso posible? Encontré esta pregunta , así como el nitrógeno . Pero ambos no me ayudaron.

Editar:

Después de ejecutar gnome-tweak-tool, vaya a la pestaña "Escritorio" en el panel del lado izquierdo y luego desactive la opción "Hacer que el administrador de archivos maneje el escritorio".

Fuente: Foros de Ubuntu .

Desafortunadamente, no puedo encontrar esto en mi herramienta de ajuste de gnomos: gnome-tweak-tool

Traté de encontrar la misma configuración usando dconf-editorunder org.gnome.desktop.backgroundpero todo lo que dijo fue:

Resumen: Dibuje el fondo del escritorio
Descripción: Haga que GNOME dibuje el fondo del escritorio. DEPRECATED : esta clave está en desuso y se ignora.

También mi gnome-shell --versiones GNOME Shell 3.10.4.

En esta esencia es la salida de xrandr. El primero es con el segundo monitor conectado. El segundo es sin él.

byf-ferdy
fuente
Cuando usó Nitrógeno, ¿deshabilitó el administrador de archivos para que no entregara el escritorio?
Kaz Wolfe
Ya no pude encontrar la opción en Gnome-Tweak-Tool. He agregado información adicional a mi pregunta. Espero que ayude
byf-ferdy
@Whaaaaaat nitro es solo para 13.10 e inferior : /
blade19899
Creo que tengo algo, ¿cuáles son las resoluciones de sus pantallas?
Jacob Vlijm
ambos 1920x1080 (16: 9). El portátil mide 19 '', creo, Monitor 27 ''.
byf-ferdy

Respuestas:

10

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.

ingrese la descripción de la imagen aquí

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.jpegy 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-0por <your_second_screenname>(ejecute el comando xrandrsi 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.jpegesté 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.jpegcreadas 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.

Jacob Vlijm
fuente
Esto se ve asombroso. ¡Lo comprobaré tan pronto como pueda y te lo haré saber! Gracias por el trabajo de todos modos!
byf-ferdy
@ byf-ferdy oops, accidentalmente dejé mi propio directorio (prueba) en el script, lo arreglé ahora.
Jacob Vlijm
¡Buen trabajo! Funciona perfectamente!
byf-ferdy
1
Gracias por la buena pregunta! Esto es lo que me gusta hacer.
Jacob Vlijm
1

Además de la respuesta anterior, puede unir dos imágenes de tamaño exacto utilizando este servicio: http://www.photojoiner.net/

Después de unir dos o más imágenes, debe seleccionar la opción "abarcar" en la página de configuración de fondo.

onesvat
fuente