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

Mała sieć domowa w oparciu o system Linux

Wpis zamieszczony o 17:57:35, 14 października 2007 - 58 komentarzy


Dzisiaj zajmiemy się tworzeniem małej, dość dobrze zabezpieczonej sieci domowej. Udostępnianie internetu zrealizujemy poprzez komputer-host z zainstalowanym systemem Linux (dowolnym, może być Ubuntu, Debian, Mandriva i inne). Pamiętajcie jednak, że Wasze środowisko może różnić się od środowiska zaprezentowanego w artykule – analizujcie treść a nie tylko przeklejajcie komendy do konsoli! Lecimy!

Załóżmy środowisko:

siec


Dla ułatwienia ustalmy hostname dla komputerów:


Oczywiście w sieci może być więcej komputerów – wystarczy do routera wsadzić większą ilość kart sieciowych. W przykładzie wykorzystałem 3 komputery z zainstalowanym systemem Debian GNU/Linux, nic jednak nie stoi na przeszkodzie aby był to jakikolwiek inny system operacyjny.

Dokładny opis naszej przykładowej sieci domowej:
Komputer1 (orion) ma 4 karty sieciowe na złączu PCI:

[22:00:05] night@orion:~$ lspci | grep -i ether
02:05.0 Ethernet controller: 3Com Corporation 3c940 10/100/1000Base-T [Marvell] (rev 12)
02:0b.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ (rev 10)
02:0c.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8029(AS)
02:0d.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ (rev 10)


W kolejności są to interfejsy od eth0 do eth3, przy czym interfejs eth0 (gigabitowa karta 3com) jest wpięta do sieci internet dostając adres z klasy prywatnej 192.168.0.10.

<22:02:26> root@orion:/home/night# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:0E:2E:90:A7:37
          inet addr:192.168.0.10  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::20e:2eff:fe90:a737/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2274170 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2224882 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:2140325129 (1.9 GiB)  TX bytes:1161463487 (1.0 GiB)
          Interrupt:21 Base address:0xd400

Konfiguracja kart sieciowych


Zaczynamy od konfiguracji pozostałych kart sieciowych. W tym celu wyedytujemy plik /etc/network/interfaces w poniższy sposób:

(...)
auto eth0
iface eth0 inet dhcp

auto eth1
iface eth1 inet static
address 10.0.0.1
netmask 255.255.255.0

auto eth2
iface eth2 inet static
address 10.0.1.1
netmask 255.255.255.0

auto eth3
iface eth3 inet static
address 10.0.2.1
netmask 255.255.255.0
(...)


I restart sieci:

# /etc/init.d/networking restart


To tyle w kwestii kart sieciowych. Teraz DHCP!

Konfiguracja serwera DHCP


Na początek szybka instalacja:

# apt-get install dhcp3-server


... i konfiguracja:

# rm /etc/dhcp3/dhcpd.conf; nano -w /etc/dhcp3/dhcpd.conf


W pliczku (który będzie pusty) wpisujemy dla każdej podsieci:

subnet 10.0.0.0 netmask 255.255.255.0 {
range 10.0.0.3 10.0.0.254;
default-lease-time 6100;
option domain-name „nasza.domena”;
option domain-name-servers pierwszy.dns, drugi.dns;
option routers 10.0.0.1;
option subnet-mask 255.255.255.0;
option broadcast-address 10.0.0.255;

host scorpio { # komputer nr 1
      hardware ethernet adres.mac;
      fixed-address 10.0.0.2;
  }
}


Oczywiście zmieniamy domenę, dns’y na własne a adres.mac wypełniamy adresem MAC komputera nr 1 (scorpio). Pozwoli nam to przypisywać jeden i zawsze ten sam adres IP dla tej maszyny. Dla reszty podsieci deklarujemy podobnie:

