我有一台台式电脑,配有 Radeon R7 360 和 FOS 驱动程序。我经常使用的主显示器连接到 DVI 端口,电视连接到 HDMI 输出,以防我想播放任何视频或电影,或者只是需要一个额外的显示器。
但是,当我打开电视并且 Ubuntu 识别到它时,额外的空间总是添加到错误的一侧。我通常选择“将桌面扩展到右侧”,但实际发生的情况是,我的主桌面随后显示在电视上,而我的常规显示器则“添加”到其空间。然后我总是必须进入设置并按正确的顺序拖动显示,此设置也不会保存,因为每次打开电视以扩展桌面时,我都必须重做此过程。
对此有什么解决方案吗?或者有人知道在哪里为我的两个显示器设置固定配置吗?
我目前正在使用带有 Xfce 的 Ubuntu Studio 15.10。
编辑:这是 xrandr 的输出:
Screen 0: minimum 320 x 200, current 4480 x 1080, maximum 16384 x 16384
DisplayPort-0 disconnected (normal left inverted right x axis y axis)
HDMI-0 connected 1920x1080+2560+0 (normal left inverted right x axis y axis) 160mm x 90mm
1920x1080 60.00*+ 50.00 59.94 30.00 25.00 24.00 29.97 23.98
1920x1080i 60.00 50.00 59.94
1280x1024 60.02
1360x768 60.02
1152x864 59.97
1280x720 60.00 50.00 59.94
1024x768 60.00
800x600 60.32
720x576 50.00
720x576i 50.00
720x480 60.00 59.94
640x480 60.00 59.94
720x400 70.08
DVI-0 connected primary 2560x1080+0+0 (normal left inverted right x axis y axis) 673mm x 284mm
2560x1080 60.00*+
1920x1080 60.00
1680x1050 59.88
1280x1024 75.02 60.02
1280x800 59.91
1152x864 75.00
1024x768 75.08 60.00
800x600 75.00 60.32
640x480 75.00 60.00
720x400 70.08
答案1
看来你的电视身体上关机时必须断开连接,否则设置可能丢失。以下两个选项可解决此问题,这很可能是错误导致的:
- 如果断开连接后再连接,下面的(背景)脚本(选项)
[1.]
应该会自动将电视屏幕(在您的情况下HDMI-0
:)移动到主屏幕的右侧。 - 键盘快捷键的作用相同,但是在连接(打开)电视后手动进行。
1. 背景脚本,自动设置第二屏幕
脚本的编写方式是,它会占用您想要显示的屏幕在右侧(偶尔断开的那个)作为参数(见下文解释)。因此,它适用于任何屏幕组合时,只需要在命令中输入右屏幕的名称,脚本就会找到左屏幕的分辨率,进行正确定位。
剧本
#!/usr/bin/env python3
import subprocess
import time
import sys
"""
This script is a fix for what is presumably a bug, causing the secundary screen
to appear on the left side instead of the right side of the "main" screen.
Run it in the background.
"""
#--- set your secundary (right) screen below
sec = sys.argv[1]
#---
scr_id = sec+" connected"
def get_xrandr():
return subprocess.check_output("xrandr").decode("utf-8")
def get_setup():
# returns output of xrandr if secundary monitor was connected (else None)
get_xr = subprocess.check_output("xrandr").decode("utf-8")
if scr_id in get_xr:
return get_xr
def get_xshift(xr):
# find connected screens (lines)
mons = [l for l in xr.splitlines() if " connected" in l]
# get name and x-size of main screen
left = [l.split() for l in mons if not l.startswith(scr_id)][0]
return [(left[0], s.split("x")[0]) for s in left if s.count("+") == 2][0]
check1 = []
while True:
time.sleep(4)
check2 = get_setup()
if check1 != check2:
# on change in monitor setup:
if check2 != None:
# if secundary monitor was just connected
print("run setup")
x_shiftdata = get_xshift(check2)
cmd1 = ["xrandr", "--output", x_shiftdata[0], "--pos", "0x0"]
cmd2 = ["xrandr", "--output", sec, "--pos", x_shiftdata[1]+"x0"]
for cmd in [cmd1, cmd2]:
subprocess.call(cmd)
check1 = check2
如何使用
- 将脚本复制到一个空文件中,另存为
screen_set.py
使用以下方法测试运行次要的screen 作为命令的参数:
python3 /path/to/screen_set.py HDMI-0
(因为
HDMI-0
是您的辅助屏幕)断开(关闭)电视并重新连接,它应该出现在右侧。如果一切正常,请将其添加到启动应用程序,稍作休息:Dash > 启动应用程序 > 添加。添加命令:
/bin/bash -c "sleep 15 && python3 /path/to/screen_set.py HDMI-0"
现在应该解决了。
2. 或者;键盘快捷键
背景脚本实际上添加了没有什么对处理器负载,并且不会被任何注意到。如果但是,如果您更喜欢使用键盘快捷键来使用(自动运行的)后台脚本,请添加以下命令:
/bin/bash -c "xrandr --output DVI-0 --pos 0x0 && xrandr --output HDMI-0 --pos 2560x0"
它将执行相同的操作,但需要手动操作:选择:系统设置 > “键盘” > “快捷键” > “自定义快捷键”。单击“+”并添加命令:
/bin/bash -c "xrandr --output DVI-0 --pos 0x0 && xrandr --output HDMI-0 --pos 2560x0"
解释;背景脚本
- 每四秒一次,脚本通过检查字符串是否
HDMI-0 connected
出现在命令的输出中来检查电视是否已连接xrandr
。 (仅)如果有改变在状态下:
False -> True
,脚本运行命令(在您的情况下):xrandr --output DVI-0 --pos 0x0 && xrandr --output HDMI-0 --pos 2560x0
它将按照从左到右的顺序排列你的屏幕,如下所述这里。但是,如果您的屏幕分辨率不同,脚本会查找正确的图形和主屏幕的名称。只要您使用次要的screen 作为参数,它工作正常。
答案2
我有一张 ATI R5 卡,它从不保存我的三个显示器的图形布局xfce4-display-settings
。ARandR 应该可以解决您的问题。在终端中输入以下内容进行安装:
sudo apt-get install arandr
使用 ARandR 配置您的屏幕,将其保存为脚本(布局 > 另存为),并将其设置为作为会话和启动 > 应用程序自动启动项运行。(在运行布局脚本之前,您可能需要先将其设置为睡眠 5。)
如果您使用两种不同的布局,则可以使用 ARandR 配置每种布局。然后,您可以根据所需的布局运行一个脚本或另一个脚本。或者,更好的是,您可以根据需要为每个布局分配自己的键盘快捷键。