Ddcutil ile Monitör Ayarlarını Kontrol Etmek

ddcutil monitor ayarlarını düzenlemeye yardımcı olan bir Linux sistem uygulamasıdır. Dizüstü bir bilgisayarda ekran parlaklığını bir buton veya sistem arayüzünde bulunan bir arayüzle ayarlayabilirsiniz. Monitörlerde ise bu tarzda bir entegrasyon ne yazık ki pek yaygın değil. Bunun nedeni monitörlerin bu konuda beceriksiz olmalarından olduğunu zannetmiyorum büyük ihtimalle kimse gerçek anlamda üzerinden durmadığı içindir.

Ddcutil dökümanına göre 2000 sonrasında üretilen monitörler DDC/CI iletişim protokolüne sahipler. Bu protokol temel olarak monitörün sahip olduğu bütün özellikleri kontrol etmek üzerine seçeneklere sahip, parlaklık, renk değerleri, çözünürlük, gama, görüntü kaynağı gibi.

Benim bu arayüzden 2 temel beklentim bulunuyordu:

  • Parlaklığı değiştirmek
    • Buton ile
    • Günün saatine göre
  • Görüntü kaynağını aktif bilgisayara geçirmek

Bunları monitör arayüzünden yapabilsekte, monitör üzerinde bulunan joystick ile parlaklık değiştirmek için 3 menü değiştirmem, görüntü kaynağı içinse 2 menü değiştirmem gerekiyordu.

Gereklilikler

İlk önce ddcutil yüklü değilse yüklenmesi gerekiyor.

sudo apt install ddcutil

Protokol i2c denilen bir iletişim metodu kullanıyor. Linux üzerinde bu sistemi kullanmak için i2c-dev modülünün aktif olması gerekmektedir. Modülün sistem başlangıcında yüklenmesi için aşağıdaki dosyayı oluşturmamız yeterlidir.

i2c-dev
/etc/modules-load.d/i2c-dev.conf

Modülü cihazı yeniden başlatmaya ihtiyaç duymadan yüklemek için aşağıdaki komut kullanılabilir.

sudo modprobe i2c-dev

Test

Ddcutil'in çalıştığını doğrulamak ve monitorünü kontrol etmek için aşağıdaki komutu kullanmak yeterli:

sudo ddcutil detect

Bu komut sisteminize bağlı olan bütün monitörleri kontrol ederek uygun olup olmadıklarını ve bağlı bulunduğu sistem arayüzünü listeler. Benim sistemimde komutun sonucunda 2 monitör bulundu. Biri dizüstünün kendi monitörü, ddc desteklemiyor, biri de hairici monitör. Dizüstü monitörler ddc arayüzünü desteklemiyor onların sistem üzerinden kontrol edilmesi gerekli.

sudo ddcutil detect
Display 1
   I2C bus:             /dev/i2c-3
   EDID synopsis:
      Mfg id:           GSM
      Model:            LG HDR QHD
      Serial number:    007XXXXXXXX
      Manufacture year: 2020
      EDID version:     1.3
   VCP version:         2.1

Invalid display
   I2C bus:             /dev/i2c-13
    ...
   DDC communication failed
   This is an eDP laptop display. Laptop displays do not support DDC/CI.

Yetkilendirme

Ddcutil'i benim kullanma amacım biraz otomatizasyon, biraz da tembellik bu açıdan her kullanmak istediğimde sudo kullanmak veya yazdığım betiklerin sudo kullanması pek mantıklı değildi.

Bu açıdan i2c'nin sudo haricinde kullanılmasının tek yolu, i2c bağlantılarının bir gruba atanması ve bizim kullanıcımızın bu grup dahilinde olması denilebilir. Bunu gerçekleştirmek için öncelikle i2c bağlantılarının i2c grubuna atanması için bir ayar yapmak veya aktifleştirmek gerekicek. Benim sistemimde aşağıdaki dosya bulunuyordu fakat belirttiğim kod bloğu yorum halindeydi, ya yorum içinden çıkartmak ya da eklemek yeterli gelecektir.

KERNEL=="i2c-[0-9]*", GROUP="i2c", MODE="0660"
/etc/udev/rules.d/45-ddcutil-i2c.rules
Kodun meali ise `i2c-XXX` dizininde bulunan bütün bağlantıların `i2c` grubuna atanması ve bu grupta olan kullanıcıların `0660` okuma ve yazma hakkı olduğunu belirtiyor.

Bu tamamlandıktan sonra kullanıcımızı bu gruba dahil etmek ve sistemi yeniden başlatmak yeterli olacaktır.

sudo usermod $USER -aG i2c

Monitörü Kontrol Etmek

Monitörümüzü kontrol etmek için öncelikle ne yapabildiğini kontrol etmemiz gerekiyor.

ddcutil capabilites --bus=$BUS
...
Feature: 10 (Brightness)
...
Feature: 60 (Input Source)
      Values:
         00: Unrecognized value
         0f: DisplayPort-1
         11: HDMI-1
         12: HDMI-2
...

Komut sonucunda özellikler ve kimi zaman uygun seçenekleri geliyor. Özet aldığım şekilde Parlaklık ve giriş seçimi yapabiliyorum monitörümde.

Betikler

Monitörümü kontrol etmek için 2 temel betik hazırladım, biri parlaklığı değiştirmek için diğeri giriş seçmek için. Monitör ayarı değiştirmek için setvcp, sonrasında değiştirmek istediğimiz özellik adresi son olarak ise almasını istediğimiz değeri belirtmemiz yetiyor. Burada dikkat edilmesi gereken nokta sayıların 0x olarak belirtilmesi çünkü detect sonucunda listelenen adresler ve seçimler on altı tabanında.

#!/usr/bin/env bash

ddcutil --bus=3 setvcp 0x10 $1 &&
wait 
brightness_control
#!/usr/bin/env bash

ddcutil --bus=3 setvcp 0x60 0x11 &&
wait 
change_input