Regulácia jasu monitoru z Linuxu.

06.07.2022 | 20:16 | zaphod | zaphod

Regulácia jasu na mojom monitore je nepohodlná, preto som napísal script na zmenu jasu priamo z Linuxu. Prostredie: xfce4, Manjaro.

Potrebný software.

ddcutil,yad,notify-send.

awk,tr,bash sú obvykle súčasťou distribúcie Linuxu.

ddcutil

Komunikuje pomocou i2c zbernice s monitorom pripojeným cez vga, hdmi, displayport alebo usb.

i2c

Treba mať aktívny modul i2c-dev:

$ i2cdetect -l
i2c-0	i2c       	AMDGPU DM i2c hw bus 0          	I2C adapter
i2c-1	i2c       	AMDGPU DM i2c hw bus 1          	I2C adapter
i2c-2	i2c       	AMDGPU DM i2c hw bus 2          	I2C adapter
i2c-3	i2c       	AMDGPU DM aux hw bus 2          	I2C adapter

Ak nič nevypíše treba natiahnuť modul:

sudo modprobe i2c-dev

Pre natiahnutie modulu pri štarte systému vytvoriť súbor /etc/modules-load.d/i2c-dev.conf

i2c-dev

Súbory pre komunikáciu:

$ ls -l /dev/i2c-*
crw-rw---- 1 root i2c 89, 0 júl  6 11:50 /dev/i2c-0
crw-rw---- 1 root i2c 89, 1 júl  6 11:50 /dev/i2c-1
crw-rw---- 1 root i2c 89, 2 júl  6 11:50 /dev/i2c-2
crw-rw---- 1 root i2c 89, 3 júl  6 11:50 /dev/i2c-3

Skupina i2c má právo čítania/zápisu pridám sa do nej, inak by som musel používať sudo:

sudo usermod $USER -aG i2c

Po odhlásení/prihlásení som už v skupine i2c:

$ id -nG
gotrek sys log network power vboxusers i2c sambashare lp wheel autologin

Práca s ddcutil.

Detekcia monitoru:

$ ddcutil detect
Display 1
   I2C bus:  /dev/i2c-0
   EDID synopsis:
      Mfg id:               PHL
      Model:                PHL 243V7
      Product code:         49493
      Serial number:        UK01932009368
      Binary serial number: 9368 (0x00002498)
      Manufacture year:     2019,  Week: 32
   VCP version:         2.2

Zistenie jasu:

$ ddcutil getvcp 10
VCP code 0x10 (Brightness                    ): current value =    40, max value =   100

Pre nastavenie je príkaz setvcp.

Pre zistenie čo všetko sa dá na monitore ovládať:

ddcutil capabilities

ddcutil má veľmi dobrú dokumentáciu

Bash script:

#!/usr/bin/env bash
# Nastav jas

icon=cs-desktop

jas=$(ddcutil getvcp 10|awk '{ print $9 }'| tr -d ',')

yad --mouse \
   --undecorated \
   --title "Jas" \
   --image="$icon" \
   --window-icon="$icon" \
   --text="Zvol jas obrazovky, teraz=$jas%" \
   --button="20%":2 \
   --button="40%":3 \
   --button="60%":4 \
   --button="80%":5 \
   --button="100%":6
ret=$?

case $ret in
2) adj=20
   ;;
3) adj=40
   ;;
4) adj=60
   ;;
5) adj=80
   ;;
6) adj=100
   ;;
*) adj=$jas
  ;;
esac

if test $jas != $adj; then
   ddcutil setvcp 10 $adj 
fi
notify-send "Display" "Jas obrazovky $adj%" --icon=dialog-information -t 10000

Script mám v /home/gotrek/bin/nastavj. Ukončiť sa dá Esc, zdalo sa mi zbytočné nechať tlačidlá ok/cancel.

Na desktope som vytvoril spúšťač, vybral ikonu:

spustac

Textový výpis:

$ cat Plocha/Jas.desktop 
[Desktop Entry]
Version=1.0
Type=Application
Name=Jas
Comment=Jas obrazovky
Exec=/home/gotrek/bin/nastavj
Icon=cs-desktop
Path=
Terminal=false
StartupNotify=false

Ikonu cs-desktop som pridal do scriptu.

Výsledok - kliknem na ikonu na desktope:

ikony

Klik na tlačítko a je hotovo.

yad

Notifikácia:

notifikacia

Občas požívam klávesové skratky:

shortcut

Záver.

Ak je viac monitorov dajú sa adresovať pomocou viacerých parametrov - popísané v ddcutil --help.

Používam asi pol roka, práca na scripte sa vyplatila. Nemusím používať neergonomické ovládanie na monitore. Dve kliknutia myšou a je nastavené.

Každá zmena sa zapisuje do flash pamäte s obmedzenou životnosťou, treba na to pamätať.