subnet 10.0.1.0 netmask 255.255.255.0 {
range 10.0.1.3 10.0.1.254;
default-lease-time 6100;
option domain-name „nasza.domena”;
option domain-name-servers dns,pierwszy, dns.drugi;
option routers 10.0.1.1;
option subnet-mask 255.255.255.0;
option broadcast-address 10.0.1.255;


host scorpio { hardware ethernet adres.mac; fixed-address 10.0.1.2; } }


Analogicznie dla podsieci trzeciej zmiejając odpowiednio ustawienia IP w konfiguracji. Drobna zmiana w skrypcie startowym:

# nano -w /etc/default/dhcp3-server


gdzie definiujemy interfejsy na których działać ma serwer DHCP

INTERFACES="eth1 eth2 eth3"


... i restart demona

/etc/init.d/dhcp3-server restart


W tym momencie możemy sprawdzić, czy nasze stacje robocze otrzymały adres sieciowy (należy odświeżyć ustawienia IP na każdym z nich). Jeśli wszystko zrobiliśmy dobrze powinniśmy móc pingować każdy z naszych komputerów. Pozostało nam udostępnienie dla nich internetu.

Udostępnianie sieci


W tym celu stworzymy dodatkowy skrypt startowy:

# nano -w /etc/init.d/firewall


Do którego to wpiszemy następujące regułki iptables:

#linijka potrzebna do włączenia udostępniania internetu
echo 1 > /proc/sys/net/ipv4/ip_forward
#wyczyszczenie starych reguł z pamięci iptables
iptables -F
iptables -X
iptables -t nat -X
iptables -t nat -F
# ustawienie domyślnej polityki (o tym później)
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A FORWARD -o lo -j ACCEPT
# Najważniejsze - udostępnienie sieci dla wybranych podsieci
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.0.1.0/24 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.0.2.0/24 -j MASQUERADE


Plik zapisujemy, nadajemy mu prawa wykonywalności:

# chmod +x /etc/init.d/firewall


dopisujemy do standardowych runleveli:

# update-rc.d firewall defaults 90


i odpalamy:

# /etc/init.d/firewall


W tym momencie mamy działający internet na wszystkich 3 komputerach. Voila! Trzy ostatnie linijki w skrypcie powinny stworzyć nam odpowiednią tablicę routingu:

# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.0.0        0.0.0.0         255.255.255.0   U     0      0        0 eth1
10.0.1.0        0.0.0.0         255.255.255.0   U     0      0        0 eth2
10.0.2.0        0.0.0.0         255.255.255.0   U     0      0        0 eth3
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
0.0.0.0         192.168.0.1     0.0.0.0         UG    0      0        0 eth0


Dzięki tym wpisom komputery w sieci domowej będą „widzieć się wzajemnie”. Możemy to sprawdzić pingując hosta scorpio z hosta omega, lub na odwrót. No i najważniejsze – możemy korzystać z internetu na wszystkich końcówkach podpiętych do sieci domowej :-).

Powiedzmy jednak, że to nas nie satysfakcjonuje. Chcemy mieć możliwość logowania się poprzez ssh do każdego z komputerów w sieci domowej. Musimy zatem zająć się forwardowaniem portów.

Przekierowanie portów


Aby przekierować wybrany port z hosta A na nasz router musimy na końcu naszego skryptu firewall dopisać:

iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 800 -j DNAT --to 10.0.0.2:22


Co to robi? Forwarduje każde zapytanie przychodzące na port 800 karty sieciowej eth0 na adres 10.0.0.2, port 22 w sieci lokalnej. Zatem, jeśli odpytamy nasz router z sieci zewnętrznej w ten sposób:

$ ssh <user>@<host> -p 800


Dostaniemy de facto połączenie z komputerem z adresem 10.0.0.2 w sieci lokalnej. W naszym przykładzie będzie to scorpio. Dodajmy resztę hostów:

iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 800 -j DNAT --to 10.0.0.2:22
iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 801 -j DNAT --to 10.0.1.2:22
iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 802 -j DNAT --to 10.0.1.2:22


I w ten sposób mamy możliwość zalogowania się na każdy z naszych komputerów w sieci domowej z zewnątrz.

