如何让Unity显示排列保留设置

如何让Unity显示排列保留设置

我在不同的工作环境之间移动我的笔记本电脑(ThinkPad T570、Ubuntu Xenial、Unity/Compiz),我发现使用 Unity 控制中心“显示”小程序无法可靠地(永远?!)保留我指定的安排。

为了解决这个问题,我编写了一个 bash/xrandr 脚本,可以按照我的需要安排事情。(可用这里作为要点,但这些细节对于我的问题来说并不重要,因此没有包括全部内容)。如果屏幕显示不正确,那么我会执行此脚本来安排它们。

我希望让此脚本在显示器连接时触发。Unity/Compiz 对存储在 Display prefs 中的设置执行此操作,因此我想知道以 bash/xrandr 中表达的正确方式获取我的首选设置,并让 Ubuntu 作为“本机”体验的一部分提供该设置。

更新:我发现~/.config/monitors.xml这似乎是 Unity 存储设置的地方。这是我的,随着我更换位置,有了新的修改。

我曾考虑通过 触发重新排列/etc/udev/rules.d,但这需要允许 root 运行的脚本与我的 WM 通信,这可能意味着打开 xhost 权限。由于默认操作系统似乎可以在没有该权限的情况下排列显示器(只是不是我想要的排列),我更愿意找到尽可能“原生”的解决方案。

答案1

我最终在一个 bash 脚本中处理了这个问题,该脚本测试xrandr连接设备的输出,然后设置适当的每个环境布局。

下面是一个简化版本,演示了如何执行此操作。

#!/bin/bash

# Unity doesn't remember my screen layouts, so I made this to do it for me.
# GPLv3+, (c) Chris Burgess @xurizaemon

CONNECTED=$( xrandr | grep ' connected' )

LAYOUT=unknown
if [[ $CONNECTED = *"DP-1 connected"* ]] ; then
  LAYOUT=thunderbolt
elif [[ $CONNECTED = *"HDMI-2 connected"* ]] ; then
  LAYOUT=hdmi-2
fi

case "$LAYOUT" in
  "thunderbolt")
    # Thunderbolt, laptop
    xrandr --output DP-1 --auto --left-of eDP-1 --primary
    echo "Configured for $LAYOUT"
    ;;
  "hdmi-2")
    # Set to 57Hz for monitor support
    xrandr --newmode "1920x1080_57.00"  163.00  1920 2040 2240 2560  1080 1083 1088 1119 -hsync +vsync
    xrandr --addmode HDMI-2 "1920x1080_57.00"
    # HDMI, laptop
    xrandr --output HDMI-2 --mode "1920x1080_57.00" --left-of eDP-1 --primary
    echo "Configured for $LAYOUT"
    ;;
  *)
    echo "Layout $LAYOUT not known."
esac

我的实际脚本位于https://gist.github.com/e1892192ea8dd03a210d2890f8f966e7

相关内容