モチベーション
Ubuntuをインストールした直後、ディプレイの解像度が1368x768になっていた。 端末(Terminal)を複数開いて作業する際の画面が狭く不便であったこと、せっかく1920x1080が表示できるディスプレイ(JAPANNEXT JN-MD-IPS1562FHDR)に接続しているのでそのサイズで表示させたかった。
解像度を変更しようとしたが、少しハマったので、経緯をここにまとめる。
情報源
- Ubuntuディスプレイ解像度の変更|1920x1080 この情報を読むと、xrandrコマンドを使えば簡単に変更できるようで、数分の作業で終わると思い気楽に着手。
- 4.3 Permanently adding undetected resolutions xorg.confを編集する際に参照にしたページ。
- External Monitor, can’t set desired resolution ※このページで解決。 色々試して上手くいかず、ネットを更に調べて、やっと見つけた自分と同じ現象の記事。
- edid-generator 上記のページから参照されているGithubのページ。
- 19 xrandr BadMatch xrandrでBadMatchとなる理由。
- 4.2.1 EDID checksum is invalid 上記に関連してEDIDについての記事。
- Archive:Creating and using edid.bin via xorg.conf xorg.confからedid.binを使う記述。
設定
普通の方法
ディスプレの解像度を変更するには、「設定」→ 「ディプレイ」で解像度を指定するが、自分の環境では、このリストに1920x1080の項目が無い!
「情報源 1.」この記事に書かれている内容は、解像度のリスト中に1920x1080を追加する方法と理解した。
記事にしたがって設定していく。
$ 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 "1920x1080_60.00" 173.00 1920 2048 2248 2576 1080 1083 1088 1120 -hsync +vsync
$ xrandr
Screen 0: minimum 8 x 8, current 1368 x 768, maximum 16384 x 16384
DVI-I-0 connected primary 1368x768+0+0 (normal left inverted right x axis y axis) 0mm x 0mm
1024x768 60.00 +
1600x900 59.82
1400x900 59.88
1368x768 59.88 59.85*
1360x768 59.96 59.80
1280x800 59.91 59.81
1280x720 59.86 59.74
1152x864 60.00
1024x576 59.90 59.82
960x540 59.82 59.63
864x486 59.92 59.57
800x600 72.19 60.32 56.25
800x450 59.82
700x450 59.88
684x384 59.88 59.85
680x384 59.96 59.80
640x480 59.94
640x400 59.98 59.88
640x360 59.86 59.83
512x384 60.00
512x288 60.00 59.92
480x270 59.82 59.63
432x243 59.92 59.57
400x300 72.19
320x240 60.05
DVI-I-1 disconnected (normal left inverted right x axis y axis)
DP-0 disconnected (normal left inverted right x axis y axis)
DP-1 disconnected (normal left inverted right x axis y axis)
1920x1080_60.00 (0x26f) 173.000MHz -HSync +VSync
h: width 1920 start 2048 end 2248 total 2576 skew 0 clock 67.16KHz
v: height 1080 start 1083 end 1088 total 1120 clock 59.96Hz
このまま、後2つのコマンドで準備完了と思っていたが、次の操作でエラーとなった。
$ xrandr --addmode DVI-I-0 1920x1080_60.00
X Error of failed request: BadMatch (invalid parameter attributes)
Major opcode of failed request: 140 (RANDR)
Minor opcode of failed request: 18 (RRAddOutputMode)
Serial number of failed request: 35
Current serial number in output stream: 36
試行錯誤
ここで、ネット検索して、次の2つを試したが、何も上手くいかなかった。
- /etc/default/grubにGRUB_GFXMODE=1920x1080を追加
- /etc/X11/xorg.confを編集
- 当初、/etc/X11/xorg.confが存在してなかったので、「NVIDIA X Server Settings」の「X Server Display Configuration」タブを開き、「Save to X Configuration File」ボタンを押して、xorg.confを生成した。
- 「情報源 2.」を参考にして、xorg.confに次のように修正/追加を行なった。
- MonitorセクションにModeline行に"1920x1080_60.00"を追加
- ScreenセクションのDisplayサブセクションにModesを追加
- DiviceセクションにOptionでUseEDID falseを追加
更に、ネットを検索して、「情報源 3.」を見つけた。
xrandr BadMatchへの対応
この記事(情報源 .3)の現象は、自分の環境で起こっていることと同じようだったので、期待をして読み進め、自分の環境にも適用した。
EDIDについて
今回の解決法は、EDIDを自分で作成して、作成したバイナリを使う、というやり方。何故そのようなことが必要かということが、「情報源 5.」および「情報源 6.」に説明してある。 自分としては、NVIDIAドライバがモニタ(ディスプレイ)のEDIDを正しく認識しないので、強制的に設定するものと理解した。
Githubからソース類をダウンロード
「情報源 .4」のgithubからダウンロード。自分はZIPファイルをダウンロードしてローカル環境に解凍した。
必要なパッケージをインストール
githubのREADME.mdに記載してあるとおりzsh, edid-decode, automake, dos2unixパッケージ、および今回のワークステーションには、makeなどの開発系のパッケージが無かったので、インストールした。
$ sudo apt install zsh edid-decode automake dos2unix
$ sudo apt install build-essential
実施手順
$ ./modeline2edid /etc/X11/xorg.conf
Searching for modelines in '/etc/X11/xorg.conf'
$ make
自分のxorg.conf中にmodelineが無いので、新規に.sは作成されなかった。
上記で、1920x1080.binが作成されたが、これをどうやって組み込むのか、githubに記述が無かった。常識なのだろうか!でも自分は知らなかったので、ネットを調べて、「情報源 7.」を見つけた。
edid.binをxorg.confに組み込む
先ず、実施手順で作成された「1920x1080.bin」を/etc/X11にコピー。
次に、「情報源 7.」を参考に、/etc/X11/xorg.confを編集。
自分が編集したxorg.confと「試行錯誤」2.-1.(NVIDIA X Server Settings)で作成したものとの差は次の通りで、Deviceセクションに4行追加しただけ。
54,57d53
< Option "ConnectedMonitor" "DVI-I-0"
< Option "CustomEDID" "DVI-I-0:/etc/X11/1920x1080.bin"
< Option "IgnoreEDID" "false"
< Option "UseEDID" "ture"
ここで、ログオフ/ログインすると、いきなり1920x1080と広いデスクトップとなった。
まとめ
ここまでの対応後、ディスプレの解像度を変更するため、「設定」→ 「ディプレイ」で解像度を見ると、リストには1920x1080のみとなっている。
解像度を下げて使うことはないと思うので、これで良しとする。