
Ich habe Linux Mint 17 auf meinem Laptop. Außerdem ist ein 22-Zoll-Monitor über ein HDMI-Kabel mit dem Laptop verbunden. Meine Festplatte ist vollständig mit LUKS und LVM verschlüsselt. Beim Booten erhalte ich eine grafische Eingabeaufforderung zur Eingabe des Kennworts für verschlüsselte Partitionen. Die Bildschirmauflösung auf dem Laptop und dem externen Monitor ist bei der Kennwortabfrage falsch. Die grafische Eingabeaufforderung und das Linux-Mint-Logo werden auf beiden Monitoren in die obere linke Ecke verschoben und der Rest ist schwarz. Die Auflösung ist erst korrekt, nachdem ich mich bei meinem Profil angemeldet habe. Folgendes wird angezeigt, xrandr
wenn ich angemeldet bin:
Screen 0: minimum 320 x 200, current 3286 x 1080, maximum 32767 x 32767
LVDS1 connected 1366x768+1920+312 (normal left inverted right x axis y axis) 344mm x 194mm
1366x768 60.1*+ 40.1
1360x768 59.8 60.0
1024x768 60.0
800x600 60.3 56.2
640x480 59.9
VGA1 disconnected (normal left inverted right x axis y axis)
HDMI1 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 531mm x 298mm
1920x1080 60.0*+
1680x1050 59.9
1600x900 60.0
1280x1024 75.0 60.0
1280x800 59.9
1152x864 75.0
1280x720 60.0
1024x768 75.1 60.0
832x624 74.6
800x600 75.0 60.3
640x480 75.0 60.0
720x400 70.1
DP1 disconnected (normal left inverted right x axis y axis)
VIRTUAL1 disconnected (normal left inverted right x axis y axis)
Nach dem Einbinden der verschlüsselten Festplatte kann ich die Auflösung auf Monitoren mit xrandr
einem Befehl ändern. Dieser Befehl ist jedoch mit nicht verfügbar initramfs
.
Ich habe kürzlich die Bildschirmhelligkeit eines anderen Laptops beim Booten mithilfe initramfs
eines Skripts korrigiert und es hat funktioniert. Dieses Skript hat die Helligkeit eingestellt, indem es den korrekten Wert an zurückgegeben hat /sys/class/backlight/acpi_video0/brightness
. Kann ich auch etwas Ähnliches verwenden, um die Bildschirmauflösung irgendwie zu ändern?
AKTUALISIEREN
Ich habe die Lösung von @mikeserv ausprobiert:
EDID-Dateien von Monitoren (nicht sicher, ob sie korrekt sind):
# cat /sys/devices/pci0000:00/0000:00:02.0/drm/card0/card0-LVDS-1/edid > /lib/firmware/edid/1366x768.bin # cat /sys/devices/pci0000:00/0000:00:02.0/drm/card0/card0-HDMI-A-1/edid > /lib/firmware/edid/1920x1080.bin # hexdump /lib/firmware/edid/1366x768.bin 0000000 ff00 ffff ffff 00ff e430 033b 0000 0000 0000010 1600 0401 2290 7813 610a 9ed5 5b5e 269a 0000020 501a 0054 0000 0101 0101 0101 0101 0101 0000030 0101 0101 0101 1de2 b456 0050 3038 3024 0000040 0035 c258 0010 1900 13ec c656 0050 302e 0000050 3024 0035 c258 0010 1900 0000 fe00 3500 0000060 4833 3935 3180 3635 4857 0a34 0000 0000 0000070 0000 3141 0096 0000 0100 0a01 2020 ac00 0000080 # hexdump /lib/firmware/edid/1920x1080.bin 0000000 ff00 ffff ffff 00ff d109 78a5 5445 0000 0000010 1626 0301 3580 781e b72e a4d5 5456 279f 0000020 500c a554 806b 0081 c081 8081 c0a9 00b3 0000030 c0d1 0101 0101 3a02 1880 3871 402d 2c58 0000040 0045 2a13 0021 1e00 0000 ff00 4c00 4339 0000050 3030 3537 3039 3931 200a 0000 fd00 3200 0000060 1e4c 1153 0a00 2020 2020 2020 0000 fc00 0000070 4200 6e65 2051 4c47 3432 3035 200a d900 0000080
Hook-Skript für Initramfs, lädt
i915
Modul und Include-EDID
Dateien in/lib/firmware/edid/
das Verzeichnis darininitramfs
(ich habe es geprüft undEDID
die Dateien befinden sich in Initramfs)# cat /etc/initramfs-tools/hooks/include-edid-data #!/bin/sh PREREQ="udev" prereqs() { echo "$PREREQ" } case $1 in prereqs) prereqs exit 0 ;; esac . /usr/share/initramfs-tools/hook-functions # Begin real processing below this line if [ ! -e "${DESTDIR}/lib/firmware/edid" ]; then mkdir -p "${DESTDIR}/lib/firmware/edid" fi if [ -r "/lib/firmware/edid/1366x768.bin" ]; then cp "/lib/firmware/edid/1366x768.bin" "${DESTDIR}/lib/firmware/edid/" fi if [ -r "/lib/firmware/edid/1920x1080.bin" ]; then cp "/lib/firmware/edid/1920x1080.bin" "${DESTDIR}/lib/firmware/edid/" fi manual_add_modules i915 exit 0 # chmod a+rx /etc/initramfs-tools/hooks/include-edid-data # update-initramfs -u
Beim Neustart habe ich den Boot-Parameter hinzugefügt (nicht sicher, ob es HDMI-1 oder HDMI1 oder etwas anderes sein sollte)
drm_kms_helper.edid_firmware=HDMI1:/lib/firmware/edid/1920x1080.bin
Es hat nichts geändert. Also habe ich auch versucht:
drm_kms_helper.edid_firmware=HDMI-1:/lib/firmware/edid/1920x1080.bin drm_kms_helper.edid_firmware=HDMI1:edid/1920x1080.bin drm_kms_helper.edid_firmware=HDMI-1:edid/1920x1080.bin
Überhaupt kein Glück. Alles ist so, wie es war, bevor ich die Schritte von oben unternommen habe.
Ich möchte auch hinzufügen, dass die Auflösung auf dem Laptop-Monitor korrekt ist, wenn die HDMI-Monitor-ID getrennt ist.
Was mache ich falsch?
AKTUALISIERUNG 2
Funktioniert immer noch nicht. Schritte, die ich unternommen habe:
Habe die richtigen Namen für meine Monitore herausgefunden:
$ for p in /sys/class/drm/*/status; do if [ "$(cat "$p")" == "connected" ]; then echo -n "$p" | awk -F '/' '{print $5}'; fi; done card0-HDMI-A-1 card0-LVDS-1
Installieren
linux-doc
(um Dokumente zu erhalten, die die Erstellung von benutzerdefiniertenEDID
),dos2unix
,make
(zum Kompilieren vonEDID
Dateien) Paketen beschreiben$ sudo apt-get install linux-doc dos2unix make
Erstellen Sie ein temporäres Verzeichnis für die Kompilierung und kopieren Sie die Quelldateien für
EDID
$ mkdir ~/Tmp/edid $ cd ~/Tmp/edid $ cp /usr/share/doc/linux-doc/EDID/* . $ rm *.S $ cp /usr/share/doc/linux-doc/EDID/1920x1080.S . $ cp /usr/share/doc/linux-doc/EDID/1920x1080.S 1366x768.S
Bearbeiten Sie die Datei
1366x768.S
mit dem richtigenWerte, kompilieren, kopieren nach/lib/firmware/edid
:Aktuelle funktionierende Modeline für meinen Laptop-Bildschirm erhalten
$ xvidtune -show "1366x768" 76.50 1366 1402 1450 1546 768 771 776 824 -hsync -vsync
Dies sind wiederum:
resolution
,clock MHz
,hdisp
,hsyncstart
,hsyncend
, ,htotal
,vdisp
,vsyncstart
,vsyncend
,vtotal
Werte berechnen:
CLOCK = 76500 XPIX = hdisp = 1366 XBLANK = htotal - hdisp = 1546 - 1366 = 180 XOFFSET = hsyncstart - hdisp = 1402 - 1366 = 36 XPULSE = hsyncend - hsyncstart = 1450 - 1402 = 48 YPIX = vdisp = 768 YBLANK = vtotal - vdisp = 824 - 768 = 56 YOFFSET = 63 + vsyncstart - vdisp = 63 + 771 - 768 = 66 YPULSE = 63 + vsyncend - vsyncstart = 63 + 776 - 771 = 68 TIMING_NAME "Linux HDR" CRC 0xcd
Endgültige Version
1366x768.S
:$ cat 1366x768.S /* EDID */ #define VERSION 1 #define REVISION 3 /* Display */ #define CLOCK 76500 /* kHz */ #define XPIX 1366 #define YPIX 768 #define XY_RATIO XY_RATIO_16_9 #define XBLANK 180 #define YBLANK 56 #define XOFFSET 36 #define XPULSE 48 #define YOFFSET 66 #define YPULSE 68 #define DPI 96 #define VFREQ 60 /* Hz */ #define TIMING_NAME "Linux HDR" #define ESTABLISHED_TIMINGS_BITS 0x00 /* none */ #define HSYNC_POL 1 #define VSYNC_POL 1 #define CRC 0xcd #include "edid.S"
Kompilieren Sie die Dateien und prüfen Sie mit
edid-decode
(sudo apt-get install edid-decode
), ob keine Fehler vorliegen:$ make clean && make rm 1920x1080.o 1366x768.o $ ls -1 *.bin 1366x768.bin 1920x1080.bin $ edid-decode 1366x768.bin Extracted contents: header: 00 ff ff ff ff ff ff 00 serial number: 31 d8 00 00 00 00 00 00 05 16 version: 01 03 basic params: 6d 23 14 78 ea chroma info: 5e c0 a4 59 4a 98 25 20 50 54 established: 00 00 00 standard: 8b c0 01 01 01 01 01 01 01 01 01 01 01 01 01 01 descriptor 1: e2 1d 56 b4 50 00 38 30 24 30 35 00 63 c8 10 00 00 1e descriptor 2: 00 00 00 ff 00 4c 69 6e 75 78 20 23 30 0a 20 20 20 20 descriptor 3: 00 00 00 fd 00 3b 3d 30 32 08 00 0a 20 20 20 20 20 20 descriptor 4: 00 00 00 fc 00 4c 69 6e 75 78 20 48 44 52 0a 20 20 20 extensions: 00 checksum: cd Manufacturer: LNX Model 0 Serial Number 0 Made week 5 of 2012 EDID version: 1.3 Analog display, Input voltage level: 0.7/0.7 V Sync: Separate Composite Serration Maximum image size: 35 cm x 20 cm Gamma: 2.20 DPMS levels: Standby Suspend Off RGB color display First detailed timing is preferred timing Established timings supported: Standard timings supported: 1360x816@60Hz Detailed mode: Clock 76.500 MHz, 355 mm x 200 mm 1366 1402 1450 1546 hborder 0 768 771 776 824 vborder 0 +hsync +vsync Serial number: Linux #0 Monitor ranges: 59-61HZ vertical, 48-50kHz horizontal, max dotclock 80MHz Monitor name: Linux HDR Checksum: 0xcd $ edid-decode 1920x1080.bin Extracted contents: header: 00 ff ff ff ff ff ff 00 serial number: 31 d8 00 00 00 00 00 00 05 16 version: 01 03 basic params: 6d 32 1c 78 ea chroma info: 5e c0 a4 59 4a 98 25 20 50 54 established: 00 00 00 standard: d1 c0 01 01 01 01 01 01 01 01 01 01 01 01 01 01 descriptor 1: 02 3a 80 18 71 38 2d 40 58 2c 45 00 f4 19 11 00 00 1e descriptor 2: 00 00 00 ff 00 4c 69 6e 75 78 20 23 30 0a 20 20 20 20 descriptor 3: 00 00 00 fd 00 3b 3d 42 44 0f 00 0a 20 20 20 20 20 20 descriptor 4: 00 00 00 fc 00 4c 69 6e 75 78 20 46 48 44 0a 20 20 20 extensions: 00 checksum: 05 Manufacturer: LNX Model 0 Serial Number 0 Made week 5 of 2012 EDID version: 1.3 Analog display, Input voltage level: 0.7/0.7 V Sync: Separate Composite Serration Maximum image size: 50 cm x 28 cm Gamma: 2.20 DPMS levels: Standby Suspend Off RGB color display First detailed timing is preferred timing Established timings supported: Standard timings supported: 1920x1152@60Hz Detailed mode: Clock 148.500 MHz, 500 mm x 281 mm 1920 2008 2052 2200 hborder 0 1080 1084 1089 1125 vborder 0 +hsync +vsync Serial number: Linux #0 Monitor ranges: 59-61HZ vertical, 66-68kHz horizontal, max dotclock 150MHz Monitor name: Linux FHD Checksum: 0x5
Kopieren Sie Dateien nach
/lib/firmware/edid
$ sudo cp *.bin /lib/firmware/edid
Update
initramfs
, Hook-Skript sollte EDID-Dateien hinzufügen (sie sind da, ich habe es überprüft)$ sudo update-initramfs -u
Bearbeiten Sie beim Booten die Grub-Befehlszeile (drücken Sie während des Booten die Umschalttaste, um das Grub-Menü anzuzeigen, und drücken Sie anschließend
e
) von:linux /vmlinuz-3.13.0-24-generic root=/dev/mapper/mint--vg-root ro quiet splash $vt_handoff
Zu
linux /vmlinuz-3.13.0-24-generic root=/dev/mapper/mint--vg-root ro quiet splash $vt_handoff drm_kms_helper.edid_firmware=card0-LVDS-1:/lib/firmware/edid/1366x768.bin drm_kms_helper.edid_firmware=card0-HDMI-A-1:/lib/firmware/edid/1920x1080.bin
Ich habe auch versucht, es nur für einen Monitor einzustellen. Aber ohne Erfolg. Ich fange an zu glauben, dass es kein Problem mit der Auflösung ist, sondern mit dem Plymouth-Bild selbst. Wenn ich das Boot-Bild sehe, ist es nicht verschwommen, gestreckt oder so und das Linux-Mint-Logo ist scharf und klar. Es ist nur kleiner als mein Bildschirm und im linken oberen Teil meines Laptops und HDMI-Bildschirms platziert.
Ich habe gefundendieser Fehlerdas ist meinem Problem sehr ähnlich. Ich denke also, ich muss warten, bis sie das Problem beheben.
Antwort1
Ihr Monitor stellt Informationen über sich selbst mithilfe eines digitalen Standards namens EDID bereit. Der Kernel liest diese Informationen, wenn er ein Anzeigegerät erkennt, und konfiguriert seine Anzeige automatisch so, dass sie so gut wie möglich mit der des Anzeigegeräts übereinstimmt.einheimischAuflösung. LCD-Geräte können in Wahrheit nur eine Auflösung unterstützen - ihreeinheimischAuflösung - undemulieren, nacheifernalle anderen. VonWikipedia:
Erweiterte Display-Identifikationsdaten(EDID)ist eine Datenstruktur, die von einem digitalen Display bereitgestellt wird, um einer Videoquelle (z. B. Grafikkarte oder Set-Top-Box) seine Fähigkeiten zu beschreiben. Dadurch erkennt ein moderner PC, welche Arten von Monitoren an ihn angeschlossen sind. EDID wird durch einen von der Video Electronics Standards Association (VESA) veröffentlichten Standard definiert. Die EDID umfasst Herstellername und Seriennummer, Produkttyp, Phosphor- oder Filtertyp, vom Display unterstützte Timings, Displaygröße, Luminanzdaten und (nur für digitale Displays) Pixelmapping-Daten.
Das Problem dabei ist, dass sehr oft die bereitgestelltenEDIDIstfalschoder in irgendeiner Weise beschädigt - dies liegt im Allgemeinen an faulen oder fehlgeleiteten Herstellern, die diese Informationen in die Firmware des Geräts programmieren müssen. Es kann sogar an einem schlechten HDMI-Kabel liegen, aber die Wahrscheinlichkeit dafür ist viel geringer, da ein digitales Kabelvielwahrscheinlicher, dass es einfach überhaupt nicht funktioniert. Aber es gibt noch andere Möglichkeiten. Wenn Sie KMS verwenden, werden Sie das hier wahrscheinlich interessant finden:
Heute, mit dem Aufkommen des Kernel Mode Setting, funktioniert eine Grafikkarte entweder einwandfrei, weil alle Komponenten den Standards entsprechen – oder der Computer ist unbrauchbar, weil der Bildschirm nach dem Booten dunkel bleibt oder er den falschen Bereich anzeigt. Fälle, in denen dies passiert, sind:
Die Grafikkarte erkennt den Monitor nicht.
Die Grafikkarte kann keine EDID-Daten erkennen.
Die Grafikkarte leitet EDID-Daten fehlerhaft an den Treiber weiter.
Der Monitor sendet keine oder falsche EDID-Daten.
Ein KVM sendet seine eigenen EDID-Daten, anstatt den angeschlossenen Monitor abzufragen.
Das Hinzufügen des Kernelparameters „nomodeset“ hilft in den meisten Fällen, führt jedoch später zu Einschränkungen.
∆Das∆ist ein Auszug auskernel.orgs eigene HOWTO.txtfür KMS EDIDs. Diese Textdatei befindet sich imgleicher Ordnerals fünf EDIDs mit Standardauflösung, die Sie dem Kernel beim Booten über einen Kernelparameter und initramfs bereitstellen können, um die von Ihrem Monitor bereitgestellte EDID zu umgehen.
Wenn Sie einen der Open-Source-Anzeigetreiber verwenden, verwenden Sie die Kernelmoduseinstellung und können beispielsweise eine der fünf bereits erwähnten KMS EDID-Auflösungsbypass-Voreinstellungen verwenden. Alternativ können Sie Ihre eigene EDID-Datei bereitstellen, die der Kernel anstelle der vom Anzeigegerät bereitgestellten Informationen verwendet.
Sehendiese Abteilungdes Arch Linux Wikis für weitere Informationen, aber wahrscheinlichdieser AskUbuntu-Threadwäre besser auf Ihre Distribution ausgerichtet.
Wenn Sie KMS nicht verwenden und stattdessen entweder die Closed-Source-Treiber von Nvidia oder AMD verwenden, sind Ihre Chancen, die Boot-Time-Auflösungen zuverlässig zu handhaben, meines Wissens nach nahezu gleich Null. Es ist möglicherweise möglich, diese in einem grub
anderen Bootloader zu konfigurieren.Vorein beliebiges initramfs-Image ist gemountet, aber die Wahrscheinlichkeit, dass dies später beim Start die Auflösungskonfiguration der Closed-Source-Treiber beeinträchtigt, X
ist ziemlich hoch. Wenn SiesehrZum Glück hat Ihnen Ihr Motherboard-Hersteller freundlicherweise eine Einstellung in der UEFI-Firmware zur Verfügung gestellt, mit der Sie die Boot-Auflösung konfigurieren können, und Sie können sie dort festlegen, bevor überhaupt ein sekundärer Bootloader wie dieser grub
geladen wird. Ich persönlich kenne jedoch noch nie jemanden, der so viel Glück hatte.