ディスプレイ解像度を変更 〜 xrandr BadMatchへの対応

モチベーション

Ubuntuをインストールした直後、ディプレイの解像度が1368x768になっていた。 端末(Terminal)を複数開いて作業する際の画面が狭く不便であったこと、せっかく1920x1080が表示できるディスプレイ(JAPANNEXT JN-MD-IPS1562FHDR)に接続しているのでそのサイズで表示させたかった。

解像度を変更しようとしたが、少しハマったので、経緯をここにまとめる。

情報源

  1. Ubuntuディスプレイ解像度の変更|1920x1080  この情報を読むと、xrandrコマンドを使えば簡単に変更できるようで、数分の作業で終わると思い気楽に着手。
  2. 4.3 Permanently adding undetected resolutions  xorg.confを編集する際に参照にしたページ。
  3. External Monitor, can’t set desired resolution  ※このページで解決。 色々試して上手くいかず、ネットを更に調べて、やっと見つけた自分と同じ現象の記事。
  4. edid-generator  上記のページから参照されているGithubのページ。
  5. 19 xrandr BadMatch  xrandrでBadMatchとなる理由。
  6. 4.2.1 EDID checksum is invalid 上記に関連してEDIDについての記事。
  7. 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つを試したが、何も上手くいかなかった。

  1. /etc/default/grubにGRUB_GFXMODE=1920x1080を追加
  2. /etc/X11/xorg.confを編集
    1. 当初、/etc/X11/xorg.confが存在してなかったので、「NVIDIA X Server Settings」の「X Server Display Configuration」タブを開き、「Save to X Configuration File」ボタンを押して、xorg.confを生成した。
    2. 「情報源 2.」を参考にして、xorg.confに次のように修正/追加を行なった。
      1. MonitorセクションにModeline行に"1920x1080_60.00"を追加
      2. ScreenセクションのDisplayサブセクションにModesを追加
      3. 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のみとなっている。

解像度を下げて使うことはないと思うので、これで良しとする。


も参照してください