Il trucco
Sembra impossibile impostare separatamente gli sfondi per la schermata principale e la seconda schermata. Ciò che si può fare, tuttavia, è impostare uno sfondo e farlo estendere su due schermi. Possiamo creare automaticamente un'immagine di spanning di due sfondi a tua scelta e (anche automaticamente) cambiare lo sfondo e le opzioni dell'immagine, a seconda che il secondo schermo sia collegato o meno.
Per renderlo piacevole, è necessario che almeno la risoluzione verticale dello schermo di entrambi gli schermi sia identica, come nel caso della tua situazione.
In pratica
Preparazione
In questa soluzione, il lavoro di preparazione che devi fare è:
Innanzitutto, installa imagemagick per creare automaticamente l'immagine di spanning:
sudo apt-get install imagemagick
Prepara due immagini di sfondo separate di tua scelta per entrambi gli schermi:
- Le dimensioni devono corrispondere esattamente alle dimensioni dello schermo (16: 9 nel tuo caso)
- La risoluzione verticale di entrambe le immagini dovrebbe essere esattamente la stessa.
chiamali screen_1.jpeg
e screen_2.jpeg
(esattamente quei nomi). Uno script creerà l'immagine di spanning.
Crea una cartella nella tua home directory e copia entrambe le immagini nella cartella.
Copia lo script seguente in un file vuoto e salvalo come auto_wall.py
, insieme alle due immagini che hai preparato.
Nella sezione head dello script, c'è una riga:
screen_check = "HDMI-0 connected"
se necessario, sostituisci HDMI-0
con <your_second_screenname>
(esegui il comando xrandr
se necessario per scoprirlo)
Esegui lo script (e mantienilo in esecuzione in background) con il comando:
python3 /path/to/auto_wall.py
Ora, se colleghi la seconda schermata, lo sfondo della seconda schermata dovrebbe passare in pochi secondi a screen_2.jpeg
te pronto.
- Se tutto funziona bene, aggiungilo alle tue applicazioni di avvio.
Il copione
#!/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)
Sostituzione di immagini
Nel caso in cui si desideri cambiare lo / gli sfondo / i, è sufficiente sostituire una o entrambe le immagini copiate nella cartella (ma attenzione al nome) e rimuovere il span_image.jpeg
, creato dallo script.
L'ho provato su Ubuntu 14.04 e 14.10 e ha funzionato perfettamente. Il fatto che usi Gnome non dovrebbe fare la differenza.
Cambio manuale delle impostazioni dello sfondo con una combinazione di tasti
Se, per qualche motivo, preferisci passare manualmente allo sfondo con spanning dopo aver collegato / scollegato il monitor esterno, puoi sostituire le ultime tre righe:
while True:
arrange()
time.sleep(5)
da una sola riga:
arrange()
e aggiungi una scorciatoia da tastiera per eseguire il passaggio: "Impostazioni di sistema"> "Tastiera"> "Scorciatoie"> "Scorciatoie personalizzate"
Aggiungi il comando:
python3 /path/to/auto_wall.py
a una combinazione chiave di tua scelta.