Jutro opiszę sposób zabezpieczenia naszego routera przed najpopularniejszymi atakami z zewnątrz w przypadku gdy posiadamy publiczny adres IP. Enjoy!
W artykule mogły pojawić się błędy i nieścisłości. Będzie on zaktualizowany w przypadku wykryciu takowych.

Czytaj dalej : 58 komentarzy

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

PowerTOP - zarządzanie energią

Wpis zamieszczony o 00:50:05, 04 września 2007 - 22 komentarze


Każdy posiadacz laptopa chciałby, aby jego maszyna pracowała jak najdłużej i jak najefektywniej. Nie ma nic bardziej denerwującego, niż komunikat "Stan krytyczny: 5 minut" w czasie pracy nad ważnym dokumentem//wpisem na joggera w przypływie weny :-). Programiści Intela wyszli naprzeciw użytkownikom i stworzyli mały i bardzo pomocny program - PowerTOP.

PowerTOP (strona domowa) to aplikacja, która ma za zadanie badać słabe punkty Twojego systemu (pod względem poboru energii). Wygląd i sposób działania aplikacji można porównać do popularnego 'top' (patrz screen). Sposób działania programu opiera się na pobieraniu z przestrzeni użytkownika oraz jądra stosownych informacji na temat m.in. ACPI, konfiguracji jądra, modułów i przekazywaniu wyniku testów na ekranie w formie mini-porad. PowerTOP informuje nas o czasie działania procesora w każdym ze stanów (throttling//scalling), ilości wzbudzeń procesora ze stanu uśpionego w ciągu sekundy, poborze mocy w watach, sumarycznej i procentowej ilość wzbudzeń procesora przez dane moduły//funkcje oraz, co najciekawsze, wyświetla mini-porady dotyczące optymalizacji systemu.

Aby nasz laptop działał sprawniej i dłużej, musimy uważać na:

Polecam także kierowanie się sugestiami zawartymi na dole PowerTOP.

Wymierne korzyści? Po dostosowaniu mojego sprzętu według zaleceń PowerTOP zyskałem 10 minut więcej na baterii podstawowej (przed modyfikacją - 2:21, po modyfikacji - 2:31) oraz 17 minut na baterii dodatkowej (przed modyfikacją - 6:10 po modyfikacji - 6:27) (stany podane z odczytu kpowersave w 10 minut po włączeniu komputera i ustabilizowaniu się pracy dysku). Tak więc mogę korzystać z mojego sprzętu już nie 8 godzin i 31 minut ale 8 godzin i 58 minut bez przerwy. Może w przypadku tak długich czasów 27 minut nie gra roli, lecz dla użytkowników laptopów marki ACER czy też tańszych modeli ASUS//HP takie zwiększenie czasu pracy to duża różnica. Dla ciekawskich - tak wygląda to u mnie (stan dla jednej baterii):

Cn                Avg residency         P-states (frequencies)
C0 (CPU aktywny)        ( 2,6%)
C1                0,0ms ( 0,0%)         1100 MHz   ( 0,0%)
C2               13,1ms ( 5,4%)         1000 MHz   ( 0,0%)
C3               15,0ms (92,0%)          900 MHz   ( 0,0%)
                                         600 MHz   (100,0%)

Wakeups-from-idle per second : 65,5     interval: 15,0s
Użycie zasilania (szacunek ACPI): 7,2W (2,3 godzin)
Najczęstsze powody wybudzenia:
  30,9% ( 10,8)             artsd : schedule_timeout (process_timeout)
   9,5% (  3,3)             fnfxd : do_nanosleep (hrtimer_wakeup)
   7,8% (  2,7)               psi : schedule_timeout (process_timeout)


Instalacja? Polecam pobrać i skompilować program ze strony producenta, bądź też leniuchy mogą użyć apt'a i pozyskać starą wersję PowerTOP:

# apt-get install powertop



Enjoy!

Czytaj dalej : 22 komentarze

LinkLift