Fórum Ubuntu CZ/SK

Ostatní => Tipy a triky pro Linux => Téma založeno: ramael 10 Prosince 2022, 20:52:51

Název: Backlight a "nestandardní" pracovní prostředí
Přispěvatel: ramael 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
Název: Re:Backlight a "nestandardní" pracovní prostředí
Přispěvatel: ramael 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.
Název: Re:Backlight a "nestandardní" pracovní prostředí
Přispěvatel: declineshop678 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 (https://xtrench-run.com)