NL_Automatische_Suspend_Xubuntu

Xubuntu Automatische Standby

In Xubuntu 7.04 is er standaard geen mogelijkheid om bij inactiviteit de computer in standby te zetten. De enige mogelijkheid is om een screensaver te activeren, of om het scherm uit te zetten. Gnome-powermanager werkt ook niet altijd naar behoren in Xubuntu. Deze wiki geeft meer informatie over hoe je automatische standby toch kan laten werken als suspend op je computer werkt.

Deze wiki is gebaseerd op: [http://www.thinkwiki.org/wiki/Installing_Debian_Lenny_on_a_ThinkPad_T60#automated_sleep

Om deze wiki te kunnen gebruiken is het nodig dat suspend werkt. Dit kan je testen door in een terminal het volgende te toetsen:

$ sudo /etc/acpi/sleep.sh

Als dat niet werkt, dan kan je proberen om /etc/default/acpi-support aan te passen. Verander in de volgende tekst ¨¨¨mem¨¨¨ in ¨¨¨standby¨¨¨:

# Change the following to "standby" to use ACPI S1 sleep, rather than S3.
# This will save less power, but may work on more machines
#ACPI_SLEEP_MODE=mem (veranderd)
ACPI_SLEEP_MODE=standby

type dan in een terminal:

$ sudo /etc/init.d/acpid restart

Probeer nu nogmaals of suspend werkt. Werkt het dan kan je deze wiki gebruiken.

De installatie

Er zijn twee manieren:

Methode 1: zonder script, inactiviteit bepaald door afwezigheid toets en muis(pad) gebruik, geen pop-up window met cancelmogelijkheid

stappen:

  1. installeren sleepd en xosview pakketjes
  2. zoek de irq van je muis(pad) en toetsenbord
  3. toevoegen regel aan rc.local
  4. opnieuw opstarten

Stap 1: installeren sleepd en xosview pakketjes

type in een terminal:

$ sudo apt-get install sleepd xosview

Stap 2: irq muis(pad) en toetsenbord

type in een terminal:

$ xosview

Je kan nu in een schermpje zien welke plek (0-15) geactiveerd wordt bij muis(pad) of toetsengebruik. Onthoudt deze nummers, die zijn later nodig bij het commando sleepd.

Stap 3: toevoegen regel aan rc.local

type in een terminal:

$ sudo nano /etc/rc.local

voeg de volgende regel toe aan het einde voor het commando exit:

sleepd -U 900 -u 180 -s /etc/acpi/sleep.sh -i 1 -i 11 -i 12

Dit is het commando waarbij de tijd tot standby na inactiviteit bij gebruik van netstroom 900 seconden is, bij batterijgebruik van je laptop 180 seconden. De irq's van het toetsenbord, de muis en de touchpad zijn in dit voorbeeld 1, 11 en 12. Deze waarden dienen dus aangepast te worden aan de eigen computer en wensen.

Mijn rc.local ziet er zo uit:

#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
sleepd -U 900 -u 180 -s /etc/acpi/sleep.sh -i 1 -i 11 -i 12
exit 0

Stap 4: start je computer opnieuw op

Geen probleem toch.. Nu zou de automatische stanby functie moeten werken.

Methode 2: met script, deze methode kijkt ook naar schijf-, netwerk- en cpu gebruik, en of er iemand op afstand is ingelogd op de computer, tevens een pop up venster met cancel mogelijkheid:

stappen:

  1. installeren pakketjes sleepd, xosview, sysstat en zenity
  2. achterhalen irq's
  3. opslaan script als /etc/acpi/autosleep.sh en rechten aanpassen met chmod
  4. lijn toevoegen aan rc.local zodat sleepd bij opstarten wordt geactiveerd en het script aanstuurd.
  5. opnieuw opstarten

Stap 1: installeren pakketjes

$ sudo apt-get install sleepd xosview sysstat zenity

Stap 2: irq muis(pad) en toetsenbord

type in een terminal:

$ xosview

Je kan nu in een schermpje zien welke plek (0-15) geactiveerd wordt bij muis(pad) of toetsengebruik. Onthoudt deze nummers, die zijn later nodig bij het commando sleepd.

Stap 3: opslaan script

type in een terminal:

$ sudo nano /etc/acpi/autosleep.sh

met de muis het volgende script selecteren, en met rechtermuisklik in nano plakken.

script:

# autosleep.sh
# Checks if the computer is inactive before going to sleep. Aborts if it looks like 
# there's some action.
#

# Thresholds - these may depend on what you do with your computer and what 
# you want it to stay awake for.
CPUTHRESH=5        # in percent 
DISKTHRESH=500     # in blocks/sec (the sar manpage says blocks are 512 bytes in normal cases) 
NETTHRESH=10       # in kB/s
#SNDTHRESH=200      # in ???? rms 
# (no sound playing is ~25 while playing mp3 w/ pcm+master turned all the way to zero is ~250)

# Sample times (in seconds) - again needs may vary
CPUTIME=1   
DISKTIME=2  
NETTIME=2 
#SNDTIME=2 


# Check CPU usage defined as non-idle time.
CPU=`sar $CPUTIME 1 | awk '/Average/ { printf "%d\n",100-$8}'`
echo "CPU = $CPU%"
if [ $CPUTHRESH -lt $CPU ];then
    echo CPU is working, not sleeping
    exit;
fi

# Check disk usage (read + write)
DISK=`sar -b $DISKTIME 1 | awk '/Average:/ { printf "%d",$5 + $6 }'`
echo "DISK = $DISK"
if [ $DISKTHRESH -lt $DISK ];then
    echo Disk is working, not sleeping
    exit;
fi

# Check net usage (exclude wifi0 which appears to have activity all the time for some weird reason)
NET=`sar -n DEV $NETTIME 1 | awk '/Average:/ && $2 !~ /(IFACE|wifi0)/ { SUM += $5 + $6 } END { printf ("%d\n",SUM)}'`
echo "NETWORK = $NET"
if [ $NETTHRESH -lt $NET ]; then
    echo Network is in use, not sleeping
    exit;
fi

# Check remote login
REMOTELOGIN=`last | head | grep "pts/.*still logged in"`
if [ -n "$REMOTELOGIN" ];then
    echo Remote login active:
    echo $REMOTELOGIN
    echo Not sleeping
    exit;
fi

# Set the mixer to some controlled values and set it to record the mixed sound output
# This unfortunately is going to be sound-chip specific.
#alsactl -f /var/tmp/sound.state store
#amixer sset Capture 20% cap
#amixer sset Digital 20%
#amixer sset Mix cap
# Record to null and use RMS amplitude in resulting statistics with a convenience 
# factor to make it integer
#SND=`rec -n stat trim 0 $SNDTIME 2>&1 | sed -n 's/^RMS[ ]*amplitude:[ ]*/1000000 * /gp' | bc | cut -d. -f 1`
# Restore previous mixer state
#alsactl -f /var/tmp/sound.state restore
#echo "SOUND = $SND"
#if [ $SNDTHRESH -lt $SND ];then
#    echo Sound is playing, not sleeping
#    exit;
#fi

# Timer 10 secs met pop-up window
(for ((i=0;i<100;i+=1)) ; do echo $i ; sleep 0.1; done) | zenity --progress --auto-close --title='' --text='Deze computer gaat binnen 10 sec. in standby!'

test=$?

if [ $test -eq "1" ]; then
  exit;
fi  

# Ga in standby

. /etc/acpi/sleep.sh

Nu in nano het bestand bewaren en afsluiten. Met het volgende commando zorg je ervoor dat het scriptje executable wordt:

$ sudo chmod ugo+x /etc/acpi/autosleep.sh

Stap 4: toevoegen regel aan rc.local

type in een terminal:

$ sudo nano /etc/rc.local

voeg de volgende regel toe aan het einde voor het commando exit:

sleepd -U 900 -u 180 -s /etc/acpi/autosleep.sh -i 1 -i 11 -i 12

Dit is het commando waarbij de tijd tot standby na inactiviteit bij gebruik van netstroom 900 seconden is, bij batterijgebruik van je laptop 180 seconden. De irq's van het toetsenbord, de muis en de touchpad zijn in dit voorbeeld 1, 11 en 12. Deze waarden dienen dus aangepast te worden aan de eigen computer en wensen. Vervolgens kijkt dit script dus of er net-activiteit is, de cpu actief is, of de harde schijf. Als dat zo is dan gaat de computer niet in standby.

Mijn rc.local is:

#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
sleepd -U 900 -u 180 -s /etc/acpi/autosleep.sh -i 1 -i 11 -i 12
exit 0

Stap 5: Start je computer opnieuw op

en dan werkt het als het goed is.

NL_Automatische_Suspend_Xubuntu (last edited 2008-08-06 17:00:51 by localhost)