每次我将三台外接显示器从笔记本电脑上断开或重新插入时,所有分辨率和扩展桌面设置都会乱套。我必须改回设置才能恢复正常。
我在 Ubuntu 16.04 上使用 gnome 3.18.5。我有 Intel HD 显卡 530 和 Nvidia 960M,Nvidia 驱动程序版本为 375.39。我还安装了名为“Fix-Multi-Monitors”的 gnome shell 扩展,它确实修复了许多问题,例如使用窗口移动快捷方式时窗口只能在三台显示器中的两台之间移动。
无论如何,我希望以某种方式保存插入所有三台显示器时的设置,这样我只需运行一个脚本或设置,它就会立即按我想要的方式加载,或者甚至在检测到三台显示器时自动加载。我应该补充一点,我总是以同样的方式插入显示器。
让我感到困扰的是,我启用了横跨所有三个显示器的壁纸,但当它们断开连接时,壁纸在笔记本电脑显示器上变成一条细线,其余屏幕变黑。在这种情况下,我希望只显示该壁纸的中间部分,或者当外部显示器断开连接时自动加载另一张壁纸。我希望有人可以帮助我或指导我以正确的方式获得更好的体验。
我确实找到了一个名为 disper 的命令行工具,我阅读了它的手册页并尝试了许多命令,但我认为它无法完成我想要的操作。
我的壁纸的路径是:
/home/olm/图片/壁纸/3monitorwallpaper.jpg /home/olm/图片/壁纸/1monitorwallpaper.jpg
答案1
1. 如果连接了四个屏幕,则运行命令的脚本
下面的脚本是这个。
它能做什么
每五秒钟检查一次连接的屏幕数量。如果数量发生变化,和连接的屏幕总数为四个,它运行xrandr
我们在注释中找到的命令。
如何使用
- 将脚本复制到一个空文件中,另存为
four_screens.py
使用以下命令从终端测试运行脚本:
python3 /path/to/four_screens.py
并连接您的屏幕。连接第四个屏幕后,应进行屏幕设置。
如果一切正常,请将脚本添加到启动应用程序:Dash > 启动应用程序 > 添加。添加命令:
python3 /path/to/four_screens.py
#!/usr/bin/env python3
import subprocess
import time
#--- set both commands (connect / disconnect) below
connect_command = "xrandr --output DP-2 --pos 0x0 --mode 1920x1200 "\
"&& xrandr --output HDMI-0 --pos 1920x0 --mode 1920x1200 "\
"&& xrandr --output DP-3 --pos 3840x0 --mode 1920x1200 "\
"&& xrandr --output eDP-1-1 --off"
disconnect_command = ""
#---
while True:
time.sleep(5)
try:
subprocess.Popen(["xrandr"])
except:
pass
else:
break
# function to get the output of xrandr
def get(cmd): return subprocess.check_output(cmd).decode("utf-8")
# - to count the occurrenc of " connected "
def count_screens(xr): return xr.count(" connected ")
# - to run the connect / disconnect command(s)
def run_command(cmd): subprocess.Popen(["/bin/bash", "-c", cmd])
# first count
xr1 = None
while True:
time.sleep(5)
# second count
xr2 = count_screens(get(["xrandr"]))
# check if there is a change in the screen state
if xr2 != xr1:
if xr2 == 4:
# command to run if connected (two screens)
run_command(connect_command)
elif xr2 == 1:
# command to run if disconnected (one screen)
# uncomment run_command(disconnect_command) to enable, then also comment out pass
pass
# run_command(disconnect_command)
# set the second count as initial state for the next loop
xr1 = xr2
笔记
- 该脚本的功能极其有限,没有增加任何明显的负担。
- 在同一个脚本中,我们可以运行壁纸更改,但要这样做,请将两个壁纸的(路径)发布到您的问题中。
2. 或者,捷径
如果出于某种原因您不想运行后台脚本,则可以通过键盘快捷键运行相同的命令:
选择:系统设置 > “键盘” > “快捷键” > “自定义快捷键”。点击“+”并添加命令:
/bin/bash -c "xrandr --output DP-2 --pos 0x0 --mode 1920x1200 && xrandr --output HDMI-0 --pos 1920x0 --mode 1920x1200 && xrandr --output DP-3 --pos 3840x0 --mode 1920x1200 && xrandr --output eDP-1-1 --off"
答案2
同时,我还发现了这个方便的命令来更改 gnome 中的壁纸。
gsettings set org.gnome.desktop.background picture-uri file:///path/to/wallpaper.jpg
因此现在,每次我将显示器连接到笔记本电脑时,我都会使用它与脚本中的 Xrandr 命令来设置我的桌面。