xrandr 在具有多个显示器的扩展坞上失败

xrandr 在具有多个显示器的扩展坞上失败

编辑:在问题末尾添加了一些解决问题的内容 - 它基于罗伯特·西默的建议,所以他的答案被标记为正确

当我将 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

  1. 当显示器未连接时我得到:
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

  1. 连接坞站并重新启动(即一切正常)我得到:
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

顺便问一下,我认为三台显示器仅在一个角上对角接触,这样对吗?

相关内容