20 November 2022

Full HDモニター IO DATA製 EX-LDGC241SDB 購入。Ubuntu Linuxよりddcutilでコントロール

現在利用中のモニターLCD-MF221XBRが購入後13年経過し、そろそろ劣化故障すると困るので買い替えた。

■ 現在利用中の機種
IO DATA 製 LCD-MF221XBR
TFT(TN ?) 21.5 inch 液晶 , 1920 x 1080 , 60 Hz Max
5 ms (GTG)
バックライト 冷陰極管(CCFL), 通常消費電力 33.5 W
HDMI * 1 , RGB * 1 , DVI-D * 1 , Audio in/out
17,380円 2009/08/14購入 @ Amazon

■ 今回購入した機種
IO DATA 製 EX-LDGC241SDB
TFT(ADS) 23.8 inch 液晶 , 1920 x 1080 , 75 Hz Max
5 ms (GTG) , 2 ms (GTG) @ Overdrive Level 3
バックライト LED (フリッカーレス調光), 通常消費電力 13.5 W
HDMI * 2 , Display Port * 1 , RGB , Audio in/out
18,800円 2022/11/18購入 @ Amazon

20221120-ldgc241sdb-pack.jpg

LEDバックライトになり消費電力が半減し、Display Port接続もできるようになったのが違いかな...

今回のPCモニターの選定条件のひとつは、背面のVESAマウントに超小型PCが取り付けられるかどうか。(スタンドを取り外さずに取り付けられるか)

IO-DATA製以外のモニターは、スタンドを取り外さないとVESAマウントが使えないものが多いので、おのずから選択肢となる製品は少ない。

20221120-vesa-pc-mount.jpg
VESAマウントに超小型PCを取り付けた状況

モニター 交換前後の設置状況

20221120-mf221xbr-desk.jpg
交換前 : LCD-MF221XBR

20221120-ldgc241sdb-desk.jpg
交換後 : EX-LDGC241SDB

新しいモニターは、少し大きく感じる程度で違和感はない。

20221120-tv-monitor.jpg
32inch TVと、新旧のモニターを並べてみた (左より 32inch , 23.8 inch , 21.5 inch)

Ubuntu 22.04よりddcutilコマンドを使いDDC/CIで制御

ddcutilの公式ヘルプは https://www.ddcutil.com/ に書かれている

■ 接続状態の調査

交換前 : LCD-MF221XBR
$ sudo ddcutil detect
Display 1
   I2C bus:  /dev/i2c-2
   EDID synopsis:
      Mfg id:               IOD
      Model:                LCD-MF221X
      Product code:         5638
      Serial number:        G1T60030217Z
      Binary serial number: 16843009 (0x01010101)
      Manufacture year:     2009,  Week: 20
   VCP version:         2.1
交換後 : EX-LDGC241SDB
$ sudo ddcutil detect
Display 1
   I2C bus:  /dev/i2c-2
   EDID synopsis:
      Mfg id:               IOD
      Model:                EX-LDGC241SD
      Product code:         17339
      Serial number:        142Z002130OM
      Binary serial number: 2130 (0x00000852)
      Manufacture year:     2022,  Week: 7
   VCP version:         2.1

■ すべてのDDC/CIで取得・設定できる値を表示

sudo ddcutil probe ですべてのfeature-code(0x00 〜 0xff)を総当りで表示することもできるが、当該デバイスがサポートしている feature-code のみを表示するなら sudo ddcutil getvcp all のほうが簡潔に表示できる。 値を表示せずに、どの feature-code がサポートされているかだけなら sudo ddcutil capabilities を実行すれば良い。

