Как заставить Ubuntu менять обои при отключенном мониторе?
У меня есть ноутбук, и в большинстве случаев я использую его, он подключен к монитору. Но разрешение этого монитора отличается от разрешения экрана моего ноутбука, поэтому фоновое изображение, которое я использую на своем мониторе, не помещается на экране моего ноутбука. Можно ли как-то заставить Ubuntu менять обои, когда мой монитор подключен / отключен?
1 ответ
Для отслеживания того, подключен второй монитор или нет, потребуется фоновый скрипт.
Сценарий ниже проверяет каждые пять секунд, если это так, и соответственно устанавливает обои.
Скрипт также запоминает установленные обои для двух состояний (подключен / отключен) в скрытом файле. Файл автоматически обновляется, если вы меняете обои для одной из ситуаций.
Как пользоваться
- Скопируйте скрипт в пустой файл, сохраните его как
change_wallpaper.py
- В разделе заголовка скрипта установите название вашего второго экрана (запустите команду
xrandr
из окна терминала, чтобы увидеть имя экрана в выводе). Я ушел"VGA-0"
В качестве примера. Запустите скрипт командой (из терминала):
python3 /path/to/change_wallpaper.py
Подключите второй экран, подождите несколько секунд и установите обои. (обои должны быть изменены, чтобы запомнить это). Снова подожди несколько секунд. Отключите второй монитор, установите обои для ситуации с одним монитором.
Если обои установлены для обеих ситуаций, скрипт должен автоматически менять обои. Если вы поменяете обои как обычно, скрипт запомнит их для соответствующей ситуации (подключен / отключен)
Если все работает нормально, добавьте его в "Автозагрузка приложений": Dash > "Автозагрузка приложений"> Добавить команду:
/bin/bash -c "sleep 15&&python3 /path/to/change_wallpaper.py"
Сценарий:
#!/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