web-dev-qa-db-fra.com

Comment puis-je améliorer le comportement de Linux lorsque l'EDID n'est pas disponible?

J'utilise Mythbuntu 12.04 avec un téléviseur qui ne fournit que des informations EDID lorsqu'il est allumé. Étant donné que l'ordinateur sera utilisé pour enregistrer des vidéos via MythTV, je ne souhaite pas toujours laisser le téléviseur allumé pendant le fonctionnement de l'ordinateur.

J'ai sauvegardé l'EDID dans un fichier, je l'ai placé dans/lib/firmware et ajouté drm_kms_helper.edid_firmware=DVI-I-1:LT26-A.VGA.EDID.bin à la ligne de commande du noyau. Le noyau charge l'EDID à partir de ce fichier et X démarre avec la résolution appropriée. Cependant, le noyau tente toujours de lire EDID à partir du périphérique et spams mes journaux avec des messages comme celui-ci:

[   31.926373] [drm:drm_edid_block_valid] *ERROR* EDID checksum is invalid, remainder is 128
[   31.927144] Raw EDID:
[   31.927352]          ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[   31.927882]          ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[   31.928454]          ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[   31.928984]          ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[   31.929513]          ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[   31.930042]          ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[   31.930569]          ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[   31.931097]          ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[   31.931630] radeon 0000:01:00.0: DVI-I-1: Ignoring invalid EDID block 1.
[   31.990143] i2c i2c-3: sendbytes: NAK bailout.
[   31.993215] [drm:radeon_dvi_detect] *ERROR* DVI-I-1: probed a monitor but no|invalid EDID
[   32.023802] [drm] Got external EDID base block and 0 extensions from "LT26-A.VGA.EDID.bin" for connector "DVI-I-1"
[   32.774355] i2c i2c-3: sendbytes: NAK bailout.

L'ajout de l'option drm_kms_helper.edid_firmware entraîne également un long délai lors de l'arrêt ou du redémarrage. Cela se produit même lorsque le moniteur est allumé. Cela est en partie dû à toutes les invocations de plymouth pendant un certain temps, probablement à plymouthd. Cela rend les scripts exécutés à l’arrêt bloqués pendant un moment. Ne pas utiliser plymouthd à l'arrêt aide, mais il y a toujours un délai.

Après le délai, je vois:

[drm:edid_load] *ERROR* Requesting EDID firmware "LT26-A.VGA.EDID.bin" failed (err=-2)

Cela clignote très rapidement et est suivi de l’écran de démarrage ou du redémarrage. Je ne pouvais enregistrer qu'en utilisant une caméra. Cela n’a aucun sens pour moi, car pendant le délai, l’ordinateur était pleinement utilisable via SSH. Le noyau aurait dû être capable de lire le fichier.

Je ne pense pas que ce soit un problème de Plymouth. Il est probablement suspendu parce qu'un changement de mode vidéo demandé est suspendu. Cependant, j'aimerais pouvoir dire à Plymouth de toujours rester en mode texte VGA ordinaire.

J'ai aussi essayé les options de noyau drm_kms_helper.poll=0 et drm_kms_helper.poll=N. Ils peuvent définir l'option en fonction de/sys, mais cela ne change rien.

L'ajout du paramètre de noyau nomodeset élimine ces problèmes. Cependant, la version actuelle du pilote radeon sur le serveur X ne fonctionne pas correctement et les versions plus récentes refusent de s'exécuter.

Mise à jour: L'ajout de --tty=/dev/console à l'appel de plymouthd à l'arrêt dans /etc/init/plymouth.conf a corrigé le blocage de l'arrêt, même lorsque le téléviseur est éteint.

7
dreamlayers

Je n'ai pas exactement le même problème, mais j'ai rencontré quelques problèmes avec xorg lorsque je changeais d'utilisateur entre les sessions ouvertes:

PROBLÈME: J'ai une session avec 1600x1050 et je passe à la session d'un autre utilisateur précédemment définie avec la même résolution de 1600x1050. Mais lorsque je passe à cette session, l’écran devient 1280x1024 et pour une raison quelconque, la taille de la session est vraiment très fausse (elle est plus grande que la résolution de l’écran et je ne peux ni bouger ni cliquer sur la plupart des choses; je dois donc redémarrer tous les Xorg).

