![如何让 Ubuntu 在显示器断开连接时更改壁纸?](https://linux22.com/image/871364/%E5%A6%82%E4%BD%95%E8%AE%A9%20Ubuntu%20%E5%9C%A8%E6%98%BE%E7%A4%BA%E5%99%A8%E6%96%AD%E5%BC%80%E8%BF%9E%E6%8E%A5%E6%97%B6%E6%9B%B4%E6%94%B9%E5%A3%81%E7%BA%B8%EF%BC%9F.png)
我有一台笔记本电脑,大多数时候我都会将它连接到显示器上。但是这台显示器的分辨率与我的笔记本电脑的屏幕不同,所以我在显示器上使用的背景图像不适合我的笔记本电脑屏幕。有什么方法可以让 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