编辑:在问题末尾添加了一些解决问题的内容 - 它基于罗伯特·西默的建议,所以他的答案被标记为正确
当我将 Lenovo USB-C 扩展坞冷插到笔记本电脑上时,我的 2 个附加显示器开始工作(总共 3 个)。
但是,当热插拔坞站时,我收到以下错误arandr
:
XRandR returned error code 1:
X Error of failed request: BadMatch (invalid parameter attributes)
Major opcode of failed request: 140 (RANDR)
Minor opcode of failed request: 21 (RRSetCrtcConfig)
Serial number of failed request: 44
Current serial number in output stream: 44
1920x1080 (0x48) 142.600MHz -HSync -VSync *current +preferred
h: width 1920 start 1936 end 1952 total 2080 skew 0 clock 68.56KHz
v: height 1080 start 1083 end 1088 total 1142 clock 60.03Hz
1920x1080 (0x56f) 138.500MHz +HSync -VSync
h: width 1920 start 1968 end 2000 total 2080 skew 0 clock 66.59KHz
v: height 1080 start 1083 end 1088 total 1111 clock 59.93Hz
此外,当使用所有 3 个显示器时,笔记本电脑屏幕通常会在某些时候随机冻结应用程序,因此我经常禁用笔记本电脑屏幕以避免这种情况。
我的笔记本电脑是联想 X1 Carbon 第 8 代。我使用的是完全更新的 Manjaro Linux,使用 i3 和 X11,而不是 Wayland。
以下是缩短的输出xrandr --verbose
- 当显示器未连接时我得到:
xrandr --verbose | grep -E '^[^[:space:]]|curr|pref' | sed -e 's/(norm.*)//'
Screen 0: minimum 8 x 8, current 6535 x 2434, maximum 32767 x 32767
eDP1 connected primary 1920x1080+1256+1354 (0x48) normal 310mm x 170mm
1920x1080 (0x48) 142.600MHz -HSync -VSync *current +preferred
DP1 disconnected
DP1-1 connected
1440x900 (0x78b) 106.500MHz +HSync -VSync +preferred
DP1-2 connected
1920x1080 (0x56f) 138.500MHz +HSync -VSync +preferred
DP1-3 disconnected
DP2 disconnected
HDMI1 disconnected
VIRTUAL1 disconnected
- 连接坞站并重新启动(即一切正常)我得到:
Screen 0: minimum 8 x 8, current 4740 x 3600, maximum 32767 x 32767
eDP1 connected primary 1920x1080+2820+2520 (0x4b) normal 310mm x 170mm
1920x1080 (0x4b) 142.600MHz -HSync -VSync *current +preferred
DP1 disconnected
DP1-1 connected 900x1440+0+0 (0x4c) right 410mm x 260mm
1440x900 (0x4c) 106.500MHz +HSync -VSync *current +preferred
DP1-2 connected 1920x1080+900+1440 (0x4d) normal 530mm x 300mm
1920x1080 (0x4d) 138.500MHz +HSync -VSync *current +preferred
DP1-3 disconnected
DP2 disconnected
HDMI1 disconnected
VIRTUAL1 disconnected
回答:
好的!因此,完全避免使用 arandr 并首先使用:
xrandr --output DP1-2 --auto
xrandr --output DP1-1 --auto
使两个外接显示器在热插拔时工作。
那么我可以使用:
xrandr --output eDP1 --primary --mode 1920x1080 --pos 2820x2520 --rotate normal --output DP1 --off --output DP1-1 --mode 1440x900 --pos 0x0 --rotate right --output DP1-2 --mode 1920x1080 --pos 900x1440 --rotate normal
设置它们。之前,仅将上述内容放入脚本中是行不通的,但是通过在脚本中包含两个屏幕的 --auto ,那么在热插拔时它也可以工作:
xrandr --output DP1-2 --auto
xrandr --output DP1-1 --auto
xrandr --output eDP1 --primary --mode 1920x1080 --pos 2820x2520 --rotate normal --output DP1 --off --output DP1-1 --mode 1440x900 --pos 0x0 --rotate right --output DP1-2 --mode 1920x1080 --pos 900x1440 --rotate normal
但是,如果我不使用 arandr --auto 运行设置(每个单独),它们就会失败。
据我所知,执行这些步骤时 dmesg 没有任何变化。
答案1
错误消息没有透露启动了哪个xrandr
命令arandr
(以及出于什么意图)。
我必须在这里做一些假设。我鼓励您用您的意见来确认/否认它们。所以这是我的假设:
- 使用扩展坞启动时,所有显示器都可以工作
- 当扩展坞热插拔时,只有内部显示器继续显示,外部显示器保持黑屏/关闭状态
- 您使用的包装器是
arandr
(我自己也不知道,在调查问题时最好将其排除在外!) - 您
arandr
想要打开外接显示器
我会启动:
xrandr --output DP1-1 --auto
进而
xrandr --output DP1-2 --auto
会发生什么?
我进一步猜测这arandr
是在做类似的事情,不幸的是这些命令不起作用。您没有包含内核的新输出(在dmesg
任何xrandr
命令之前和之后两次调用 , 显示;仅报告新消息(如果有))。
如果这不起作用,请开始逐个驱动分辨率较低的显示器。例如:
xrandr --output DP1-1 --mode 800x600
作品?
我所知道的是:
- 这不是像素时钟问题:冷插拔显示器适用于所有不同的型号和频率;像素时钟短缺将无法支持这一点
- 连接显示器后的输出看起来更像是“显示器关闭”,因为它们被报告为已连接;即使没有码头也是这种情况吗? (或者使用扩展坞,但移除了显示器电缆?)
答案2
你是说这个命令在热插拔的情况下会失败吗?
xrandr --output eDP1 --primary --mode 1920x1080 --pos 2820x2520 --rotate normal \
--output DP1 --off \
--output DP1-1 --mode 1440x900 --pos 0x0 --rotate right \
--output DP1-2 --mode 1920x1080 --pos 900x1440 --rotate normal
这仍然留下了为什么它不起作用的问题。
你能热插拔并一一执行这些并说出哪一个失败吗?
xrandr --output eDP1 --primary --mode 1920x1080 --pos 2820x2520
xrandr --output DP1-1 --mode 1440x900 --pos 0x0 --rotate right
xrandr --output DP1-2 --mode 1920x1080 --pos 900x1440
xrandr --output DP1 --off
顺便问一下,我认为三台显示器仅在一个角上对角接触,这样对吗?