是否保存显示器设置?


Answers:


7

长话短说(即:执行Nicolas Bernaerts的建议,但我为您保留了详细信息):监视器配置实际上保存在中~/.config/monitors.xml,但在启动/登录时未应用。

解决此问题的步骤是:

使用错误的监视器配置登录。

删除当前的监视器配置:

cd .config
mv monitors.xml{,.bak}

使用“ 显示器”应用程序按需要布置显示器(我将一侧显示器逆时针旋转)。 随意安排显示器

Apply后,将monitors.xml创建一个新文件。

现在,下载脚本和启动器并使它们可执行,这些脚本和启动器基于新创建的配置文件来强制进行监视器配置:

$ sudo wget -O /usr/local/sbin/update-monitor-position https://raw.githubusercontent.com/NicolasBernaerts/ubuntu-scripts/master/ubuntugnome/update-monitor-position
$ sudo chmod +x /usr/local/sbin/update-monitor-position
$ sudo wget -O /usr/share/applications/update-monitor-position.desktop https://raw.githubusercontent.com/NicolasBernaerts/ubuntu-scripts/master/ubuntugnome/update-monitor-position.desktop
$ sudo chmod +x /usr/share/applications/update-monitor-position.desktop

此时,可以通过启动更新监视器位置应用程序来固定监视器的配置。

如果您希望这是自动的,只需添加一个启动应用程序,并输入以下内容:

  • 名称: Update Monitors Position
  • 命令: update-monitor-position 5
  • 评论: Force monitors position 5 seconds after login

在此处输入图片说明


1
太好了,这有所帮助。谢谢!是否有此错误报告?
OndraŽižka16年


2
我认为这是最好的答案。我更新了脚本,支持多种模式:gist.github.com/relet/66a965cdf728e5278fbf52c9d1433be0 -只是你monitors.xml复制到例如显示器,office.xml如果你想运行“更新显示器位置的办公室”
转租

vanvugt:“实际上,让我们使用错误1292398,因为这是大多数用户发现的错误。” bugs.launchpad.net/ubuntu/+source/gnome-shell/+bug/1292398
FlipMcF

5

您所有监视器的配置(无论是否热插拔)都应$HOME/.config/monitors.xml由的xrandr插件存储在中gnome-settings-daemon,这实际上就是您在Monitors capplet中进行的配置。

由于似乎每个人都无法正常使用,因此显然某个地方存在错误。嗯


是的,正如maco所说,如果我关闭计算机并重新启动计算机,它会记住,只是不在启动时。
奥斯卡·戈德森

4

按照所需方式连接外部显示器的前三个步骤,第四个步骤是保存设置。

  1. 连接外接显示器并检查其支持的分辨率:

    xrandr -q
    
  2. 输入以下命令(这将禁用笔记本电脑的显示器):

    xrandr --output LVDS1 --off --output TV1 --off --output VGA1 --mode 1280x1024 --pos 0x0 --rotate normal
    
  3. 如果要同时启用笔记本电脑和外部设备:

    xrandr --output LVDS1 --mode yyyyXzzzz --pos 0x0 --rotate normal --output TV1 --off --output VGA1 --mode 1280x1024 --pos 0x0 --rotate normal
    

    (yyyyXzzzz-您的笔记本电脑分辨率。)

    以上配置将克隆您的屏幕。如果需要,请使用“ --right-of/ --left-of”选项播放。

  4. 如果您在登录时需要此设置,请添加检查/etc/X11/Xsession.d/45custom_xrandr-settings(您可能需要创建一个)。

    xrandr |grep VGA1 | grep " connected " | if [ $? -eq 0 ]; then xrandr --output LVDS1 --off --output TV1 --off --output VGA1 --mode 1280x1024 --pos 0x0 --rotate normal  #Change the way u need ; fi
    

2

在办公室,我的笔记本电脑上有3台显示器,家里有2台显示器。两个办公室监视器设置为垂直,而其他监视器则处于垂直方向。

答:monitors.xml在〜/ .config中。

  1. 删除它
  2. 在办公室设置显示器
  3. 将刚刚创建的“ monitors.xml”重命名为“ monitors-office.xml”。

B.获取外壳脚本“ update-monitor-position”。

  1. 将“ MONITOR_XML”定义“ monitors.xml”更改为“ monitors-office.xml”。

  2. 将其另存为“ update-monitor-position-office”,位于可执行路径(/ usr / local / sbin /)中。

  3. 触摸“我”的权限->可执行文件。

C.获取桌面快捷方式“ update-monitor-position.desktop”

  1. 将“执行”定义,“更新监视器位置”更改为
    “更新监视器位置办公室”。
  2. 将其另存为“ update-monitor-position-office.desktop”
  3. 触摸“我”的权限->可执行文件。

update-monitor-position-office.desktop:

[Desktop Entry]
Type=Application
Exec=update-monitor-position-office
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name[en_US]=Office Monitors Position
Name=Office Monitors Position
Comment[en_US]=Force monitors position from monitor-office.xml
Comment=Force monitors position from monitor-office.xml
Icon=display

Shell脚本,update-monitor-position-office

#!/bin/bash
# -------------------------------------------------
#  Get monitors configuration from monitor.xml and apply it for current user session.
#  In case of multiple definitions in monitor.xml only first one is used.
#
#  See http://bernaerts.dyndns.org/linux/74-ubuntu/309-ubuntu-dual-display-monitor-position-lost
#  for instructions
#
#  Parameters :
#    $1 : waiting time in sec. before forcing configuration (optional)
#
#  Revision history :
#    19/04/2014, V1.0 - Creation by N. Bernaerts
#    10/07/2014, V1.1 - Wait 5 seconds for X to fully initialize
#    01/09/2014, V1.2 - Correct NULL file bug (thanks to Ivan Harmady) and handle rotation
#    07/10/2014, V1.3 - Add monitors size and rate handling (idea from jescalante)
#    08/10/2014, V1.4 - Handle primary display parameter
#    08/12/2014, V1.5 - Waiting time in seconds becomes a parameter
# -------------------------------------------------