CONTOURNEMENT: Heureusement, j'ai trouvé un moyen de le résoudre de manière délicate: modifiez le nom du fichier de résolution avec votre fichier de résolution.

  1. Installez la commande get-edid:

    Sudo apt-get install read-edid
    
  2. Créez un fichier bin avec des informations edid:

    Sudo get-edid  > 1600x1050.bin
    
  3. Créez un dossier pour stocker ce fichier:

     Sudo mkdir /lib/firmware/edid
    
  4. Copiez le fichier:

     Sudo cp 1600x1050.bin /lib/firmware/edid
    
  5. Editez grub pour éditer la commande linux pour charger ce fichier en kms:

     sudoedit /etc/default/grub
    

    Ligne d'édition:

     GRUB_CMDLINE_LINUX_DEFAULT="drm_kms_helper.edid_firmware=edid/1600x1050.bin quiet" 
    

    Changez votre fichier name.bin et lancez

     Sudo update-grub
    
  6. Redémarrez et testez.

Pour une raison quelconque, cela a très bien fonctionné pour moi. J'ai cette carte et chauffeur:
fglrxinfo
affichage:: 0 écran: 0
Chaîne de fournisseur OpenGL: Advanced Micro Devices, Inc.
Chaîne de rendu OpenGL: AMD Radeon HD 6450
Chaîne de version OpenGL: 4.2.12002 Contexte du profil de compatibilité 9.012

Mes informations edid ci-dessous, affichées après l'exécution de la commande
# parse-edid < 1600x1050.bin:

parse-edid: parse-edid version 2.0.0
parse-edid: EDID checksum passed.

        # EDID version 1 revision 3
Section "Monitor"
        # Block type: 2:0 3:fc
        Identifier "22T41-H-AN"
        VendorName "KTC"
        ModelName "22T41-H-AN"
        # Block type: 2:0 3:fc
        # Block type: 2:0 3:fd
        HorizSync 15-68
        VertRefresh 49-61
        # Max dot clock (video bandwidth) 150 MHz
        # DPMS capabilities: Active off:no  Suspend:no  Standby:no

        Mode    "1280x720"      # vfreq 60.000Hz, hfreq 45.000kHz
                DotClock        74.250000
                HTimings        1280 1390 1430 1650
                VTimings        720 725 730 750
                Flags   "+HSync" "+VSync"
        EndMode
        Mode    "1680x1050"     # vfreq 59.883Hz, hfreq 64.674kHz
                DotClock        119.000000
                HTimings        1680 1728 1760 1840
                VTimings        1050 1053 1059 1080
                Flags   "-HSync" "+VSync"
        EndMode
        # Block type: 2:0 3:fc
        # Block type: 2:0 3:fd
EndSection

kernel.log:

2139 Oct  2 21:45:06 dans679-computer kernel: [    0.000000] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-3.8.0-30-generic root=UUID=939b3111-4906-46ae-9ad7-7faa783d490d ro drm_kms_helper.edid_firmware=edid/1600x1050.bin quiet

Je cherchais d’autres rapports de bogues similaires dans le tableau de bord, mais je cherchais toujours le bon. Je pense que ce problème affecte beaucoup de choses dans KMS (commutateur de mode noyau), pas seulement la commutation entre les sessions utilisateur, mais aussi les jeux en plein écran avec une résolution différente et d'autres choses.

Il est très difficile de trouver la bonne façon de signaler ce problème. J'aimerais avoir de l'aide avec une équipe Xorg/Kernel.

Je pense que cela pourrait être corrigé à un niveau bas, mais pourrait également être corrigé avec ce type de solution de contournement d'une manière plus simple pour les utilisateurs: par exemple, l'ajout d'un script permettant de tester si edid est détecté ou non, et de demander à l'utilisateur s'il le souhaite. laissez le script récupérer les informations edid et transmettez-les à la commande kernel, puis demandez-lui s'il fonctionne correctement et si l'utilisateur souhaite conserver ces paramètres.

J'ai trouvé la plupart de ces informations dans La page de paramétrage du mode noyau d'Arch wiki

Je le poste sur:

https://askubuntu.com/posts/352978

https://bugs.launchpad.net/ubuntu/+source/xserver-xorg-video-ATI/+bug/579292

2
pablodav

Edid doit commencer par

00 FF FF FF FF FF FF 00

mais ne pas être 128 fois FF.

Vous n'avez pas d'EDID peut-être parce qu'il est effacé, il n'y a pas de puce avec EDID ou ce qui est très probable, il y a un contact physique brisé sur l'interface EDID entre le moniteur ou la carte vidéo. Ou même à l'intérieur de votre moniteur.

1
Analysis