交換前 : LCD-MF221XBR
$ sudo ddcutil getvcp all
VCP code 0x02 (New control value             ): One or more new control values have been saved (0x02)
VCP code 0x0e (Clock                         ): current value =     0, max value =   100
VCP code 0x10 (Brightness                    ): current value =     1, max value =    50
VCP code 0x12 (Contrast                      ): current value =    95, max value =   200
VCP code 0x14 (Select color preset           ): 6500 K (sl=0x05)
VCP code 0x16 (Video gain: Red               ): current value =   100, max value =   100
VCP code 0x18 (Video gain: Green             ): current value =   100, max value =   100
VCP code 0x1a (Video gain: Blue              ): current value =   100, max value =   100
VCP code 0x1e (Auto setup                    ): Auto setup not active (sl=0x00)
VCP code 0x20 (Horizontal Position (Phase)   ): current value =     0, max value =   100
VCP code 0x30 (Vertical Position (Phase)     ): current value =     0, max value =   100
VCP code 0x3e (Clock phase                   ): current value =     0, max value =   100
VCP code 0x52 (Active control                ): Value: 0x02
VCP code 0x60 (Input Source                  ): DVI-2 (sl=0x04)
VCP code 0x62 (Audio speaker volume          ): current value =    24, max value =    30
VCP code 0xac (Horizontal frequency          ): 6750 hz
VCP code 0xae (Vertical frequency            ): 60.00 hz
VCP code 0xb6 (Display technology type       ): LCD (active matrix) (sl=0x03)
VCP code 0xc8 (Display controller type       ): Mfg: Novatek (sl=0x12), controller number: mh=0xff, ml=0xff, sh=0x00
VCP code 0xca (OSD                           ): OSD Enabled (sl=0x02)
VCP code 0xcc (OSD Language                  ): Japanese (sl=0x06)
VCP code 0xdf (VCP Version                   ): 2.1
交換後 : EX-LDGC241SDB
$ sudo ddcutil getvcp all
VCP code 0x02 (New control value             ): One or more new control values have been saved (0x02)
VCP code 0x10 (Brightness                    ): current value =     4, max value =   100
VCP code 0x12 (Contrast                      ): current value =    50, max value =   100
VCP code 0x14 (Select color preset           ): 6500 K (sl=0x05)
VCP code 0x16 (Video gain: Red               ): current value =    96, max value =   100
VCP code 0x18 (Video gain: Green             ): current value =    88, max value =   100
VCP code 0x1a (Video gain: Blue              ): current value =    84, max value =   100
VCP code 0x52 (Active control                ): Value: 0x10
VCP code 0x60 (Input Source                  ): HDMI-1 (sl=0x11)
VCP code 0x62 (Audio speaker volume          ): current value =    20, max value =    30
VCP code 0xac (Horizontal frequency          ): 8370 hz
VCP code 0xae (Vertical frequency            ): 74.80 hz
VCP code 0xb6 (Display technology type       ): LCD (active matrix) (sl=0x03)
VCP code 0xcc (OSD Language                  ): Japanese (sl=0x06)
VCP code 0xdf (VCP Version                   ): 2.1

■ 輝度(Brightness)の読み出しと設定

交換前 : LCD-MF221XBR
$ sudo ddcutil getvcp 10
VCP code 0x10 (Brightness                    ): current value =     1, max value =    50

$ sudo ddcutil setvcp 10 2

$
交換後 : EX-LDGC241SDB
$ sudo ddcutil getvcp 10
VCP code 0x10 (Brightness                    ): current value =     4, max value =   100

$ sudo ddcutil setvcp 10 4
Setting value failed for feature 10, rc=DDCRC_RETRIES(-3007): maximum retries exceeded
    Try errors: DDCRC_RETRIES

交換後はエラーが表示されるので原因をトレースすると、DDC control 0x00 (Degauss)の読み出しに失敗して1つ目のエラー。0xdf (VCP VErsion)の読み出しは成功。そして 0x10 (Brightness)の設定も成功。その後 0x10 (Brightness)の値を読み出そうとして「maximum retries exceeded」エラー。というような結果に。

