Last updated on 2025年4月24日
なにもしてないのにモニターが壊れた。
本当に何もしてないんよ。
モニターをもらったので快適2枚モニター生活を始めようと思ったら新しい方だけ解像度が860×480で固定されてしまい変更できない。
ubuntuのディスプレイ設定画面で解像度を変更しようとしても860×480以外の選択肢が表示されない。ディスプレイのベンダー名が表示されるべきところもNvidiaとだけ書かれている。

Contents
モニターの解像度が860×480で固定されてしまう理由
LinuxとNvidia製グラボの相性の悪さに加えて、Linuxのデュアルモニター対応自体がバグだらけで死屍累々らしい。
ネットで検索すると大量の記事が見つかる。みんな苦しんでいる。
原因は大きく分けて2つあるみたい。
A. Nvidiaのドライバがちゃんと読み込まれていない。またはオープンソースのドライバnouveauが読み込まれてしまっており、不具合が発生している。
こっちの方なら治すのは簡単。
B.モニターの EDID がおかしい。
EDIDは画像を出力するためにモニターやグラボがやり取りする情報のことで、ケーブルを抜き差しするだけでOKのこともあるが、おそらくそれだけでは直らない。
二ヶ月ぐらい苦しみまくってたくさん調べたので、似たような問題の解決策はほぼ網羅してあると思う。
ちなみに、セキュアブートが有効になっているとNvidiaが不具合起こす可能性があるらしいのでまだ無効にしていない場合はBIOSで無効にする。運が良ければそれで直る。
スペック:
OS:Ubuntu24.04
グラボ:NVIDIA GeForce GT 1030
モニター:BenQ(昔からある方), Dell(新しく追加した解像度がおかしいほう)
解像度を修正する方法
モニタの解像度がおかしな場合、大抵は次の3つの方法のどれかで直る。普通は方法1, 方法2までに解決すると思うけど自分は全部やった。
方法1.Nvidiaドライバを再インストール
方法2.xrandrで解像度を強制的に指定
方法3..EDIDを自作し、xorg.confをいじる
方法3のxorg.conf
をいじる方法はパソコンのシステムを不可逆的に破壊してしまう可能性があるのでなるべく方法1.2までに解決したい。
方法1.Nvidiaのドライバを再度インストールする
まずやるべきはこれ。
Nvidia-smi
をやってみてNvidiaのドライバが読み込めていない、オープンソース(nouveau)のドライバが使用されている、みたいな場合はまずこれを試そうね。
最初にnouveauを無効化するためgedit
であたらしく設定ファイルを作る。べつにnano
でもいい。
➜ ~sudo gedit /etc/modprobe.d/blacklist-nouveau.conf
作成したファイルにnouveauを無効化する設定を書き込む。
blacklist nouveau
options nouveau modeset=0
保存して、以下を実行。
➜ ~sudo update-initramfs -u
次に、Nvidiaドライバを再インストール。
GPUの確認が必要な場合は以下を実行
➜ ~ lspci | grep -i nvidia
自分の環境に適したドライバをインストールする前に現在入っているドライバを削除。
➜ ~ sudo apt-get --purge remove nvidia-*
導入可能なドライバを確認するために次のコマンドをばちーんと実行。
➜ ~ ubuntu-drivers devices
vendor : NVIDIA Corporation
model : GP108 [GeForce GT 1030]
driver : nvidia-driver-570 - third-party non-free recommended
driver : nvidia-driver-470-server - distro non-free
driver : nvidia-driver-560 - third-party non-free
driver : nvidia-driver-545 - third-party non-free
driver : nvidia-driver-535-server - distro non-free
driver : nvidia-driver-570-server - distro non-free
driver : nvidia-driver-535 - third-party non-free
driver : nvidia-driver-565 - third-party non-free
driver : nvidia-driver-470 - third-party non-free
driver : nvidia-driver-390 - third-party non-free
driver : nvidia-driver-550 - third-party non-free
driver : xserver-xorg-video-nouveau - distro free builtin
ここからドライバを選ぶが、recommendと書かれているドライバが最適とは限らないので自分で色々試す必要があるらしい。
とりあえず driver-570をインストールすると仮定。
➜ ~ sudo add-apt-repository ppa:graphics-drivers/ppa
➜ ~ sudo apt update
➜ ~ sudo apt install nvidia-driver-570
再起動し、うまく行ったか確認
➜ ~ nvidia-smi
表みたいなのが出てきてNVIDIA-SMI 570.124.04 Driver Version: 570.124.04 CUDA Version: 12.8
のような記載があれば成功…
のはずが、Dellの解像度はまったく直っていない!
ドライバのせいではなかったらしい。
ということで次の方法を試す。
方法2.xrandrで解像度を無理やり変更
xrandrというライブラリを使用して解像度を体で覚えさせる
xrandrについてはArch wikiの説明が一番充実していると思うので時間があればぜひ。
https://wiki.archlinux.jp/index.php/Xrandr
最初に利用可能な出力端子と解像度を調べる。おもむろにxrandr
と入力。
➜ ~ xrandr
Screen 0: minimum 8 x 8, current 3840 x 1080, maximum 32767 x 32767
DP-0 connected 860x480(normal left inverted right x axis y axis) 500mm x 281mm
860x480
DP-1 disconnected (normal left inverted right x axis y axis)
HDMI-0 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 527mm x 296mm
1920x1080 60.00*+ 59.94 50.00 60.05 60.00 50.04
1680x1050 59.95
1600x900 60.00
1280x1024 75.02 60.02
1280x800 59.81
1280x720 60.00 59.94 50.00
1024x768 75.03 60.00
800x600 75.00 60.32
720x576 50.00
720x480 59.94
640x480 75.00 59.94 59.93
自分の環境ではDP-0, HDMI-0でモニタが接続されているみたい。
HDMI-0のほうがまともな方のモニタ(BenQ)、DP-0が新しく導入しようとしているDellのモニタ(解像度がおかしい)のようだ。
cvt
のあとに設定したい解像度を記入。
➜ ~ cvt 1920 1080
# 1920x1080 59.96 Hz (CVT 2.07M9) hsync: 67.16 kHz; pclk: 173.00 MHz
Modeline "1920x1080_60.00" 173.00 1920 2048 2248 2576 1080 1083 1088 1120 -hsync +vsync
このコマンドは次のステップ用の引数を取得するためのもの。
指定できる解像度はそれぞれのモニタの設定画面で調べることができる。
xrandr --newmode
のあとにcvtで調べたModelineをコピペして実行。
➜ ~ xrandr --newmode "1920x1080_60.00" 173.00 1920 2048 2248 2576 1080 1083 1088 1120 -hsync +vsync
作成した新しいモードをモニタの出力に追加。今回はDP-0を指定。
➜ ~xrandr --addmode DP-0 1280x1024_60.00
新しいモードを追加できるはずが痛恨のエラー。
X Error of failed request: BadMatch
よくわからないがEDID のチェックサムが間違っているらしい。
Arch wikiでNvidiaの記事を調べたところ、モニタのEDIDが間違っているかNvidiaドライバの制限が厳しすぎてモニタ側の設定をうまく反映できていないとのこと。
カーネルを修正しろという不吉な記述もあったが、最初にEDIDの上書きを試してみる。
方法3.EDIDを自作し、Xorg.confを設定する
要はモニタのEDID情報がおかしいので、自分でそれを作ってしまおうということ。
最初に、xorg.confを作成する。
アプリ一覧からNVIDIA X Server Settingsを開き、メニューからX Server Display Configurationを選択。
右下のSave to X Configuration Fileをおすことでファイルを新規作成できる。
修正用の設定ファイルは作成できたので今度は必要なツールを揃えていく。
➜ ~ sudo apt install zsh edid-decode automake dos2unix
➜ ~ sudo apt install build-essential
githubにedid generatorを公開している親切な人がいるので、ダウンロードさせてもらう。
➜ ~ git clone https://github.com/akatrevorjay/edid-generator
作成したディレクトリに移動
➜ ~ cd edid-generator
満を持してEDID作成のためのコマンド実行。
➜ ~ ./modeline2edid /etc/X11/xorg.conf
Searching for modelines in '/etc/X11/xorg.conf'
➜ ~ make
これで、1920×1080.binがedid-generatorディレクトリに作成された。
このファイルを/etc/X11にコピーする。
設定ファイルが置かれている/etcには普通のやり方ではコピペできないので、root権限で操作する必要がある。
root@〇〇:/# cp /home/〇〇/1920x1080.bin /etc/X11
ここまで来たのだが、今更ながらxorg.confをいじるのは非推奨と判明。
Nvidia親切おじさんの助言に従い、/etc/X11にあるxorg.confをetc/X11/xorg.conf.d/に移動し、xorg.confの名前を20-nvidia.confに変更
準備が整ったところで、設定ファイルをいじっていく。
➜ ~ sudo nano /etc/X11/xorg.conf.d/20-nvidia.conf
設定がびゃーっと出てくるので頑張ってDeviceセクションを探す。
Section "Device"
Identifier "Card0"
Driver "nvidia"
EndSection
おそらく最小限の情報しか書かれていないので青字部分を追記。
Section "Device"
Identifier "Card0"
Driver "nvidia"
Option "ConnectedMonitor" "DP-0"
Option "CustomEDID" "DP-0:/etc/X11/1920x1080.bin"
Option "IgnoreEDID" "false"
Option "UseEDID" "ture"
EndSection
DP-0の部分はそれぞれ設定したモニタの出力を入力する。
祈るような気持ちで再起動…
直った!Dellのモニタが美しい1920×1080に…!
正常だったもう一方のモニタが映らなくなる
代償としてさっきまで映っていたはずのBenQの方が映らなくなった(T_T)
困惑しつつxrandrしたところ、さっきまでHDMI-0で出力されていたBenQモニタが認識されていない。
➜ ~ xrandr
Screen 0: minimum 8 x 8, current 3840 x 1080, maximum 32767 x 32767
DP-0 connected 1920x1080+1920+0 (normal left inverted right x axis y axis) 500mm x 281mm
1920x1080 60.00*+
DP-1 disconnected (normal left inverted right x axis y axis)
HDMI-0 disconnected (normal left inverted right x axis y axis)
壊れていたほうが普通になって、普通だったほうが壊れるってどういうことなん泣
設定ファイルを軽い気持ちでいじってはいけない(教訓)
直ったばかりのDellモニタを使い、泣きながら解決方法を探す。
一週間くらいかけて探したものの、みんな上記の方法で直ったらしく参考になる記事が見つからない。
色々考えたけど20-nvidia.conf
の記述方法が間違っている気がしてきた。
Deviceセクションに Option(Option "ConnectedMonitor"
)を追加したらDP-0のモニタが直ったのだから、HDMI-0のほうについても同じOptionを追加すればいいのでは?というシンプルな解答をおもいつく。(伏線)
Deviceセクションに下記赤字部分を追加。(注.これは実行してはいけません。)
青字が前回入力した部分、赤字が今回追加した部分。
Section "Device"
Identifier "Card0"
Driver "nvidia"
Option "ConnectedMonitor" "DP-0"
Option "CustomEDID" "DP-0:/etc/X11/1920x1080.bin"
Option "IgnoreEDID" "false"
Option "UseEDID" "ture"
Option "ConnectedMonitor" "HDMI-0"
Option "CustomEDID" "HDMI-0:/etc/X11/1920x1080.bin"
Option "IgnoreEDID" "false"
Option "UseEDID" "ture"
EndSection
再起動する…
パソコンが起動しなくなった!
(T_T)
接続するモニタを単純に追記すればいいじゃん、という浅はかな考えによりパソコンがぶっ壊れた。
xorg.conf(20-nvidia.conf)
を素人がうかつにいじくり回すと自分のパソコンを破壊してしまうので皆さんも気をつけてください。
怒りのOS再インストール。