# monitor.xml path
MONITOR_XML="$HOME/.config/monitors-office.xml"

# get number of declared monitors
NUM=$(xmllint --xpath 'count(//monitors/configuration['1']/output)' $MONITOR_XML)

# loop thru declared monitors to create the command line parameters
for (( i=1; i<=$NUM; i++)); do
  # get attributes of current monitor (name and x & y positions)
  NAME=$(xmllint --xpath 'string(//monitors/configuration['1']/output['$i']/@name)' $MONITOR_XML 2>/dev/null)
  POS_X=$(xmllint --xpath '//monitors/configuration['1']/output['$i']/x/text()' $MONITOR_XML 2>/dev/null)
  POS_Y=$(xmllint --xpath '//monitors/configuration['1']/output['$i']/y/text()' $MONITOR_XML 2>/dev/null)
  ROTATE=$(xmllint --xpath '//monitors/configuration['1']/output['$i']/rotation/text()' $MONITOR_XML 2>/dev/null)
  WIDTH=$(xmllint --xpath '//monitors/configuration['1']/output['$i']/width/text()' $MONITOR_XML 2>/dev/null)
  HEIGHT=$(xmllint --xpath '//monitors/configuration['1']/output['$i']/height/text()' $MONITOR_XML 2>/dev/null)
  RATE=$(xmllint --xpath '//monitors/configuration['1']/output['$i']/rate/text()' $MONITOR_XML 2>/dev/null)
  PRIMARY=$(xmllint --xpath '//monitors/configuration['1']/output['$i']/primary/text()' $MONITOR_XML 2>/dev/null)

  # if position is defined for current monitor, add its position and orientation to command line parameters
  [ -n "$POS_X" ] && PARAM_ARR=("${PARAM_ARR[@]}" "--output" "$NAME" "--pos" "${POS_X}x${POS_Y}" "--fbmm" "${WIDTH}x${HEIGHT}" "--rate" "$RATE" "--rotate" "$ROTATE")

  # if monitor is defined as primary, adds it to command line parameters
  [ "$PRIMARY" = "yes" ] && PARAM_ARR=("${PARAM_ARR[@]}" "--primary")
done

# if needed, wait for some seconds (for X to finish initialisation)
[ -n "$1" ] && sleep $1

# position all monitors
xrandr "${PARAM_ARR[@]}"

嘿@jey,您在2018年1月回答了此问题。(而Nicolas脚本是4岁...)。我是否可以认为它在最新的Ubuntu 16.x / 18.x下仍然可以正常工作?-和:你有任何的假设,如果它会根据Ubuntu-工作MATE呢?(我确实在我的系统上看到了说的monitors.xml ...)
Frank Nocke

弗兰克,我说“ 16.04.5 LTS”。有一点,在“ dist-upgrade”之后,我必须经历整个过程,然后重新启动。“系统设置->显示”在我的系统上很有趣。我没有尝试18.x的模式。谢谢,
jay

1

Ubuntu 12.04会记住热插拔的显示器设置。但是仅当您重新打开“系统配置”>“显示小程序”时才应用它们。至少对我来说是这种情况,这绝对是一个错误。


1

杰伊的答案几乎对我有用,但我需要做一些额外的步骤。我会对他的回答发表评论,但我没有声誉。

在文件update-monitor-position-office中:

  1. 我的bash版本(4.3.48)抱怨第28行的“ i ++”后面缺少空格。
  2. 我的xrandr(1.5)版本无法识别第40行的“ --fbmm”选项。我不得不将其更改为“ --mode”。这很难诊断,因为xrandr实际上并没有给我一个错误,它只是执行了命令而没有执行任何操作。

1

我更喜欢从终端运行此脚本,因为我在登录后首先打开了一个脚本。

首次登录时配置错误-监视器放置不正确:

cd ~/.config
mv ~/.config/monitors.xml{,.bak}

现在使用系统设置来设置显示器以创建一个新的 ~/.config/monitors.xml使用正确的设置文件。

从我的仓库中复制Nicolas Bernaerts的固定脚本:https ://raw.githubusercontent.com/alextomko/monitors/master/monitors 并将其放在从终端运行的路径中。

$ ls -l ~/bin
# if you don't have this directory then create it - do not be logged in as root here.

$ mkdir /home/$USER/bin

$ echo $PATH
# should show /home/username/bin if the dir existed or if you had to create.

$ wget -P ~/bin https://raw.githubusercontent.com/alextomko/monitors/master/monitors
$ chmod +x ~/bin/monitors

# Log out, lock, reboot or whatever it takes to make monitor settings lost for you and run the script.
$ monitors

0

不可以,无法在热插拔的显示器上保存配置。如果在启动前插入电源,GNOME应该记住每个设备在每次启动时的配置(即,在工作时连接到显示器,而在家中则连接到显示器)。


该死,好。是否有第三方应用程序无法做到这一点?我知道Mac OS X可以做到这一点,而Windows 7则可以做到(根据我对W7的一点经验尝试过)。
奥斯卡·戈德森

GNOME监视器配置也应为热插拔的监视器保存此信息。它为我做。
RAOF 2010年

RAOF:很奇怪,因为本周早些时候在ubuntu-devel邮件列表上进行的讨论说没有。
maco 2010年

该配置实际上保存在中~/.config/monitors.xml,但在启动时未应用
Alessandro Cuttin
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.