Mengapa kesalahan xrandr “BadMatch”, “BadName”, “Gamma Failed” terjadi?

13

Saya belum menemukan solusi tunggal untuk kesalahan seperti itu, meskipun ada sejumlah besar pengguna di luar sana yang memilikinya.

Jadi saya ingin mencoba mencari solusi sendiri. Namun, saya tidak tahu mengapa itu terjadi ...

Adakah yang tahu mengapa? Anda tidak perlu mengatakan mengapa setiap kesalahan terjadi, hanya satu kesalahan yang hebat!

Contoh:

Kesalahan 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

Kesalahan nama buruk:

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

Kesalahan Gamma Gagal:

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*
TellMeWhy
sumber
Perintah mana yang Anda jalankan untuk menghasilkan masing-masing?
user.dz
1
cvt resolution- lalu biasa --newmode, --addmodedan --outputperintah
TellMeWhy

Jawaban:

12

Info Minimum

Anda akan mengajukan pertanyaan, lalu menambahkan tautan yang dihasilkan oleh perintah ini

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


Penyelesaian masalah

Sedikit bicara

Jauh lebih rumit dari yang saya kira, ketika saya mencoba bermain dengan Intel GPU saya untuk beberapa waktu menggunakan xrandr . Terkadang, saya mendapatkan kesalahan yang tidak terduga. Ini adalah musim panas untuk pengalaman saya.

Berikut ini adalah daftar stack lengkap yang disederhanakan, seperti yang saya mengerti.

xrandr
  └─ Xorg (w/ driver specific module)
      └─ kernel
          └─ driver
               │ 
             graphic card
               └─ cables (kvm switch/connection adapter)
                    └─ monitor

Ini benar-benar tumpukan besar untuk dipecahkan, lebih sulit dengan perangkat keras lama dan pembaruan driver yang terus bergulir, bahkan kontak pin yang buruk pada kabel VGA DB-15 (atau kabel murah) dapat membuat perbedaan. Sebenarnya, sebagian besar masalah yang saya baca di sini di Tanya Ubuntu adalah tentang kehilangan / kesalahan data EDID dari monitor, menyalahkan: kabel (kvm switch / koneksi adapter). Anda dapat melihat itu dengan cepat dari xrandr --verboseoutput.

Banyak kasus juga driver membatasi beberapa mode karena data EDID tidak lengkap / sebagian salah dari Monitor (Kesalahan pabrikan), Pengguna mengatasi ini dengan menulis kustom xorg.confuntuk mengganti: Mode, HSync & VSync, EDID, DPI ... tergantung pada driver (nvidia untuk contoh dapat IgnoreEDID dari monitor)

Saya merekomendasikan ini untuk membaca untuk pengguna tingkat lanjut atau yang menyediakan bantuan di sini:

Memperhatikan:

Hati-hati saat membaca dokumentasi dan posting lama yang memberikan solusi. Lebih baik, untuk mencari dokumentasi untuk drive tertentu yang digunakan.

  • Verifikasi tanggal posting, tanggal edit terakhir atau versi perangkat lunak.
  • modeset, DRIataufb tipe driver (framebuffer). (hanya sadar, saya bukan ahli).
  • Xorg telah melakukan banyak hal terhadap konfigurasi otomatis sehingga xorg.conftidak dibuat secara default. Bahkan jika pengguna telah membuat satu, ia tidak boleh membuat semua bagian tetapi hanya menimpa apa yang dibutuhkan. Ini adalah jenis konfigurasi dengan cepat.

Pemahaman dummy saya tentang kesalahan-kesalahan xrandr / X itu

Sang putra ( xrandr) tampaknya tidak menyadari apa yang mampu atau akan disetujui ayahnya untuk membelinya (semua kemampuan pengemudi), jadi ia hanya mendatangi ibunya (Xorg) dan memintanya untuk meminta hal-hal yang diinginkan ayahnya. Jadi salah satu skenario berikut akan terjadi:

  • rasio tinggi: Son → (:) accept) Mom → (:) accept) ayah, semuanya senang!
  • rasio rendah: Anak → (: | menerima) Ibu → (menolak XD) ayah, kadang-kadang hidup itu sulit!
  • kasus yang jarang: Son → (X / reject) Mom -x- (: | neutral) ayah, waktu untuk rencana B!

Jadi kami mendapatkan kesalahan tersebut ketika Xorg atau Driver tidak dapat memproses atau menolak permintaan xrandr karena:

  • Pengaturan Xorg saat ini
  • Kemampuan pengemudi
  • Kemampuan adaptor grafis
  • Kemampuan monitor didapat dari EDID
  • Bug di salah satunya termasuk xrandr

Mengumpulkan info debug untuk grafik umum!

Mengapa? Saya melihat banyak pertanyaan di sini terkait dengan xrandr& resolusi , mereka kehilangan banyak info tentang pengaturan tumpukan penuh. Set Dianggap hanya menyebutkan perintah gagal terakhir. Bahkan, saya akan menyarankan untuk memberikan hasil lengkap dalam pertanyaan sehingga kita dapat mencari kesamaan dan menghubungkan masalah yang terkait.

Jika tidak ada data EDID yang ditemukan, mulailah dengan:

  • Bagaimana monitor terhubung secara fisik, yaitu apakah KVM digunakan? Adaptor koneksi apa pun ex. HDMI ke VGA?
  • Sudahkah Anda mencoba kabel lain?
  • Apa Merek / Model monitor?

