Näytönsäästäjäskriptit

Tänään (tai eilen) sain uuden korttini ja kaikki on onnellisena ok. Tuunasin illan pimetessä vielä vanhat näytönsäästöskriptini kuntoon. Nyt edes osa wateista säästyy, toivottavasti…

Kaikki alkoi xlock-ohjelmasta ja mustista ruuduista. Siihen tuli sitten hiiren disablointia ja näyttöjen sammuttelua ajan myötä. Uusin haaste on tosiaan se, että uusi Geforce-korttini ei mene idle-virroille, jos on liian monta näyttöä aktiivisena. Koodasin siis lisää tavaraa mukaan.

Pidemmittä jaaritteluitta, tässä on 4-osaisen purkan "pääohjelma":

#!/bin/sh
BIN=/home/progo/pika/xlockC.d

xlock -startCmd "$BIN/xlockC_start" -endCmd "$BIN/xlockC_stop" -mode blank \
    -echokeys -timeelapsed +usefirst

Aiemmin kaikki oli samassa, mutta nyt refaktoroin xlockC-skriptin kaveriksi ihan erilliset apuskriptit ja laitoin ne alihakemistoon, etteivät turhaan sotke $PATH:ssani.

Kun skripti käynnistetään, ajetaan xlockC_start:

#!/bin/bash
# Suorita toimet, kun näytöt pannaan nukkumaan.

### Hiiri pois käytöstä
mouseid=$($(dirname $0)/xlockC_mouseid.sh)
xinput --set-prop "$mouseid" "Device Enabled" "0"

# näytöt pois virransäästösyistä.
xrandr --output DVI-D-1 --off
xrandr --output DVI-D-0 --off

# loput näytöt nukkumaan
xset dpms force off

Vastaavasti näytöt ja hiiret pannaan takaisin päälle.

#!/bin/bash
# Suorita toimet, kun näytöt herätetään.

# Hiiren herätys.
mouseid=$($(dirname $0)/xlockC_mouseid.sh)
xinput --set-prop "$mouseid" "Device Enabled" "1"

# Näytöt ylös.
xrandr --output DVI-D-0 --auto --left-of VGA-0
xrandr --output DVI-D-1 --auto --left-of DVI-D-0

Ja hiiren dynaamisen laitekoodin saa oheinen taidonnäyte:

#!/bin/bash
# hae hiiren ID

awkscript='/Mouse/ {
for(i=0; i<=NF; i++) {
    split($i, ar, "=");
    if (ar[1] == "id")
        print ar[2];
}}'
mouseid=`xinput list | awk "$awkscript"`
echo $mouseid

Testaus

Ja näin. Sopivalla loopilla saatiin testattua myös virransäästön toteutuminen:

while `true`; do nvidia-settings -tq GPUCurrentPerfLevel ; sleep 1 ; done

Luvut painuvat kakkosesta ensin ykköseen ja lopulta nollaan. Ja muuten vain tiedoksi: tällä kortilla tasot menevät näin:

~ % nvidia-settings -q GPUPerfModes       

Attribute 'GPUPerfModes' (pihlaja:0.0):
perf=0, nvclock=324, memclock=324
perf=1, nvclock=540, memclock=810
perf=2, nvclock=1110, memclock=2500

Kommentit, kehitysehdotukset ja keskustelunavaukset ovat tervetulleita sähköpostitse.