ラップトップにLinuxMint17があります。また、HDMIケーブルを使用してラップトップに接続された22インチのモニターがあります。 LUKSとLVMで完全に暗号化されている場合の私のディスク。起動時に、暗号化されたパーティションのパスワードを入力するためのグラフィカルなプロンプトが表示されます。パスワードを要求するときに、ラップトップと外部モニターの両方の画面解像度が間違っています。グラフィカルプロンプトとLinuxミントのロゴが両方のモニターの左上隅に移動し、残りのスペースは黒になります。プロファイルにログインした後にのみ、解決が正しくなります。これは、ログインしたときにxrandr
が表示するものです。
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)
暗号化されたディスクをマウントした後、xrandr
コマンドを使用してモニターの解像度を変更できます。ただし、このコマンドはinitramfs
では使用できません。
最近、initramfs
スクリプトを使用して、起動時に別のノートパソコンの画面の明るさを修正しましたが、機能しました。このスクリプトは、正しい値を/sys/class/backlight/acpi_video0/brightness
にエコーすることによって明るさを設定していました。どういうわけか画面解像度を変更するようなものを使用することもできますか?
[〜#〜]更新[〜#〜]
私は@mikeservソリューションを試しました:
モニターからのEDIDファイル(正しいかどうかはわかりません):
# 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
Initramfsのフックスクリプトは、i915
モジュールをロードし、EDID
ファイルをinitramfs
内の/lib/firmware/edid/
ディレクトリにインクルードします(チェックしたところ、EDID
ファイルは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
再起動時にブートパラメータを追加しました(HDMI-1またはHDMI1などのどちらにする必要があるかわかりません)
drm_kms_helper.edid_firmware=HDMI1:/lib/firmware/edid/1920x1080.bin
何も変わりませんでした。だから私も試しました:
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
まったく運がない。上から一歩踏み出す前のようです。
また、ラップトップモニターのHDMIモニターID切断解像度が正しい場合に追加したいと思います。
私は何が間違っているのですか?
UPDATE 2
まだ動かない。私が取ったステップ:
私のモニターの正しい名前を見つけました:
$ 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
linux-doc
(カスタムEDID
の作成を説明するドキュメントを取得するため)、dos2unix
、make
(EDID
ファイルをコンパイルするため)パッケージをインストールします
$ Sudo apt-get install linux-doc dos2unix make
コンパイル用の一時ディレクトリを作成し、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
ファイル1366x768.S
を正しい 値 で編集し、コンパイルして、/lib/firmware/edid
にコピーします。
ノートパソコンの画面の現在の作業モードラインを取得する
$ xvidtune -show
"1366x768" 76.50 1366 1402 1450 1546 768 771 776 824 -hsync -vsync
それらは順番に:resolution
、clock MHz
、hdisp
、hsyncstart
、hsyncend
、htotal
、vdisp
、vsyncstart
、vsyncend
、vtotal
値を計算します:
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
最終バージョン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"
ファイルをコンパイルし、edid-decode
(Sudo apt-get install edid-decode
)を使用してエラーがないかどうかを確認します。
$ 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
ファイルを/lib/firmware/edid
にコピーします
$ Sudo cp *.bin /lib/firmware/edid
initramfs
を更新し、フックスクリプトはedidファイルを追加する必要があります(それらはあります、私はチェックしました)
$ Sudo update-initramfs -u
起動時に、grubコマンドラインを編集します(起動時にShiftキーを押してgrubメニューを表示し、e
を押した後)。
linux /vmlinuz-3.13.0-24-generic root=/dev/mapper/mint--vg-root ro quiet splash $vt_handoff
に
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
また、1台のモニターだけに設定してみました。しかし、まったく運がありません。解像度の問題ではなく、プリマスの画像そのものに問題があると思い始めています。ブートイメージを見ると、ぼやけたり、伸びたりすることはなく、Linuxmintのロゴはシャープでクリアです。それは私の画面よりも少し小さく、私のラップトップとHDMI画面の左上部分に配置されています。
私は見つけました このバグ それは私の問題に本当に似ています。だから私は彼らがこれを修正するのを待たなければならないと思います。
モニターは、EDIDと呼ばれるデジタル標準を使用してそれ自体に関する情報を提供します。カーネルは、ディスプレイデバイスを検出するときにこの情報を読み取り、ディスプレイデバイスのネイティブ解像度にできるだけ一致するようにディスプレイを自動的に構成します。 LCDデバイスは、実際には、1つの解像度のみをサポートできます-ネイティブ解像度-およびemulate他のすべて。 wikipedia から:
拡張ディスプレイ識別データ(EDID)は、ビデオソース(グラフィックカードやセットトップなど)にその機能を説明するためにデジタルディスプレイによって提供されるデータ構造です。ボックス)。これは、現代のパーソナルコンピュータがどのような種類のモニターが接続されているかを知ることを可能にするものです。 EDIDは、Video Electronics Standards Association(VESA)によって公開された規格によって定義されています。 EDIDには、メーカー名とシリアル番号、製品タイプ、蛍光体またはフィルタータイプ、ディスプレイでサポートされるタイミング、ディスプレイサイズ、輝度データ、および(デジタルディスプレイの場合のみ)ピクセルマッピングデータが含まれます。
これに伴う問題は、提供された[〜#〜] edid [〜#〜]が間違っていることが非常に多いことです。 または何らかの形で破損しています-これは通常、その情報をデバイスのファームウェアにプログラムする必要がある怠惰なまたは誤ったガイドの製造元が原因です。 HDMIワイヤーの不良が原因である可能性もありますが、デジタルケーブルははるかにまったく機能しない可能性が高いため、この可能性ははるかに低くなります。 。しかし、他の可能性もあります。KMSを使用する場合、これはおそらく興味深いものです。
今日、カーネルモード設定の出現により、すべてのコンポーネントが標準に準拠しているためにグラフィックボードが正しく機能しているか、起動後に画面が暗いままであるか、間違った領域が表示されているためにコンピュータが使用できなくなっています。これが発生するケースは次のとおりです。
グラフィックボードはモニターを認識しません。
グラフィックボードはEDIDデータを検出できません。
グラフィックボードは、EDIDデータを誤ってドライバーに転送します。
モニターは、EDIDデータを送信しないか偽のデータを送信します。
A KVMは、接続されたモニターにクエリを実行する代わりに、独自のEDIDデータを送信します。
ほとんどの場合、カーネルパラメータ「nomodeset」を追加すると役立ちますが、後で制限が発生します。
∆That∆は、KMS EDIDの kernel.org独自のHOWTO.txt からの抜粋です。そのテキストファイルは、モニターが提供するEDIDをバイパスするために、カーネルパラメーターとinitramfsを介して起動時にカーネルを提供できる5つの標準解像度EDIDと同じ 同じフォルダー にあります。
オープンソースのディスプレイドライバーの1つを使用している場合は、カーネルモード設定を使用しており、たとえば、すでに説明した5つのKMSEDID解像度バイパスプリセットのいずれかを使用できます。または、ディスプレイデバイスから提供される情報の代わりに、カーネルが使用する独自のEDIDファイルを完全に提供することもできます。
詳細については、Arch Linux wikiの このセクション を参照してください。ただし、おそらく このAskUbuntuスレッド はディストリビューションをターゲットにした方がよいでしょう。
KMSを使用せず、代わりにnvidiaまたはAMDクローズドソースドライバーを使用している場合、私が知る限り、ブート時の解像度を確実に処理する可能性はほとんどありません。これらをgrub
または別のブートローダーbeforeで構成することは可能かもしれませんが、initramfsイメージがマウントされる可能性があります。後でX
の開始がかなり高いときに、クローズドソースドライバー自体の解決構成に干渉します。あなたがvery運が良ければ、マザーボードの製造元から、起動時の解像度を構成するためのUEFIファームウェアの設定が提供されており、その前に設定することができます。 grub
などのセカンダリブートローダーがロードされます。でも、こんなにラッキーな人を個人的に知ったことはありません。