Prílohy

    • RE: Regulácia jasu monitoru z Linuxu. 06.07.2022 | 23:22
      Avatar Pavel Q4OS, DistroWatch  Administrátor

      Super blog, len viac takýchto návodov :-)

    • RE: Regulácia jasu monitoru z Linuxu. 07.07.2022 | 07:15
      Avatar Livan Manjaro s XFCE, Q4OS s KDE  Používateľ

      Fajn návod len skoky jasu po 20% ti vyhovujú? Nie sú tie skoky veľmi hrubé? Ja by som volil skoky po 5 % pre jemnejšie nastavovanie.

      • RE: Regulácia jasu monitoru z Linuxu. 07.07.2022 | 10:18
        Avatar zaphod Manjaro, MX Linux  Používateľ

        Išlo mi o to, aby ma v tme monitor neoslňoval a na slnku aby som niečo videl. Takže by mi stačili tlačítka "tma" "polojasno" "slnko". Podrobné nastavenie je projekte ddcui. Pre mňa zbytočne zložité.

        Skript je jednoduchý, ľahko sa upraví. Pre viac hodnôt ba som zvolil yad ComboBox - viď príklady yad.

        • RE: Regulácia jasu monitoru z Linuxu. 07.07.2022 | 10:48
          Avatar Livan Manjaro s XFCE, Q4OS s KDE  Používateľ

          Podľa toho popisu to vyzerá, že sa jedná o notebook. V tom prípade na mojom Delle stačia klávesové kombinácie Fn + F7 pre uberanie jasu a Fn + F8 pre pridávanie. Tie F7 a F8 ber s rezervou, nemám teraz ten ntb pri sebe a presne sa nepamatám, či je to kombinácia F7 a F8 alebo F8 a F9.

          • RE: Regulácia jasu monitoru z Linuxu. 08.07.2022 | 09:14
            Avatar zaphod Manjaro, MX Linux  Používateľ

            Mám AMD APU Athlon 200GE, desktop a 24" monitor Philips pripojený cez HDMI. Notebooky majú svoje riadenie jasu, ddcutil (podľa zdrojov z inernetu) nevie regulovať jas notebookových displejov.

    • RE: Regulácia jasu monitoru z Linuxu. 07.07.2022 | 08:30
      Avatar Richard Antix  Používateľ

      <joke>


      Jas treba mať stále na 100%. Prečo?


      Aby človek vyzeral superhusto, ako nejaký hEk3r vo filme. Tam je jas tak vysoký, že sa na tvári HeK3rA premieta obraz/písmená.


      </joke>

      • RE: Regulácia jasu monitoru z Linuxu. 07.07.2022 | 11:33
        Avatar Miroslav Bendík Gentoo  Administrátor

        No oni hekeri vo filmoch sú takí "experti", že nevedia akým smerom majú pozerať na projektor ;)

    • RE: Regulácia jasu monitoru z Linuxu. 07.07.2022 | 11:32
      Avatar Miroslav Bendík Gentoo  Administrátor

      Tu by som len doplnil, že niektoré monitory to majú implementované ako okamžitý zápis do EEPROM. V tom prípade ak by niekoho napadlo urobiť si automatické nastavenie jasu môže dôjsť po krátkom čase zničeniu EEPROM v monitore. Inak ddcutil používam aj ja na občasné nastavenie jasu. V mojom prípade funguje v 50% prípadov. Presne 50%. Presne každý druhý pokus o zmenu skončí I/O chybou, takže mi GPU zrejme posiela nejaký pozostatok z buffera navyše.

      • RE: Regulácia jasu monitoru z Linuxu. 08.07.2022 | 09:23
        Avatar zaphod Manjaro, MX Linux  Používateľ

        Mám amd apu, opensource drivery (okrem opencl-amd) a ddcutil funguje spoľahlivo. Ani ma nenapadlo že by mohol byť nejaký problém.

    • RE: Regulácia jasu monitoru z Linuxu. 08.07.2022 | 08:00
      Avatar bluesundown   Používateľ

      odhliadnuc ze blog je pisane pre XFCE, tak na GNOME je pre DDCutil extension

      funguje mi obcasne :)

    • RE: Regulácia jasu monitoru z Linuxu. 15.07.2022 | 06:56
      Avatar dusanp   Používateľ

      Toto som presne potreboval. Škoda že som si nekúpil monitor s automatickou reguláciou jasu podľa okolitého osvetlenia.

      Dík, idem to skúšať.

      • RE: Regulácia jasu monitoru z Linuxu. 16.07.2022 | 08:19
        Avatar dusanp   Používateľ

        Tak otestoval som. Mám Mag8. Skompiloval som 1.3dev. Pod rootom to ide dobre.

        viď.

        ddcutil capabilities Model: IIYAMA MCCS version: 2.2

        Príkaz funguje vždy. Použil som tvoj bash skript.

        Bohužiaľ ani pri použití návodu

        https://lexruee.ch/setting-i2c-permissions-for-non-root-users.html

        my prístup k dev i2c nejde.

        viď.

        i2cdetect -y 1 Error: Could not open file `/dev/i2c-1': Permission denied

        A potom som si myslel že si to nejak prepojím s detektorom osvetlenia. (to by sa muselo nejako vymyslieť)

        Potom som si ale všimol o obmedzení zápisu do eepromu a to ma dosť schladilo.

        • RE: Regulácia jasu monitoru z Linuxu. 16.07.2022 | 16:18
          Avatar zaphod Manjaro, MX Linux  Používateľ

          Automatická regulácia jasu nie je dobrý nápad. Môže to rýchlo odpísať monitor.

          Permission denied - zadaj príkazy

          ls -l /dev/i2c-*
          groups
          id -nG

          a daj to sem. Ťažko bez výpisu zistiť kde je chyba.

          • RE: Regulácia jasu monitoru z Linuxu. 16.07.2022 | 20:59
            Avatar dusanp   Používateľ

            [dusan@localhost ~]$ ls -l /dev/i2c-*

            crw------- 1 root root 89, 0 júl 15 21:57 /dev/i2c-0

            crw------- 1 root i2c 89, 1 júl 15 21:57 /dev/i2c-1

            crw------- 1 root root 89, 10 júl 15 21:57 /dev/i2c-10

            crw------- 1 root root 89, 2 júl 15 21:57 /dev/i2c-2

            crw------- 1 root root 89, 3 júl 15 21:57 /dev/i2c-3

            crw------- 1 root root 89, 4 júl 15 21:57 /dev/i2c-4

            crw------- 1 root root 89, 5 júl 15 21:57 /dev/i2c-5

            crw------- 1 root root 89, 6 júl 15 21:57 /dev/i2c-6

            crw------- 1 root root 89, 7 júl 15 21:57 /dev/i2c-7

            crw------- 1 root root 89, 8 júl 15 21:57 /dev/i2c-8

            crw------- 1 root root 89, 9 júl 15 21:57 /dev/i2c-9

            [dusan@localhost ~]$ groups

            dusan i2c

            [dusan@localhost ~]$ id -nG

            dusan i2c

             

          • RE: Regulácia jasu monitoru z Linuxu. 23.07.2022 | 09:51
            Avatar redhawk1975 Windows 11 nonsystemd edition  Používateľ

            zaujimave, na notebooku i2c nemam

            $ ls -l /dev/i2c*
            ls: nie je možné pristupovať k '/dev/i2c*': Adresár alebo súbor neexistuje

             

            Do or do not. There is to no try.​
            • RE: Regulácia jasu monitoru z Linuxu. 23.07.2022 | 09:57
              Avatar redhawk1975 Windows 11 nonsystemd edition  Používateľ

              predtym nez sa do mna niekto pusti mam i2c tools aj ddcutil nainstalovany.

               

              Do or do not. There is to no try.​
            • RE: Regulácia jasu monitoru z Linuxu. 23.07.2022 | 10:52
              Avatar Miroslav Bendík Gentoo  Administrátor

              Sú zavedené príslušné moduly? Ja mám na svojom notebooku toto:

              i2c-0	i2c       	AMDGPU DM i2c hw bus 0          	I2C adapter
              i2c-1	i2c       	AMDGPU DM i2c hw bus 1          	I2C adapter
              i2c-2	i2c       	AMDGPU DM i2c hw bus 2          	I2C adapter
              i2c-3	i2c       	AMDGPU DM i2c hw bus 3          	I2C adapter
              i2c-4	i2c       	AMDGPU DM aux hw bus 0          	I2C adapter
              i2c-5	i2c       	AMDGPU DM aux hw bus 2          	I2C adapter
              i2c-6	i2c       	AMDGPU DM aux hw bus 3          	I2C adapter
              i2c-7	smbus     	SMBus PIIX4 adapter port 0 at 0b00	SMBus adapter
              i2c-8	smbus     	SMBus PIIX4 adapter port 2 at 0b00	SMBus adapter
              i2c-9	smbus     	SMBus PIIX4 adapter port 1 at 0b20	SMBus adapter
              i2c-10	i2c       	Synopsys DesignWare I2C adapter 	I2C adapter
              i2c-11	i2c       	Synopsys DesignWare I2C adapter 	I2C adapter
              • RE: Regulácia jasu monitoru z Linuxu. 24.07.2022 | 16:59
                Avatar redhawk1975 Windows 11 nonsystemd edition  Používateľ

                ano su.

                dokonca nedeguje ani monitor na HDMI ani na VGA vstupe. ale to bude asi notebookom, lebo som zistil ze na HP to ide.

                tu ide  iGPU Intel

                Do or do not. There is to no try.​
    • RE: Regulácia jasu monitoru z Linuxu. 15.07.2022 | 10:31
      Avatar dusanp   Používateľ

      Dokonca majú aj v QT napísané grafické rozhranie.

      https://www.ddcutil.com/ddcui_main/

      No otestujem to.