Oszczędzanie energii - Toshiba Portege R500

Wpis zamieszczony o 21:49:42, 02 sierpnia 2008 - 50 komentarzy


Po publikacji artykułu o konfiguracji notebooka Toshiba Portege R500 pod systemem Debian GNU/Linux wiele osób odezwało się do mnie z pytaniem "Jak to jest możliwe, że Twój laptop działa tak długo i pobiera tak mało prądu?! To niemożliwe!". Niedowierzali tym słowom:
Na podstawowej baterii z włączonymi wszystkimi urządzeniami (Bluetooth, WiFi, podłączone dwa telefony pod USB) na maksymalnym podświetleniu notebook działa 4 godziny bez przerwy, przy założeniu oszczędzania energii pobór mocy spada do... 6W co umożliwia nieprzerwaną pracę biurową przez (uwaga!) 9 godzin! Oczywiście, to tylko teoretyczne założenie, w praktyce nie osiągnąłem jeszcze na podstawowej baterii czasu dłuższego niż 7 godzin.


Pierwszy screen obrazuje sytuację, gdy wszystkie możliwości sprzętu są aktywne, działa karta Wi-Fi, Bluetooth, jasność matrycy jest ustawiona na maksymalny poziom etc. KPowerSave informuje, że czas działania laptopa oscyluje w granicach 5 godzin (bateria jest maksymalnie naładowana).
Drugi zrzut ekranu wykonałem, gdy wyłączyłem WiFi, moduł Bluetooth oraz przyciemniłem matrycę do poziomu 2/7 (gdzie 7/7 to maksymalna wartość, 1/7 to minimalna a 0/7 to wyłączone podświetlenie matrycy). Dodatkowo wyłączyłem obsługę PCMCIA oraz kart SD (generują bardzo dużo przerwań). KPowerSave poinformował, że notebook powinien pracować około 6 godzin i 44 minut, jednak PowerTop uruchomiony w tle pokazuje długoterminowe działanie w granicach 7 i pół godziny. To maksymalny wynik jaki udało mi się uzyskać nie uciekając się do prób zaawansowanego oszczędzania energii. Niestety, mój kernel wywołuje dużo przerwań między swoimi dwoma rdzeniami, co jest bolączką jądra 2.6.24. Nie mam zamiaru go na razie zmieniać, zbyt leniwy jestem ;-). Sądzę, że mógłbym po odpowiednim dobraniu jądra zyskać około pół godziny.

Oczywiście, można posunąć się dalej! W tym celu napisałem prosty skrypt Basha, który wywołany na Toshibie Portege R500 włączy wszystkie możliwe funkcje oszczędzania energii i pozwoli pracować na podstawowej baterii do 9 godzin. Skrypt wyłącza następujące urządzenia:

Zapytacie "po co?!". Jasne, to sztuka dla sztuki :-). Po prostu lubię się bawić ;-). I jeszcze bardziej - lubię pisać w Bashu :-). Ponadto - używam tego skryptu jadąc pociągiem, gdy piszę np. nowy artykuł, dokańczam swoje programy lub po prostu oglądam film (wtedy włączam tylko kartę dźwiękową).

Skrypt znajdziecie TUTAJ
Przetestowany został na dystrybucyjnym jądrze Debiana w wersji 2.6.24, nie zamieszczam go w całości, gdyż ma 221 linijek.
Po kilku modyfikacjach można go z powodzeniem używać na dowolnym laptopie - zmianić należy funkcję odpowiedzialną za włączanie//wyłączenia karty wifi, Bluetooth oraz karty dźwiękowej.

Enjoy!

Czytaj dalej : 50 komentarzy

Instalacja pakietu Debiana bez zależności

Wpis zamieszczony o 08:21:45, 17 listopada 2007 - 22 komentarze


UWAGA! Poniższego rozwiązania używasz na własną odpowiedzialność. SOA#1

System zależności zaimplementowany w apt-get ma swoje wady i zalety. Niewątpliwą zaletą jest "zrób-i-zapomnij". Jedna komenda instaluje pakiet, jego zależności i wszystko co potrzebne do działania programu. Jednak największa zaleta czasem staje się największą wadą...

Dawno temu zauroczony systemem pakietów w Slackware napisałem sobie mały skrypt do instalacji pakietu Debiana bez jego zależności.

#!/bin/bash
sciezka=$(apt-cache show $1 | grep Filename | awk '{print $2}')
sciagnij=$(wget -c http://ftp.debian.org/$sciezka)
plik=$(apt-cache show $1 | grep Filename | awk '{print $2}' | sed "s/\//  /g" | awk '{print $5}')
dpkg -x $plik /

Tak proste że aż głupie :-). Jeden minus - trzeba znać nazwę paczki i podać ją jako parametr. Sam plik zapisujemy np. jako /sbin/apt-inst i cieszymy się jak dzieci że każdy program który zainstalujemy w ten sposób będzie zachowywał się mniej więcej "in_Slackware_style":