DP-0で出力しているDellモニタの解像度は当然のごとく860×480に戻ってしまっているので最初からやり直し。
20-nvidia.conf
のDeviceセクションにConnectedMonitor オプションを追加するところまで再度すすめた。現在のDeviceセクションはこんなかんじになっている。
Section "Device"
Identifier "Card0"
Driver "nvidia"
Option "ConnectedMonitor" "DP-0"
Option "CustomEDID" "DP-0:/etc/X11/1920x1080.bin"
Option "IgnoreEDID" "false"
Option "UseEDID" "ture"
EndSection
Linux Mintフォーラムに救われる。Xorgの文法を学ぶ
完全に行き詰まり半泣きになりながら調べていたところ、Mintのフォーラムで次のような記事を見つけた。
https://forums.linuxmint.com/viewtopic.php?t=360670)
やはり設定ファイルの書き方が間違っていたらしい。
正しい文法で20-nvidia.conf
を書き直す。緑字が今回追記した部分。(青字は前回までに追記したところ)
Section "ServerLayout"
Identifier "X.org Configured"
Screen 0 "Screen0" 0 0
InputDevice "Mouse0" "CorePointer"
InputDevice "Keyboard0" "CoreKeyboard"
EndSection
Section "Monitor"
Identifier "Monitor0"
VendorName "Monitor Vendor"
ModelName "Monitor Model"
EndSection
Section "Device"
Identifier "Card0"
Driver "nvidia"
Option "ConnectedMonitor" "DP-0"
Option "CustomEDID" "DP-0:/etc/X11/1920x1080.bin"
Option "IgnoreEDID" "false"
Option "UseEDID" "ture"
EndSection
Section "Screen"
Identifier "Screen0"
Device "Card0"
Monitor "Monitor0"
DefaultDepth 24
Option "ConnectedMonitor" "DP-0, HDMI-0"
Option "metamodes" "HDMI-0: nvidia-auto-select, DP-0: 1920x1080_60+0+0"
EndSection
Section "OutputClass"
Identifier "nvidia"
MatchDriver "nvidia-drm"
Driver "nvidia"
EndSection
DeviceセクションではなくScreenセクションにOptionを追加して2つの出力端子を指定すべきだったらしい。
ちなみに各SectionはIdentifierでそれぞれのセクションを相互に参照している。
なので、例えばScreenセクションのDevice
やMonitor
にはそれぞれDeviceセクションやMonitorセクションのidendifierで設定した名前を入力する必要がある。
やれることをすべてやり尽くし、勝負の再起動。
これでだめならLinuxやめてMac mini買う。
sudo reboot
直った!クララが立った!モニタも映った!

Dellのモニタは相変わらずThe Linux Foundation 23″となっているがとりあえず良しとする。
解像度を強制的に指定したせいで1920×1080しか選べないがもはやどうでもいい。

参考文献
*Nvidiaドライバをインストールする方法
https://qiita.com/porizou1/items/74d8264d6381ee2941bd
*xrandrで解像度を指定する方法
https://qiita.com/KaoruHosokawa00/items/1a39aebb58f3d8ac962e
*xrandr BadMatchについてのarch wiki
*xrandr EDID checksum is invalidに関するarch wikiの解説
https://wiki.archlinux.org/title/Xrandr#EDID_checksum_is_invalid
*xrandr BadMatchへの対応(EDID作成方法)
https://akenji3.github.io/post/20220914_xrandr_badmatch
*edid genenrator (github)
https://github.com/leeseungcheol/edid-generator
*edid generatorからのダウンロード方法(Method2の節を参照)
https://kodi.wiki/view/Archive:Creating_and_using_edid.bin_via_xorg.conf
*xorg.confを使用するなというnvidiaのフォーラム
*xorg.conf(20-nvidia.conf)の記載方法に関する解説(Linux Mintフォーラム)