可以在 gnome 3 中保存当前分辨率、壁纸和桌面布置设置

可以在 gnome 3 中保存当前分辨率、壁纸和桌面布置设置

每次我将三台外接显示器从笔记本电脑上断开或重新插入时,所有分辨率和扩展桌面设置都会乱套。我必须改回设置才能恢复正常。

我在 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我们在注释中找到的命令。

如何使用

  1. 将脚本复制到一个空文件中,另存为four_screens.py
  2. 使用以下命令从终端测试运行脚本:

    python3 /path/to/four_screens.py
    

    并连接您的屏幕。连接第四个屏幕后,应进行屏幕设置。

  3. 如果一切正常,请将脚本添加到启动应用程序: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

笔记

  1. 该脚本的功能极其有限,没有增加任何明显的负担。
  2. 在同一个脚本中,我们可以运行壁纸更改,但要这样做,请将两个壁纸的(路径)发布到您的问题中。

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 命令来设置我的桌面。

相关内容