诀窍
似乎不可能分别为主屏幕和第二屏幕设置墙纸。什么可以但是做的是设置壁纸,并且有它跨越了两个屏幕。我们可以自动创建一个由您选择的两个墙纸组成的图像,并(也自动)根据是否连接了第二个屏幕来切换墙纸和图片选项。
为了使它看起来不错,必须至少两个屏幕的垂直屏幕分辨率都相同,在这种情况下就是这种情况。
在实践中
制备
在此解决方案中,您要做的准备工作是:
首先,安装imagemagick以自动创建生成图像:
sudo apt-get install imagemagick
为两个屏幕准备两个单独的背景图像:
- 尺寸应与屏幕尺寸完全匹配(在您的情况下为16:9)
- 两幅图像的垂直分辨率应完全相同。
叫他们screen_1.jpeg
和screen_2.jpeg
(确切的名称)。脚本将创建生成图像。
在主目录中创建一个文件夹,并将两个图像都复制到该文件夹中。
将下面的脚本复制到一个空文件中,并将其auto_wall.py
与准备的两个图像一起保存为。
在脚本的开头部分,有一行:
screen_check = "HDMI-0 connected"
如有必要,请替换HDMI-0
为<your_second_screenname>
(如果需要,请运行命令xrandr
以查找)
通过以下命令运行脚本(并使其在后台运行):
python3 /path/to/auto_wall.py
现在,如果您连接了第二个屏幕,则第二个屏幕上的墙纸将在几秒钟内切换为screen_2.jpeg
您准备的壁纸。
剧本
#!/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)
更换图像
如果要更改墙纸,只需替换复制到文件夹中的一个或两个图像(但要注意名称),然后删除span_image.jpeg
脚本创建的即可。
我在Ubuntu 14.04和14.10上对其进行了测试,并且运行良好。您使用Gnome的事实不会产生任何影响。
使用组合键手动切换墙纸设置
如果由于某种原因,您希望在连接/断开外接显示器后手动切换到跨度墙纸,则可以替换最后三行:
while True:
arrange()
time.sleep(5)
一行:
arrange()
并添加键盘快捷键以进行切换:“系统设置”>“键盘”>“快捷方式”>“自定义快捷方式”
添加命令:
python3 /path/to/auto_wall.py
您选择的按键组合。