Aż oczy bolą, czyli kontrola jasności monitora na desktopie

Gdy pracuje się cały dzień przy komputerze, warto zadbać o komfort – a jedną z rzeczy najbardziej ów komfort psującą, jest ból oczu powodowany zbyt dużym natężeniem światła. Póki nie wejdą na rynek duże, kolorowe monitory e-inkowe bez opóźnień (oj, chciałbym takie do pracy nad kodem), będziemy odczuwać skutki ciągłego uderzania jasnego monitora.

cat_eyes_animation_1_W ciągu dnia – chcąc nie chcąc – trzeba “walczyć” ze światłem naturalnym, za to od wieczora wypadałoby zmniejszyć jasność. Na laptopach zazwyczaj nie jest to problem – prawie każdy system wspiera programową kontrolę jasności matrycy. Na desktopach, niestety, nie jest to takie proste. Nikt nie będzie przecież przynajmniej dwa razy dziennie ustawiał jasności przez przyciski na monitorze.

W tym miejscu mógłbym polecić program f.lux (Linux/OSX/Windows), który wprawdzie nie kontroluje jasności, ale kontroluje wyświetlane przez monitory barwy, aby jak najmniej raniły oczy w ciągu dnia i nocy – tylko nie każdemu, jak i mi, muszą odpowiadać “zniekształcone” kolory. Obejście problemu – ale nie rozwiązanie.

Pod Windowsem korzystałem z małego programu Desktop Lighter, który umożliwia nadpisanie standardowej jasności systemu, za pomocą “paska przewijania” (w paskudnym interfejsie) i skrótów klawiszowych. Nie powalało to na automatyczną kontrolę jasności, ale przynajmniej można było ją własnoręcznie ustalać na żądanie.

Co pod Linuksem? Oczywiście jest prościej ;-). Wystarczy wykorzystać mechanizm XRandr, przeznaczony do ogólnego zarządzania ekranami podłączonymi do komputera. Proponuję tutaj dwa rozwiązania – jedno, które wymaga okiełznania komend terminalowych i drugie, zautomatyzowane.

1) Obsługa surowa

Xrandrowi należy podać identyfikatory monitorów, których jasność chcemy modyfikować. W celu ich poznania używamy… samego xrandra.

xrandr -q

Polecenie to wyświetli w terminalu aktualne listę podłączonych monitorów wraz z ich trybami. Interesujące wpisy przybierają formę “DVI-0″,”VGA-0″,”DVI-1” i podobne. Na przykład w wyniku

Screen 0: minimum 320 x 200, current 3600 x 1080, maximum 8192 x 8192
 DVI-0 connected 1920x1080+1680+0 (normal left inverted right x axis y axis) 531mm x 298mm
 1920x1080 60.0*+
 1680x1050 59.9
 1680x945 60.0
 1400x1050 74.9 59.9
 1600x900 60.0
 1280x1024 75.0 60.0
 1440x900 75.0 59.9
 1280x960 60.0
 1366x768 60.0
 1360x768 60.0
 1280x800 74.9 59.9
 1152x864 75.0
 1280x768 74.9 60.0
 1280x720 60.0
 1024x768 75.1 70.1 60.0
 1024x576 60.0
 832x624 74.6
 800x600 72.2 75.0 60.3 56.2
 848x480 60.0
 640x480 72.8 75.0 60.0
 720x400 70.1
 DIN disconnected (normal left inverted right x axis y axis)
 DVI-1 connected 1680x1050+0+30 (normal left inverted right x axis y axis) 473mm x 296mm(...)

Moje monitory są rozpoznane jako DVI-0 i DVI-1.

Po zapoznaniu się z identyfikatorami, można już zmienić jasność. Wykonuje się to poleceniem:

xrandr --output DVI-0 --brightness 0.5

Gdzie DVI-0 to identyfikator, “0.5” to określenie jasności od 0 do 1 (koniecznie z kropką).

2) Obsługa zautomatyzowana

Oczywiście, taka obsługa nie jest zbyt wygodna. Warto stworzyć parę skryptów, by usprawnić cały proces.

Poleceniem:

sudo nano /usr/bin/setlight

tworzymy (jako root, przy podaniu odpowiedniego hasła) skrypt “setlight”. Jego zadaniem będzie zmiana jasności na podaną argumentem wartość dla wszystkich monitorów.

Kod skryptu (wklejamy Ctrl+V, zapisujemy Ctrl+X, potwierdzamy “T”):

#!/bin/sh
#by dRaiser
#http://draiser.net

OUTPUTS=$(xrandr |awk '$2 ~ /connected/ {print $1}')
EXECUTE=""
for CURRENT in $OUTPUTS
do
xrandr --output $CURRENT --brightness $1
done

Nadajemy uprawnienia do wykonywania skryptu:

sudo chmod +x /usr/bin/setlight

W tym momencie można już kontrolować jasność prostym poleceniem:

setlight 0.5

Co jest już o niebo wygodniejsze.
To jednak jeszcze nie koniec, osobiście stworzyłem sobie dwa jeszcze mniejsze skrypty – “lighter” i “darker”, do ustawiania predefiniowanych schematów na “dzień” i na “wieczór/noc”.

sudo nano /usr/bin/lighter

Kod skryptu:

#!/bin/sh
#by dRaiser
#http://draiser.net
setlight 1
sudo nano /usr/bin/darker

Kod skryptu:

#!/bin/sh
#by dRaiser
#http://draiser.net
setlight 0.7

Prawo do wykonywania:

sudo chmod +x /usr/bin/lighter
sudo chmod +x /usr/bin/darker

Pozostało jeszcze zadanie crona (harmonogramu automatycznych poleceń), które uruchomi obie komendy o odpowiednich godzinach, np 12 i 20. Najwygodniej utworzyć je graficznym edytorem “Scheduled tasks” (jeśli go nie posiadamy, instalujemy poleceniem

sudo apt-get install gnome-schedule

w systemach debianopochodnych.

W edytorze dodajemy dwa zadania:

2013-04-20-1536242013-04-20-153635

Poprawka: W polu “Command” składnia polecenia powinna zawierać komendę: “export DISPLAY=:0.0 ;” przed wywołaniem lighter/darker.

export DISPLAY=:0.0 ;lighter
export DISPLAY=:0.0 ;darker

I automat “rusza”. Codziennie o godzinie 12 monitor(y) zostaną rozjaśnione, o 20 z kolei przyciemnione. W każdej chwili można go też przestawić na żądanie poleceniami:

lighter
darker

(70% jest według mnie optymalne na wieczór+noc). Jeśli ktoś woli, można nawet utworzyć aktywator (launcher) z ładną ikonką, uruchamiający dowolne z poleceń – też zadziała.

Różnica przy korzystaniu ze ściemnianego w razie potrzeby monitora jest, w mojej opinii, ogromna.  Polecam też monitory matowe, nieodbijające za dużo światła. :)

Twitter

Leave a Reply

Your email address will not be published. Required fields are marked *