Berikut daftar beberapa perintah bermanfaat

  1. Info latar belakang

    sudo dmidecode -s system-product-name
    lsb_release -sd
    Xorg -version
    xrandr -v
    sudo lshw -c display
    
  2. Info dasar

    xrandr --verbose
    cat /etx/X11/xorg.conf
    more /var/log/Xorg.0.log
    
  3. Perintah & opsi debug

    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
    
  4. Opsi debug lanjutan

    Tambahkan Option "ModeDebug" "true"ke Section "Device"ke xorg.conf, lihat men-debug nvidia bawah ini untuk rincian.

Info debug tambahan untuk grafis nvidia!

  • cat /proc/driver/nvidia/version untuk versi yang tepat
  • Mengaktifkan info debug nvidia ke /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"`
    
  • Dokumentasi lengkap di file:///usr/share/doc/nvidia-*/html/, cari versi yang sama, ada banyak perubahan dalam opsi yang tersedia dan pengaturan default.


Kasing uji debugging dengan driver Intel

Berikut ini adalah kasus yang saya dapat mereproduksi itu dan sepertinya bug di xrandr. Jelas dari xtrace& Xorg.0.log, bahwa frame-buffer tidak diubah ukurannya pada kombinasi pertama.

#Seems a bug in xrandr
#Xorg error when changing to bigger resolution without changing a previously defined scale.

#-----------
#system info

$ 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)

Other info not collected 

$ grep intel /var/log/Xorg.0.log

#-------------------------
#case reproducing & debug

## 1st combination different mode & same scale
$ 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

## 2nd combination same mode & different scale
$ 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

Kasus luar biasa dari pertanyaan lain

  • xrandr: Failed to get size of gamma for output default

    Dukungan driver atau Tidak ada masalah drive dimuat, ini terkenal dengan nomodesetgrafis lama. xrandrtidak bekerja dengan baik tanpa KMS. Indikator:

    1. sudo lshw -c displaybisa *-display UNCLAIMEDjugadriver= kosong.
    2. maximum 1920 x 1080ukuran buffer persis ukuran layar minimum, sebagian besar grafik sekarang maximum 8192 x 8192, maximum 16384 x 16384atau bahkan 32Kx32K.
    3. Tidak ada nama koneksi reguler default!
    4. Sebuah perangkat lunak penyaji OpenGL digunakan, cek glxinfo, contoh: Gallium3D/llvmpipe.

    Untuk mereproduksi masalah serupa

    Buat virtualbox Ubuntu tanpa menginstal tambahan tamu / modul (yang termasuk driver grafis vbox). Ini akan sangat lambat dan hal yang sama terjadi dengan mesin nyata.

  • X Error of failed request: BadMatch (invalid parameter attributes) (RRQueryOutputProperty)

    Nama properti yang salah digunakan xrandr --output .. --set <name> <value>, pengguna harus memeriksa dulu untuk properti yang tersedia menggunakanxrandr --prop . Kasus yang sama diselesaikan di sini:

    Tidak dapat mengubah kecerahan di laptop

    Properti yang tersedia bergantung pada driver dan adaptor yang digunakan, sehingga bisa jadi akibat masalah driver sebelumnya, karena tidak ada properti yang dideklarasikan ke xrandr.

    Untuk mereproduksi masalah serupa

    xrandr --output <connection-name> --set whatever 0
    
  • X Error of failed request: BadMatch (invalid parameter attributes) (RRAddOutputMode)

    Teori saya saat ini, berencana untuk menguji nanti ketika saya punya waktu. mendokumentasikannya di sini. jadi saya tidak lupa dan yang lain mungkin memberikan umpan balik.

    Kesalahan terjadi xrandr .. --addmodeketika pengemudi menolaknya, karena validasi EDID. Saya perhatikan bahwa nvidia menghapus beberapa mode setelah mengaktifkan "ModeDebug". Antara:

    1. Data EDID dari monitor tidak sempurna
    2. Driver tidak kuat dalam memproses EDID
    3. Entri mode yang dihasilkan tidak dalam kisaran monitor yang dinyatakan dalam EDID

    (1 & 2) solusi adalah menimpa kustom Hsync / Vsync / PixelClock atau menyelesaikan file EDID lokal, beberapa driver dapat mengabaikan EDID.

    (3) solusinya adalah mencoba entri mode yang berbeda. Perhatikan perbedaannya

    $ 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
    

    Beberapa kasus diselesaikan dengan hanya mengubah vsync sedikit lebih rendah, misalnya 1280 800 59.80.

user.dz
sumber
1
Inilah yang mulai saya pikirkan ... Anda tampaknya telah menemukan banyak sekali dalam waktu yang singkat. Saya akan memeriksa semua perintah / file yang Anda berikan, dan lihat bagaimana saya bisa mengembangkannya. Sekali lagi terima kasih Sneetsher!
TellMeWhy
@DevRobot, saya perhatikan Anda telah mencari sumber xrandr jadi saya pikir mungkin Anda lebih tertarik pada debugging. Saya telah menambahkan kasus menarik yang dapat mereproduksinya dengan semua info yang dapat saya kumpulkan.
user.dz
2
Wow, sungguh pekerjaan yang menyeluruh.
Jacob Vlijm
Di mana di bumi Anda menemukan semua ini ??
TellMeWhy
@ DevRobot, Nah setelah pertama kali saya memberikan jawaban di sini, saya mulai mengikuti kasus tentang tumpukan grafis di sini di AU. Dan lebih tertarik pada postingan yang mendapat solusi. Saya juga meluangkan waktu untuk mencoba mereproduksi beberapa masalah dan membaca beberapa dokumen eksternal (saya menghubungkan yang menurut saya menarik).
user.dz