尽管有很多用户遇到此类错误,但我还没有找到解决此类错误的单一方法。
所以我想自己尝试找到解决方案。但是,我不知道为什么会发生这种情况...
有谁知道原因吗?你不必说出每个错误发生的原因,只要说一个就好了!
例子:
BadMatch 错误:
X Error of failed request: BadMatch (invalid parameter attributes)
Major opcode of failed request: 150 (RANDR)
Minor opcode of failed request: 18 (RRAddOutputMode)
Serial number of failed request: 18
Current serial number in output stream: 19
BadName 错误:
Error of failed request: BadName (named color or font does not exist)
Major opcode of failed request: 140 (RANDR)
Minor opcode of failed request: 11 (RRQueryOutputProperty)
Serial number of failed request: 39
Current serial number in output stream: 39
Gamma 失败错误:
xrandr: Failed to get size of gamma for output default
Screen 0: minimum 1920 x 1080, current 1920 x 1080, maximum 1920 x 1080
default connected primary 1920x1080+0+0 0mm x 0mm
1920x1080 0.0*
答案1
最低信息量
你要问一个问题然后添加此命令生成的链接
sudo apt-get install pastebinit; sudo sh -c "lsb_release -sd; dmidecode -s system-product-name; echo ==; lshw -c display; echo ==; xrandr --verbose; echo ==; cat /etx/X11/xorg.conf" | tee ~/Desktop/ubuntu-graphic-info.txt | pastebinit
无需转储到文件并上传,只需在屏幕上打印:
sudo sh -c "lsb_release -sd; dmidecode -s system-product-name; echo ==; lshw -c display; echo ==; xrandr --verbose; echo ==; cat /etx/X11/xorg.conf"
笔记
用户可以进行大量自定义更改,这可能会影响显示。很难捕获所有这些更改,因为盲目收集文件夹中的文件也会引起担忧。最好由用户自己声明与原始副本的更改:
- Grub/内核启动选项
- X11 设置
- 乌德夫
- 手动安装驱动程序
- 内核/RAMDisk 构建
故障排除
闲聊
比我想象的要复杂得多,因为我尝试使用英特尔 GPU 玩了一段时间xrandr
。有时,我会遇到意外错误。这是我的经验总结。
据我了解,这是一个简化的完整堆栈列表。
xrandr
└─ Xorg (w/ driver specific module)
└─ kernel
└─ driver
│
graphic card
└─ cables (kvm switch/connection adapter)
└─ monitor
这确实是一个需要排除故障的庞大堆栈,对于旧硬件和滚动专有驱动程序更新来说更加困难,即使是 DB-15 VGA 电缆(或廉价电缆)中的针脚接触不良也会产生影响。实际上,我在 Ask Ubuntu 中读到的大多数问题都只是缺失或错误的 EDID显示器的数据,归咎于:电缆(kvm 开关/连接适配器)。你可以很快注意到xrandr --verbose
输出。
很多情况下,驱动程序也会因为显示器的 EDID 数据不完整/部分错误(制造商错误)而限制某些模式,用户可以通过编写自定义xorg.conf
覆盖来克服这个问题:模式、HSync 和 VSync、EDID、DPI......取决于驱动程序(nvidia
例如可以忽略显示器的 EDID)
我建议高级用户或在此处提供帮助的用户阅读此内容:
- Ubuntu Wiki:X 故障排除(相当古老且普通)
- KMS UXA DRM OMG WTF BBQ?/ Linux 图形揭秘由 Dream Chip Technologies GmbH 的 Martin Fiedler 在 Chemnitzer Linux-Tage 2014 上撰写
注意
阅读提供解决方案的旧文档和帖子时要小心。最好查找正在使用的特定驱动器的文档。
- 验证发布日期、最后编辑日期或软件版本。
KMS
,DRI
或fb
(帧缓冲区)驱动程序类型。(请注意,我不是专家)。- Xorg 已在自动配置方面做了很多工作,因此
xorg.conf
默认情况下不会创建。即使用户已经创建了,他/她也不应该创建所有部分,而应该只覆盖所需的部分。这是一种动态配置。
我对 xrandr/X 错误的理解
似乎xrandr
不知道驱动程序能够或同意提供什么(所有驱动程序功能),而 Xorg 是它们之间的接口。因此可能发生以下任何一种情况:
- 高比率:XRandR → (:)接受) Xorg → (:)接受) 驱动程序,每个人都很高兴!
- 低比率:XRandR → (:| 接受) Xorg → (XD 拒绝) 驱动程序,生活有时很艰难!
- 罕见情况:XRandR → (X/ 拒绝) Xorg -x- (:| 中性) 驱动程序,是时候执行 B 计划了!
因此,当 Xorg 或驱动程序无法处理或拒绝 xrandr 请求时,我们会收到这些错误:
- 当前 Xorg 设置
- 驱动程序功能
- 图形适配器功能
- 从 EDID 获取的显示器功能
- 其中一个错误包括
xrandr
收集通用图形的调试信息!
为什么?我在这里查看了许多与xrandr
&相关的问题解决,他们缺少有关完整堆栈设置的大量信息。考虑的集合仅提到了最后一个失败的命令。甚至,我建议将完整的输出放在问题中,以便我们可以搜索相似之处并链接相关问题。
如果没有找到 EDID 数据,则从以下位置开始:
- 显示器是如何物理连接的,即是否使用 KVM?任何连接适配器,例如 HDMI 到 VGA?
- 您尝试过另一根电缆吗?
- 显示器的品牌/型号是什么?
以下是一些有用的命令的列表
背景信息
sudo dmidecode -s system-product-name lsb_release -sd Xorg -version xrandr -v sudo lshw -c display
基地信息
xrandr --verbose cat /etx/X11/xorg.conf more /var/log/Xorg.0.log
调试命令和选项
sudo apt-get install edid-read ls /sys/class/drm/*/edid | xargs -i{} sh -c "echo {}; parse-edid < {}" xrandr --verbose ... xtrace xrandr --verbose ... #no need, only to compare between releases for changes, the default driver parameters sudo sh -c "ls /sys/module/<driver-module-from-lshw>/parameters/ | xargs -L1 -i{} sh -c 'echo -n {} \" \" ; cat /sys/module/<driver-module-from-lshw>/parameters/{}'" # additional desktop environment setting, for general cases, gnome/unity cat ~/.config/monitors.xml cat /etc/gnome-settings-daemon/xrandr/monitors.xml gsettings list-recursively org.gnome.settings-daemon.plugins.xrandr
高级调试选项
添加
Option "ModeDebug" "true"
到Section "Device"
,xorg.conf
请参阅下面的 nvidia 调试了解详情。
有关 nvidia 图形的附加调试信息!
cat /proc/driver/nvidia/version
以获得精确版本激活 nvidia 调试信息
/var/log/Xorg.0.log
gksu nvidia-settings # go to X configuration then export, copy only device section sudo mkdir /etc/X11/xorg.conf.d/ sudo vim /etc/X11/xorg.conf.d/90_my_nvidia_hacks.conf # paste the device section Section "Device" Identifier "Device0" Driver "nvidia" VendorName "NVIDIA Corporation" BoardName "NVS 3100M" Option "ModeDebug" "true" EndSection # add to it this line `Option "ModeDebug" "true"`
完整文档位于
file:///usr/share/doc/nvidia-*/html/
,查找相同的运行版本,可用选项和默认设置有许多变化。
使用英特尔驱动程序的调试测试用例:BadMatch (invalid parameter attributes)
这是我可以重现的一个案例,它看起来像是 中的错误。从&xrandr
可以清楚地看出,在第一种组合中,帧缓冲区未调整大小。xtrace
Xorg.0.log
这似乎是 xrandr 的一个错误。当切换到更大的分辨率而不更改先前定义的比例时,它会引发 Xorg 错误。
系统信息
$ xrandr --version
xrandr program version 1.4.3
Server reports RandR version 1.4
$ sudo sh -c "lsb_release -dc;echo; uname -a; Xorg -version;echo; lshw -C display"
Description: Ubuntu 15.10
Codename: wily
Linux BlueSkies 4.2.0-25-generic #30-Ubuntu SMP Mon Jan 18 12:31:50 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
X.Org X Server 1.17.2
Release Date: 2015-06-16
X Protocol Version 11, Revision 0
Build Operating System: Linux 3.13.0-68-generic x86_64 Ubuntu
Current Operating System: Linux BlueSkies 4.2.0-25-generic #30-Ubuntu SMP Mon Jan 18 12:31:50 UTC 2016 x86_64
Kernel command line: BOOT_IMAGE=/boot/vmlinuz-4.2.0-25-generic root=UUID=9f0530d5-e0eb-43fa-b99b-000fa742cf10 ro persistent quiet splash vt.handoff=7
Build Date: 12 November 2015 05:33:29PM
xorg-server 2:1.17.2-1ubuntu9.1 (For technical support please see http://www.ubuntu.com/support)
Current version of pixman: 0.32.6
Before reporting problems, check http://wiki.x.org
to make sure that you have the latest version.
*-display
description: VGA compatible controller
product: 3rd Gen Core processor Graphics Controller
vendor: Intel Corporation
physical id: 2
bus info: pci@0000:00:02.0
version: 09
width: 64 bits
clock: 33MHz
capabilities: msi pm vga_controller bus_master cap_list rom
configuration: driver=i915 latency=0
resources: irq:26 memory:f6400000-f67fffff memory:e0000000-efffffff ioport:f000(size=64)
$ sudo sh -c "ls /sys/module/i915/parameters/ | xargs -L1 -i{} sh -c 'echo -n {} \" \" ; cat /sys/module/i915/parameters/{}'"
disable_display N
disable_power_well 1
disable_vtd_wa N
edp_vswing 0
enable_cmd_parser 1
enable_execlists 0
enable_fbc -1
enable_hangcheck Y
enable_ips 1
enable_ppgtt 1
enable_psr 0
enable_rc6 3
fastboot N
invert_brightness 0
load_detect_test N
lvds_channel_mode 0
lvds_downclock 0
lvds_use_ssc -1
mmio_debug 0
modeset -1
nuclear_pageflip N
panel_ignore_lid 1
prefault_disable N
preliminary_hw_support 0
reset Y
semaphores -1
use_mmio_flip 0
vbt_sdvo_panel_type -1
verbose_state_checks Y
$ modinfo i915
filename: /lib/modules/4.2.0-25-generic/kernel/drivers/gpu/drm/i915/i915.ko
license: GPL and additional rights
description: Intel Graphics
author: Intel Corporation
author: Tungsten Graphics, Inc.
firmware: i915/skl_dmc_ver1.bin
srcversion: BB05D6968744E69AEA30DC2
...
depends: drm_kms_helper,drm,video,i2c-algo-bit
intree: Y
vermagic: 4.2.0-25-generic SMP mod_unload modversions
$ xrandr
Screen 0: minimum 8 x 8, current 1726 x 768, maximum 32767 x 32767
LVDS1 connected primary 1366x768+0+0 (normal left inverted right x axis y axis) 309mm x 173mm
1366x768 60.07*+ 40.02
1360x768 59.80 59.96
1280x720 60.00
1024x768 60.00
1024x576 60.00
960x540 60.00
800x600 60.32 56.25
864x486 60.00
640x480 59.94
720x405 60.00
680x384 60.00
640x360 60.00
DP1 disconnected (normal left inverted right x axis y axis)
DP2 disconnected (normal left inverted right x axis y axis)
DP3 disconnected (normal left inverted right x axis y axis)
HDMI1 disconnected (normal left inverted right x axis y axis)
HDMI2 disconnected (normal left inverted right x axis y axis)
HDMI3 disconnected (normal left inverted right x axis y axis)
VGA1 connected 360x200+1366+0 (normal left inverted right x axis y axis) 410mm x 230mm
1366x768 59.79 +
1280x1024 60.02
1280x720 60.00
1024x768 60.00
800x600 60.32
640x480 60.00
720x400 70.08*
VIRTUAL1 disconnected (normal left inverted right x axis y axis)
未收集的其他信息
$ grep intel /var/log/Xorg.0.log
案例重现与调试
第一种组合 不同模式 & 相同比例
$ xrandr --output VGA1 --mode 720x400 --right-of LVDS1 --scale 0.5x0.5
$ xtrace xrandr --verbose --output VGA1 --mode 1366x768 --right-of LVDS1 --scale 0.5x0.5
000:<:0030: 28: RANDR-Request(140,21): SetCrtcConfig crtc=0x00000040 timestamp=0x00000000 config timestamp=0x00010a4d x=0 y=0 mode=0x00000000 rr=Rotate_0 outputs=;
000:>:0030:32: Reply to SetCrtcConfig: status=Success(0x00)
screen 0: 1726x768 453x202 mm 96.57dpi
crtc 1: 720x400 70.08 +1366+0 "VGA1"
000:<:0031: 20: RANDR-Request(140,7): SetScreenSize window=0x000000d9 width=1726 height=768 width[mm]=453 height[mm]=202
000:<:0032: 32: RANDR-Request(140,21): SetCrtcConfig crtc=0x00000040 timestamp=0x00000000 config timestamp=0x00010a4d x=1366 y=0 mode=0x000000fc rr=Rotate_0 outputs=0x0000004a;
000:>:0032:32: Reply to SetCrtcConfig: status=Success(0x00)
screen 0: 2049x768 538x202 mm 96.57dpi
crtc 1: 1366x768 59.79 +1366+0 "VGA1"
000:<:002f: 4: Request(36): GrabServer
000:<:0030: 20: RANDR-Request(140,7): SetScreenSize window=0x000000d9 width=2049 height=768 width[mm]=538 height[mm]=202
000:<:0031: 32: RANDR-Request(140,21): SetCrtcConfig crtc=0x00000040 timestamp=0x00000000 config timestamp=0x00010a4d x=1366 y=0 mode=0x000000f8 rr=Rotate_0 outputs=0x0000004a;
000:>:0030:Error 8=Match: major=140, minor=7, bad=217
000:>:0031:32: Reply to SetCrtcConfig: status=Success(0x00)
X Error of failed request: BadMatch (invalid parameter attributes)
Major opcode of failed request: 140 (RANDR)
Minor opcode of failed request: 7 (RRSetScreenSize)
Serial number of failed request: 48
Current serial number in output stream: 49
第二种组合:相同模式,不同规模
$ xtrace xrandr --verbose --output VGA1 --mode 1366x768 --right-of LVDS1 --scale 1x1
$ xtrace xrandr --verbose --output VGA1 --mode 1366x768 --right-of LVDS1 --scale 0.5x0.5
screen 0: 2732x768 718x202 mm 96.57dpi
crtc 1: 1366x768 59.79 +1366+0 "VGA1"
000:<:002f: 4: Request(36): GrabServer
000:<:0030: 20: RANDR-Request(140,7): SetScreenSize window=0x000000d9 width=2732 height=768 width[mm]=718 height[mm]=202
000:<:0031: 56: RANDR-Request(140,26): SetCrtcTransform crtc=0x00000040 transform={matrix=1.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,1.000000;}; filter name='nearest' filter params=;
000:<:0032: 32: RANDR-Request(140,21): SetCrtcConfig crtc=0x00000040 timestamp=0x00000000 config timestamp=0x00010a4d x=1366 y=0 mode=0x000000f8 rr=Rotate_0 outputs=0x0000004a;
000:>:0032:32: Reply to SetCrtcConfig: status=Success(0x00)
000:<:0030: 28: RANDR-Request(140,21): SetCrtcConfig crtc=0x00000040 timestamp=0x00000000 config timestamp=0x00010a4d x=0 y=0 mode=0x00000000 rr=Rotate_0 outputs=;
000:>:0030:32: Reply to SetCrtcConfig: status=Success(0x00)
screen 0: 2049x768 538x202 mm 96.57dpi
crtc 1: 1366x768 59.79 +1366+0 "VGA1"
000:<:0031: 20: RANDR-Request(140,7): SetScreenSize window=0x000000d9 width=2049 height=768 width[mm]=538 height[mm]=202
000:<:0032: 56: RANDR-Request(140,26): SetCrtcTransform crtc=0x00000040 transform={matrix=0.500000,0.000000,0.000000,0.000000,0.500000,0.000000,0.000000,0.000000,1.000000;}; filter name='bilinear' filter params=;
000:<:0033: 32: RANDR-Request(140,21): SetCrtcConfig crtc=0x00000040 timestamp=0x00000000 config timestamp=0x00010a4d x=1366 y=0 mode=0x000000f8 rr=Rotate_0 outputs=0x0000004a;
000:>:0033:32: Reply to SetCrtcConfig: status=Success(0x00)
$ tail /var/log/Xorg.0.log
##1st
[ 6644.557] (II) intel(0): resizing framebuffer to 1726x768
[ 6644.560] (II) intel(0): switch to mode [email protected] on VGA1 using pipe 1, position (1366, 0), rotation normal, reflection none
[ 6660.882] (II) intel(0): switch to mode [email protected] on VGA1 using pipe 1, position (1366, 0), rotation normal, reflection none
##2nd
[ 6804.638] (II) intel(0): resizing framebuffer to 2732x768
[ 6804.647] (II) intel(0): switch to mode [email protected] on VGA1 using pipe 1, position (1366, 0), rotation normal, reflection none
[ 6817.753] (II) intel(0): resizing framebuffer to 2049x768
[ 6817.757] (II) intel(0): switch to mode [email protected] on VGA1 using pipe 1, position (1366, 0), rotation normal, reflection none
其他问题的突出案例
##
xrandr: Failed to get size of gamma for output default
驱动程序支持或没有加载驱动器的问题,这在
nomodeset
旧显卡中很常见。xrandr
没有 KMS 就无法正常工作。指标:sudo lshw -c display
*-display UNCLAIMED
也可能为driver=
空。maximum 1920 x 1080
缓冲区大小正好是屏幕尺寸的最小值,现在大多数图形都是maximum 8192 x 8192
,maximum 16384 x 16384
甚至是 32Kx32K。- 没有常规的连接名称
default
! - 使用了 OpenGL 软件渲染器,请查看
glxinfo
,例如:Gallium3D/llvmpipe
。
重现类似问题
创建一个 Ubuntu 虚拟机,但不安装客户机添加/模块(包括 vbox 图形驱动程序)。它会非常慢,并且真实机器也会发生同样的情况。
##
X Error of failed request: BadMatch (invalid parameter attributes)
(RRQueryOutput属性)使用了错误的属性名称
xrandr --output .. --set <name> <value>
,用户应首先使用 检查可用的属性xrandr --prop
。同一案例已解决:可用的属性取决于所使用的驱动程序和适配器,因此它也可能是以前的情况(驱动程序问题)的结果,因为没有向 xrandr 声明任何属性。
重现类似问题
xrandr --output <connection-name> --set whatever 0
##
X Error of failed request: BadMatch (invalid parameter attributes)
(RR添加输出模式)我目前的理论,计划稍后有时间时进行测试。在这里记录下来。所以我不会忘记,其他人也可能会给出一些反馈。
xrandr .. --addmode
由于 EDID 验证,当驱动程序拒绝时会产生错误。nvidia 驱动程序会丢弃一些模式,我注意到在启用“ModeDebug”后。要么:- 显示器的 EDID 数据不完美
- 驱动程序在处理 EDID 方面不够强大
- 生成的模式条目不在 EDID 中声明的监视器范围内
情况(1 和 2)的解决方案是自定义覆盖 Hsync/Vsync/PixelClock 或完整的本地 EDID 文件,某些驱动程序可以忽略 EDID。
案例 (3) 的解决方案是尝试不同的模式进入。注意区别
$ cvt 1280 800 60 # 1280x800 59.81 Hz (CVT 1.02MA) hsync: 49.70 kHz; pclk: 83.50 MHz Modeline "1280x800_60.00" 83.50 1280 1352 1480 1680 800 803 809 831 -hsync +vsync $ gtf 1280 800 60 # 1280x800 @ 60.00 Hz (GTF) hsync: 49.68 kHz; pclk: 83.46 MHz Modeline "1280x800_60.00" 83.46 1280 1344 1480 1680 800 801 804 828 -HSync +Vsync # reduce mode only for flat monitors $ cvt -r 1280 800 60 # 1280x800 59.91 Hz (CVT 1.02MA-R) hsync: 49.31 kHz; pclk: 71.00 MHz Modeline "1280x800R" 71.00 1280 1328 1360 1440 800 803 809 823 +hsync -vsync
例如,有些情况只需将垂直同步稍微调低一点即可解决
1280 800 59.80
。然后,如果使用具有不同垂直同步的双显示器,可能会在一个屏幕上看到循环行为(例如每 15 分钟空白 3 秒)。这是因为如果使用标准 60Hz,则与其他屏幕的差异为 0.2Hz。无论如何,这个问题可能已经随着新的高级多头适配器和 4K 屏幕而消失。解决方案:更改为所有连接的显示器支持的精确频率,移除不兼容的显示器。(根本原因,可能是一些廉价的显示器芯片是为电视设计的)