
私のラップトップには Linux Mint 17 がインストールされています。また、HDMI ケーブルを使用して 22 インチ モニターをラップトップに接続しています。ディスクは LUKS と LVM で完全に暗号化されています。起動時に、暗号化されたパーティションのパスワードを入力するためのグラフィカル プロンプトが表示されます。パスワードの入力を求めるとき、ラップトップと外部モニターの両方の画面解像度が間違っています。グラフィカル プロンプトと Linux Mint のロゴは両方のモニターの左上隅に移動され、残りのスペースは黒です。解像度は、プロファイルにログインした後でのみ正しくなります。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/
initramfs
EDID
# 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 が切断されている場合、ラップトップ モニターの解像度は正しいことも付け加えておきます。
何が間違っているのでしょうか?
アップデート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 つのモニターのみに設定してみました。しかし、まったくうまくいきませんでした。解像度の問題ではなく、プリマス イメージ自体の問題ではないかと考え始めています。ブート イメージを見ると、ぼやけたり、引き伸ばされたりすることはなく、Linux Mint のロゴは鮮明ではっきりしています。画面よりも小さく、ラップトップと HDMI 画面の左上部分に配置されています。
私は見つけたこのバグそれは私の問題と本当に似ています。だから、彼らがこれを修正するまで待つ必要があると思います。
答え1
モニターはEDIDと呼ばれるデジタル規格を使用して自分自身の情報を提供します。カーネルはディスプレイデバイスを検出するとこの情報を読み取り、ディスプレイデバイスのディスプレイ設定にできるだけ近い値になるように自動的にディスプレイを設定します。ネイティブ解像度。LCDデバイスは実際には1つの解像度しかサポートできません。ネイティブ解像度 - そして模倣するその他すべて。ウィキペディア:
拡張ディスプレイ識別データ(EDID)デジタル ディスプレイがビデオ ソース (グラフィック カードやセットトップ ボックスなど) にその機能を説明するために提供するデータ構造です。これにより、最新のパーソナル コンピュータは接続されているモニターの種類を認識できます。EDID は、Video Electronics Standards Association (VESA) が発行した標準によって定義されています。EDID には、製造元の名前とシリアル番号、製品の種類、蛍光体またはフィルターの種類、ディスプレイでサポートされているタイミング、ディスプレイ サイズ、輝度データ、および (デジタル ディスプレイのみ) ピクセル マッピング データが含まれます。
問題は、提供されるEDIDは間違っているまたは何らかの形で破損している - これは通常、デバイスのファームウェアに情報をプログラムしなければならない怠慢または誤った製造元によるものです。HDMIケーブルの不良が原因である可能性もありますが、デジタルケーブルは多くのまったく機能しない可能性の方が高いです。ただし、他にも可能性があり、KMS を使用している場合は、これが興味深いと思われるでしょう。
現在、カーネル モード設定の登場により、すべてのコンポーネントが標準に準拠しているためグラフィック ボードは正常に動作するか、起動後に画面が暗いままになったり間違った領域が表示されたりしてコンピューターが使用できなくなります。これが発生するケースは次のとおりです。
グラフィックボードがモニターを認識しません。
グラフィック ボードは EDID データを検出できません。
グラフィック ボードが EDID データをドライバーに誤って転送します。
モニターは EDID データを送信しないか、偽の EDID データを送信します。
KVM は、接続されたモニターを照会する代わりに、独自の EDID データを送信します。
カーネル パラメータ「nomodeset」を追加すると、ほとんどの場合に役立ちますが、後で制限が発生します。
∆それ∆からの抜粋ですkernel.org 独自の HOWTO.txtKMS EDID用です。このテキストファイルは同じフォルダ5 つの標準解像度 EDID として、カーネル パラメータと initramfs を介して起動時にカーネルに提供し、モニターが提供する EDID をバイパスできます。
オープン ソースのディスプレイ ドライバーのいずれかを使用している場合は、カーネル モード設定を使用しているため、たとえば、すでに説明した 5 つの KMS EDID 解像度バイパス プリセットのいずれかを使用できます。または、ディスプレイ デバイスによって提供される情報の代わりに、カーネルが使用する独自の EDID ファイルを完全に提供することもできます。
見るこのセクション詳細についてはArch Linux wikiを参照してください。この AskUbuntu スレッドあなたの配信に的を絞った方が良いでしょう。
KMSを使用せず、代わりにnvidiaまたはAMDのクローズドソースドライバを使用している場合、私が知る限り、ブート時の解像度を確実に処理できる可能性はほぼゼロです。grub
または別のブートローダーでこれらを構成することは可能です。前にinitramfsイメージをマウントすることは可能ですが、そうすることでクローズドソースドライバの解像度設定に干渉する可能性が高くなります。X
起動時の解像度設定に干渉する可能性がかなり高くなります。とても幸運なことに、マザーボードの製造元が UEFI ファームウェアでブート時の解像度を構成する設定を提供してくれているので、セカンダリ ブートローダーなどがgrub
ロードされる前に設定することができます。ただし、私は個人的に、それほど幸運な人を知りません。