Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: Backlight a "nestandardní" pracovní prostředí  (Přečteno 5087 krát)

ramael

  • Stálý člen
  • **
  • Příspěvků: 634
Backlight a "nestandardní" pracovní prostředí
« kdy: 10 Prosince 2022, 20:52:51 »
Pokud má někdo "nestandardní" pracovní prostředí, třeba jako já používám i3-wm a nebo sway. Pak tu máme různý icewm a podobné, narazí nejspíše na plně podsvětlený monitor. Což není moc fajn na oči. Napsal jsem skript na ovládání backlightu. Pojmenoval jsem ho set_backlight a uložil do složky /usr/sbin/.
Kód: [Vybrat]
sudo -i
cd /usr/sbin/
> set_backlight
chmod +x set_backlight
exit
Místo exit používám klávesovou zkratku ctrl+d
Nyní je třeba si zjistit jak se nazývá "zařízení" které chceme ovládat:
Kód: [Vybrat]
ls /sys/class/backlight/
U mne je to amdgpu_bl0
To znamená, že se struktura zařízení nachází na adrese /sys/class/backlight/amdgpu_bl0
Zde je obsah skriptu /usr/sbin/set_backlight
Kód: [Vybrat]
#! /usr/bin/env bash

# Ukončovací funkce s chybovou hláškou.
konec (){
  echo "only numbers in range from 0 to $max_bright" >&2
  exit 1
}

# funkce na test a vymezení mezních hodnot
mezni (){
  [[ $aktual -ge $max_bright ]] && aktual=$max_bright
  [[ $aktual -le 0 ]] && aktual=0
}

# Adresa složky s hodnotama podsvětlení
# **********************************************
slozka=/sys/class/backlight/amdgpu_bl0
# **********************************************
# Soubor s podsvětlením
backlight_adr="$slozka/brightness"
# aktuální hodnota podsvětlení
bright=$(cat $backlight_adr)
# Maximální povolená hodnota podsvětlení
max_bright=$(cat $slozka/max_brightness)

# Načtení argumentu a vytvoření z něho proměnné $aktual
[ "$1" ] && { aktual=$1; } || aktual=$(xargs $1)

# pokud $aktual začíná znaménkem - nebo + a následují jen číslice, proveď matematickou operaci a korekci mezních hodnot
[[ $aktual =~ ^[-\+][0123456789]{1,4}$ ]] && aktual=$(($aktual+$bright)) && mezni

# Regulární výraz na test čísla minimálně jedno a maximálně tříciferné
# pokud se to nesplňuje ukončí se to chybovou hláškou
! [[ $aktual =~ ^[0123456789]{1,3}$ ]] && konec

# Do teď vše OK, tak zapiš ošetřenou hodnotu na své místo. Při problému to zabal
{ echo $aktual > $backlight_adr &2>/dev/null ; } || konec
Je tam řádek mezi ohvězdičkovanýma komentářema. Jeho hodnotu si změňte podle adresy svého zařízení.
Pak je nutné si přidat tento skript do sudoers aby se nemuselo zadávat heslo při každém použití
Kód: [Vybrat]
radek ALL=NOPASSWD: /usr/bin/set_backlight
Kde radek je uživatel který bude moci skript spouštět. V tomto případě já. Pokud si nejste jistí jaké máte uživatelské jméno, zjistíte to takto
Kód: [Vybrat]
echo $USER
Tři příklady použití skriptu:
Kód: [Vybrat]
sudo set_backlight 50
sudo set_backlight +50
sudo set_backlight -50
Kde první příklad nastaví podsvětlení na zadanou hodnotu. Druhý příklad navýší podsvětlení o zadanou hodnotu. A třetí sníží o zadanou hodnotu. Skript je ošetřen proti zadání blbostí. Samozřejmě je nejlepší si to navázat na nějaké klávesové zkratky.
Enjoy
Lenovo: ThinkPad X380 Yoga
Joutůůůůb

ramael

  • Stálý člen
  • **
  • Příspěvků: 634
Re:Backlight a "nestandardní" pracovní prostředí
« Odpověď #1 kdy: 05 Února 2023, 07:35:09 »
Mno, pořídil jsem si novou hračku a zjistil, že je třeba ten script více vymazlit a napsat ho univerzálněji.
Takže pokud používáte jen jeden monitor zde je univerzální řešení:
Kód: [Vybrat]
#! /usr/bin/env bash

# Ukončovací funkce s chybovou hláškou.
konec (){
  echo "only numbers in range from 0 to $max_bright" >&2
  exit 1
}

# funkce na test a vymezení mezních hodnot
mezni (){
  [[ $aktual -ge $max_bright ]] && aktual=$max_bright
  [[ $aktual -le 0 ]] && aktual=0
  return 0
}

# ****************************************
# Adresa složky s hodnotama podsvětlení
slozka=/sys/class/backlight/*
# ****************************************

# Soubor s podsvětlením
backlight_adr="$slozka/brightness"
# aktuální hodnota podsvětlení
bright=$(<$backlight_adr)
# Maximální povolená hodnota podsvětlení
max_bright=$(<$slozka/max_brightness)
max_size=${#max_bright}

# Načtení argumentu a vytvoření z něho proměnné $aktual
[ "$1" ] && { aktual=$1; } || aktual=$(xargs $1)

# pokud $aktual začíná znaménkem - nebo + a následují jen číslice, proveď matematickou operaci a korekci mezních hodnot
[[ $aktual =~ ^[-\+][0123456789]{1,$(($max_size+1))}$ ]] && aktual=$(($aktual+$bright)) && mezni

# Regulární výraz na test čísla minimálně jedno a maximálně tříciferné
# pokud se to nesplňuje ukončí se to chybovou hláškou
[[ $aktual =~ ^[0123456789]{1,$max_size}$ ]] && mezni || konec

# Do teď vše OK, tak zapiš ošetřenou hodnotu na své místo
{ echo $aktual > $backlight_adr &2>/dev/null ; } || konec
Pokud používáte více monitorů, je třeba specifikovat tu správnou složku mezi zakomentovanýma hvězdičkama.
Lenovo: ThinkPad X380 Yoga
Joutůůůůb

declineshop678

  • Návštěvník
  • Příspěvků: 2
Re:Backlight a "nestandardní" pracovní prostředí
« Odpověď #2 kdy: 20 Února 2023, 04:55:26 »
Pokud používáte několik monitorů, musíte mezi hvězdičkami komentářů uvést správnou složku.

x trench run

 

Provoz zaštiťuje spolek OpenAlt.