$ sudo ddcutil setvcp 10 4 --trace ddc
(main                          ) Starting ddcutil execution, Sun Nov 20 19:28:31 2022
(ddc_get_vcp_value             ) Starting  Reading feature 0x00, dh=Display_Handle[i2c: fd=3, busno=2 @0x555913264020], dh->fd=3
(ddc_get_nontable_vcp_value    ) Starting  dh=Display_Handle[i2c: fd=3, busno=2 @0x555913264020], Reading feature 0x00
(ddc_get_nontable_vcp_value    ) Done      Error reading feature x00.  Returning exception: Error_Info[DDCRC_REPORTED_UNSUPPORTED in ddc_get_nontable_vcp_value]
(ddc_get_vcp_value             ) Done      ddc_excp = Error_Info[DDCRC_REPORTED_UNSUPPORTED in ddc_get_nontable_vcp_value]
(ddc_get_vcp_value             ) Starting  Reading feature 0xdf, dh=Display_Handle[i2c: fd=3, busno=2 @0x555913264020], dh->fd=3
(ddc_get_nontable_vcp_value    ) Starting  dh=Display_Handle[i2c: fd=3, busno=2 @0x555913264020], Reading feature 0xdf
(ddc_get_nontable_vcp_value    ) Done      Success reading feature xdf. *ppinterpreted_code=0x55591326ff20
(ddc_get_nontable_vcp_value    )           mh=0x00, ml=0x00, sh=0x02, sl=0x01, max value=0, cur value=513
(ddc_get_vcp_value             ) Done      Returning: NULL, *valrec ->
      Single_Vcp_Value at 0x55591326a2b0:
         Opcode:          0xdf
         Value type:      DDCA_NON_TABLE_VCP_VALUE (0x01)
         max_val:     0 - 0x0000
         cur_val:     513 - 0x0201
         mh:          0x00
         ml:          0x00
         sh:          0x02
         sl:          0x01
(ddc_set_nontable_vcp_value    ) Starting  Writing feature 0x10 , new value = 4, dh=Display_Handle[i2c: fd=3, busno=2 @0x555913266820]
(ddc_set_nontable_vcp_value    ) Done      Returning NULL
(ddc_get_vcp_value             ) Starting  Reading feature 0x10, dh=Display_Handle[i2c: fd=3, busno=2 @0x555913266820], dh->fd=3
(ddc_get_nontable_vcp_value    ) Starting  dh=Display_Handle[i2c: fd=3, busno=2 @0x555913266820], Reading feature 0x10
(ddc_get_nontable_vcp_value    )           ddc_write_read_with_retry() returned DDCRC_RETRIES(-3007): maximum retries exceeded, reponse_packet_ptr=(nil)
(ddc_get_nontable_vcp_value    ) Done      Error reading feature x10.  Returning exception: Error_Info[DDCRC_RETRIES in ddc_write_read_with_retry, causes: DDCRC_DDC_DATA(10)]
(ddc_get_vcp_value             ) Done      ddc_excp = Error_Info[DDCRC_RETRIES in ddc_write_read_with_retry, causes: DDCRC_DDC_DATA(10)]
Setting value failed for feature 10, rc=DDCRC_RETRIES(-3007): maximum retries exceeded
    Try errors: DDCRC_RETRIES
(main                          ) ddcutil execution complete, Sun Nov 20 19:28:32 2022

つまり、Brightness(feature-code 0x10)の設定(setvcp)後に、値を再度読み出す(getvcp)ベリファイ操作をしなければよいだけなので、次のように--noverifyスイッチを付けとけば良い。

$ sudo ddcutil setvcp 10 5 --noverify

■ 特定のfeature-codeが何なのか調べる

たとえば、feature-code = 0x10 を調べる場合は

$ sudo ddcutil vcpinfo 10
VCP code 10: Brightness
   Increase/decrease the brightness of the image.
   MCCS versions: 2.0, 2.1, 3.0, 2.2
   ddcutil feature subsets: PROFILE, COLOR
   Attributes: Read Write, Continuous (normal)

COLORサブセット内のすべてのfeature-codeについて表示したい場合は...

$ sudo ddcutil vcpinfo COLOR