$ krusader
krusader: error while loading shared libraries: libkjsembed.so.1: cannot open shared object file: No such file or directory

No ale co za problem ;-).

# apt-inst libkjsembed1

I krusader działa :-).

Raz jeszcze piszę - używasz na własną odpowiedzialność. Sam skrypt przydaje się przy budowaniu minimalistycznego systemu, trzeba jednak posiadać dość sporą wiedzę na temat systemu Linux. Za pomocą tego "czegoś" udało mi się swego czasu zmieścić działającego Debiana + KDE (dość minimalistyczne) w około 350MiB. Wiem że możliwe jest postawienie bardzo minimalistycznego systemu (np. dla routera sprzętowego) na mniej niż 64MiB. Komuś się uda? :-)

ps. wbrew pozorom lubię slacka a wpis nie ma charakteru prowokacji :)

ps2. uprzedzam pytanie: "Jak odinstalować taki program?" - ręcznie. Sprawdzasz gdzie się zainstalował i ręcznie usuwasz pliki.

Czytaj dalej : 22 komentarze

Bluetooth Proximity

Wpis zamieszczony o 21:47:49, 15 listopada 2007 - 42 komentarze


Posiadasz laptopa z wbudowanym interfejsem BlueTooth? Korzystasz z telefonu//palmtopa z Bluetooth? Ten artykuł może Ciebie zainteresować.

Gdy tylko zakupiłem nowego laptopa zamarzyła mi się dodatkowa funkcja wykorzystująca BlueTooth. Chciałem, aby laptop automatycznie blokował ekran gdy tylko odejdę od niego po czym logował się automatycznie gdy zasiądę przy klawiaturze. Troszkę szperania w google, troszeczkę własnej inwencji i oto jest :-). Skrypt BlueTooth Proximity:

#!/bin/bash

DEVICE="MAC"
CHECK_INTERVAL=2
THRESHOLD="-1"
PID=0
START_CMD='true'
FAR_CMD='dcop kdesktop KScreensaverIface lock'
NEAR_CMD='dcop kdesktop KScreensaverIface quit'
HCITOOL="/usr/bin/hcitool"
DEBUG="/tmp/logi"

connected=1

function msg {
    echo "$1" >> $DEBUG
}

function check_connection {
    connected=0;
    found=0

    for s in `$HCITOOL con`; do
        if [[ "$s" == "$DEVICE" ]]; then
            found=1;
        fi
    done
    if [[ $found == 1 ]]; then
        connected=1;
    else
       msg 'Attempting connection...'
        if [ -z "`$HCITOOL cc $DEVICE 2>&1`" ]; then
            msg 'Connected.'
            connected=1;
        else
            connected=0;
        fi
    fi
}

function check_xscreensaver {
    PID=`ps -C xscreensaver --no-heading | awk '{ print $1 }'`
    if [ "$PID" == "" ];  then
        $START_CMD &
    fi
}

name=`$HCITOOL name $DEVICE`
msg "Monitoring proximity of \"$name\" [$DEVICE]";

state="near"
while /bin/true; do

    check_xscreensaver
    check_connection

    if [[ $connected -eq 1 ]]; then
        rssi=`$HCITOOL rssi $DEVICE | sed -e 's/RSSI return value: //g'`

        if (( "$rssi" <= $THRESHOLD )); then
            if [[ "$state" == "near" ]]; then
                msg "*** Device \"$name\" [$DEVICE] has left proximity"
                state="far"
                echo "daleko - wlaczam screena"
                $FAR_CMD
                echo $?
            fi
        else
            if [[ "$state" == "far" ]]; then
                msg "*** Device \"$name\" [$DEVICE] is within proximity"
                state="near"
                sleep 7;
                $NEAR_CMD
                kdialog --passivepopup "Urządzenie w zasięgu Bluetooth, odblokowanie ekranu" 5
                $START_CMD &
            fi
        fi
        msg "state = $state, RSSI = $rssi, PID = $PID"

    else
        if [[ "$state" == "near" ]]; then
            msg "*** Device \"$name\" [$DEVICE] has been disconnected"
            state="far"
            $FAR_CMD > /dev/null 2>&1
        fi
    fi

    sleep $CHECK_INTERVAL
done

Oryginał znajduje się pod tym adresem, ja jednakże nieznacznie go zmodyfikowałem aby odpowiadał moim preferencjom. W konfiguracji skryptu znajdujemy następujące parametry:

Skrypt najlepiej umieścić w /bin/btprox

# cp btprox /bin/btprox

Ostatnim krokiem jest udostępnienie użytkownikowi bez uprawnień korzystania z hcitool i l2ping.

# chmod +s /usr/bin/hcitool
# chmod +s /usr/bin/l2ping

I tyle. Odpalamy btprox i sprawdzamy działanie skryptu :-).

Podobną funkcjonalność oferuje nam bluez-utils wersji >3.0 jednak u mnie i kilku moich kolegów to po prostu nie działa. Ekran zostaje zablokowany gdy komórka całkowicie wyjdzie poza zasięg BlueTooth co może sprawdza się w gorszych chipsetach, jednak u mnie BT łapie na ponad 10 metrów przez dwie ściany...

Czytaj dalej : 42 komentarze

KNetworkManager, KPowerSave i problemy z uprawnieniami

Wpis zamieszczony o 16:43:27, 19 września 2007 - 1 komentarz


Ostatnia aktualizacja Debiana Sid była dość desktrukcyjna dla mojego systemu… Padł GIMP (niezgodność wersji gimp i gimp-data), dodanie nowych X-ów spowodowało błędy ABI o których pisał Hadret i co chyba najgorsze – uruchamianie KPowerSave oraz KNetworkManager powodowało po kilku(nastu) sekundach sprzętowe zwisy komputera… Dodatkowo – KNetworkManager nie widział żadnych interfejsów sieciowych a KPowerSave nie potrafił regulować częstotliwości pracy procesora i podświetlenia matrycy. Uruchomienie tych aplikacji pod kontem roota dawało pozytywne efekty (wszystkie opcje działały), jednak tylko przez kilkanaście sekund – sprzętowy zwis. Słowem – koszmar na kilkadziesiąt minut zabawy…

Dla potomności i samoinformacji (swoisty reminder) zamieszczam rozwiązanie problemu z KPowerSave i KNetworkManager. Cała wina leży po stronie D-BUS a raczej jego najnowszej wersji, która wprowadza zaawansowane profile uprawnień. Zaglądając do:

$ cat /etc/dbus-1/system.d/knetworkmanager.conf


Widzimy „policies„, czyli nasze profile. I co? „Default„ jest na ustawione na „deny„ w każdym przypadku… Hmmm… Patrząc dalej zauważamy sygnowaną grupę, dla której flagi ustawione są na „allow„. No to:

# groupadd night netdev


Bądź też zmieniamy ustawienia „Default„ – wtedy każdy użytkownik będzie miał dostęp do zmiany ustawień sieci poprzez knetworkmanager. Analogicznie postępujemy dla kpowersave i innych programów, które korzystając z D-BUS poprawnie działają pod root‘em a na kontach użytkowników sprawiają problemy..

Voila! Wiem, nie wysiliłem się z wpisem, ale siedziałem troszkę nad tym aby zrozumieć mechanizm działania nowego systemu D-BUS. Boję się KDE4, które całe przejdzie na D-BUS...

Czytaj dalej : 1 komentarz

Interfejs do wysyłania smsów via sms-pl

Wpis zamieszczony o 18:11:26, 08 września 2007 - 10 komentarzy


Napisałem sobie prosty skrypt do wysyłania smsów poprzez program sms-pl (dostępny w repozytoriach). Jego konfiguracja opiera się na wprowadzeniu dwóch linijek do pliku /etc/smsrc w których zawrzemy nasz login i hasło do płatnej bramki sms (sposób edycji znajdziemy w dokumentacji programu), możliwe także jest skorzystanie z bezpłatnych bramek sms! Po odpowiednim skonfigurowaniu sms-pl możemy już korzystać z poniższego skryptu: (w przypadku korzystania z innej bramki niż miastoplusa należy wyedytować jedną linijkę w skrypcie)

#!/bin/bash

numer=$(kdialog --inputbox "Wyślij sms pod numer:")
tresc=$(kdialog --textinputbox "Wprowadź treść:")

kdialog --passivepopup "Wysyłam wiadomość..." 4
sms -g miastoplusa -n "$numer" -m "$tresc"
if [ $? == 1 ]; then
        kdialog --sorry "Sms nie wysłany, spróbuj ponownie"
else
        kdialog --passivepopup "Wiadomość wysłana!" 3
fi
exit 0

Zamieniąc odpowiednio kdialog na xdialog lub dialog skrypt będzie działać też w innych środowiskach graficznych niż KDE (możliwe że konieczna będzie drobna zmiana skryptu).

Wiem że to banalne, wiem że są odpowiednie programy do robienia tego samego. Wolę jednak korzystać z własnych rozwiązań.

Czytaj dalej : 10 komentarzy

LinkLift