2012. március 19., hétfő

Arch Linux: Teendők laptopon


Sziasztok!

Ez a leírás igyekszik bemutatni mind azt, amit laptopon kell tenni a rendszerrel, hogy a hordozható gépen specifikus dolgok megfelelően működjenek. A leírás feltételezi, hogy a rendszer már fel van telepítve, és működik az X. A leírás egyes részeit nem szükséges elkövetni, ha DE-t használsz. Nálam Fluxbox WM, és Slim bejelentkező található, így a beállításokat ezekhez írom le.

Yaourt:

Először is, ha nincs még fenn nálad a yaourt nevű csomag, telepítsd fel. Ezt könnyen meg tudod tenni, ha felveszed a tárolóját:

# nano /etc/pacman.conf

Illeszd a végére ezt:

[archlinuxfr]
Server = http://repo.archlinux.fr/$arch

Mentsd el a fájlt, majd:

# pacman -Sy yaourt

Touchpad:

Használok a laptophoz egeret, ezért kifejezetten zavar a touchpad. Ezt könnyedén ki lehet lőni a synclient TouchpadOff=1 paranccsal. Ha felveszed az automatikusan induló programok közé, akkor induláskor kilövi. Tehát a ~/.fluxbox/startup nevű fájlba vedd fel a synclient TouchpadOff=1-t.
Továbbá a gépemen található egy gomb, ami a touchpad-et ki és be kapcsolja, azonban ez Fluxbox alatt inaktív.
Ezt úgy oldottam meg, hogy írtam egy scriptet (~/.touchpad), aminek a tartalma:

#!/bin/sh
if [ "$(synclient -l | tr -s " " | grep "TouchpadOff = 1")" ]
then synclient TouchpadOff=0
else synclient TouchpadOff=1
fi

Ne felejtsük el futtathatóvá tenni!
Hogy ezt hogyan hívja meg a gomb megnyomása, arról a Funkció billentyűk testreszabásánál beszélek.

Funkció billentyűk Xorg.conf-al:

Ha WM-et használunk nincs ami kezelje a funkció gombjainkat. Azonban egy kis trükközéssel meg tudjuk ezt oldani az Xorg-al. Szükségünk lesz az alábbi csomagokra:

# pacman -Sy xorg-xev xorg-server-utils

Ez után futtassuk az alábbi parancsot terminálban: xev | grep -A2 --line-buffered '^KeyRelease' | sed -n '/keycode /s/^.*keycode \([0-9]*\).* (.*, \(.*\)).*$/\1 \2/p'
Ez a program kiírja nekünk a terminálba, hogy mi a lenyomott gomb azonosítója. Nyomkodjuk meg szépen azokat a gombokat, amiket szeretnénk beállítani, majd szerkesszük a ~/.Xmodmap nevű fájlt azok alapján. Ez nálam:

keycode 123 = XF86AudioRaiseVolume
keycode 122 = XF86AudioLowerVolume
keycode 121 = XF86AudioMute
keycode 199 = XF86TouchpadToggle
keycode 173 = XF86AudioPrev
keycode 172 = XF86AudioPlay
keycode 171 = XF86AudioNext

Ez után hozzuk létre a ~/.xprofile , és a /etc/xprofile nevű fájlokat, amiknek tartalma legyen:

xmodmap ~/.Xmodmap

Nálam mint mondottam volt Slim felel a bejelentkezésért, ami xinit-et használ, ezért a ~/.xinitrc-be a következőt illesszük:

[ -f /etc/xprofile ] && . /etc/xprofile
[ -f ~/.xprofile ] && . ~/.xprofile
exec ck-launch-session dbus-launch startfluxbox

Végül szerkesztenünk kell a ~/.fluxbox/keys fájlt, ahová felvesszük, melyik gomb mit is csináljon. Nálam így néz ki:

#Deadbeef start/pause
None XF86AudioPlay :Exec deadbeef --play-pause
#Deadbeef prev
None XF86AudioPrev :Exec deadbeef --prev
#Deadbeef next
None XF86AudioNext :Exec deadbeef --next


#Multimedia keys
None XF86AudioMute :Exec amixer set Master toggle
None XF86AudioLowerVolume :Exec amixer set Master 1%- unmute
None XF86AudioRaiseVolume :Exec amixer set Master 1%+ unmute
None XF86TouchpadToggle :Exec ~/.touchpad

Így már egy kijelentkezés/bejelentkezés után működni fognak a multimédia gombjaink, a touchpadot ki és be tudjuk kapcsolni.

Network-manager + Slim:

Alapból a NetworkManager nem fog megfelelően működni Slim-mel. Hogy jól menjen az alábbit kell tennünk. Telepítsük a gnome-keyring nevű csomagot, majd szerkesszük a /etc/pam.d/slim nevű fájlt, és írjuk a végére, hogy:

auth        optional        pam_gnome_keyring.so
session    optional        pam_gnome_keyring.so  auto_start

Majd szerkesszük a /etc/pam.d/passwd nevű fájlt, és illesszük a végére:

password    optional    pam_gnome_keyring.so

Végül a ~/.xinitrc-nkbe illesszük az elejére, hogy:

## test for an existing bus daemon, just to be safe
 if test -z "$DBUS_SESSION_BUS_ADDRESS" ; then
    ## if not found, launch a new one
    eval `dbus-launch --sh-syntax --exit-with-session`
    echo "D-Bus per-session daemon address is: $DBUS_SESSION_BUS_ADDRESS"
 fi

Nm-online:

Előfordulhat, hogy pl. vonaton utazva szükségtelenek a nethez kötött alkalmazások, így felesleges lenne, hogy a rendszerrel együtt induljanak. Erre nagyon jó megoldás az nm-online parancs. Írtam egy szkriptet, aminek tartalma:

#!/bin/bash
if nm-online -t 300
then
    dropbox start -i &
    transmission-gtk -m &
    pidgin &
    claws-mail
fi

Futtathatóvá téve a ~/.fluxbox/startup-ban felvettem az autómatikusan induló programok közé. Így a nethez kötött alkalmazások csak akkor indulnak a rendszerrel együtt, ha 5 percen belül talál hálózatot a gép.

Energiagazdálkodás:

Utolsó, de legbonyolultabb dolog, amit szeretnék bemutatni az energiagazdálkodás. Ehhez szükségünk lesz az alábbi pár csomagra: acpi acpid cpupower hdparm powertop powertop2

$ yaourt -Sy acpi acpid cpupower hdparm powertop powertop2


Cpupower:

A cpupower-pal kezdeném. Ez az alkalmazás szabályozza a processzorunk órajelét. E helyett használható a cpufrequtils is. Töltüsk be a acpi-cpufreq és a cpufreq_ondemand nevű modulokat:

# modprobe acpi-cpufreq
# modprobe cpufreq_ondemand

Ez után megnézzük a processzorunk minimum és maximum órajeleit:

$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies

A sor elején lévő a legnagyobb, a sor legvégén lévő a legkisebb órajel, kHz-ben mérve.
Szerkesszük a /etc/conf.d/cpupower nevű fájlt (cpufrequtils esetén a /etc/conf.d/cpufreq). Vegyük ki a kikommentelést a governor="ondemand" elől, valamint
min_freq="a minimum pontos értéke"
max_freq="a maximum pontos értéke"

Nálam így néz ki:

# Define CPUs governor
# valid governors: ondemand, performance, powersave, conservative, userspace.
governor='ondemand'


# Limit frequency range
# Valid suffixes: Hz, kHz (default), MHz, GHz, THz
min_freq="1197000kHz"
max_freq="2661000kHz"

Már csak egy teendőnk van ezzel kapcsolatban, felvenni a cpupower (cpufrequtils) moduljait és démonját az rc.conf-ban. Szerkesszük a /etc/rc.conf nevű fájlt, és a modulok közé illesszük az acpi-cpufreq és a cpufreq_ondemand kifejezéseket:

MODULES=(acpi-cpufreq cpufreq_ondemand)

A démonok közé pedig a cpupower-t (cpufreq):

DAEMONS=(syslog-ng dbus @cpupower !network @networkmanager @cupsd crond slim)

Egy reboot után láthatjuk, hogy a processzorunk órajelei immár alacsonyak, ha nincsen terhelve az eszköz. Azonban ez az akkuidőnket alig növelte, csupán pár perccel.

Hogy tovább nőjön az akkuidő leszabályozzuk a GPU órajeleit is. Ezt rábízhatjuk az ACPID-re is (később), de nálam fix-en le van szabályozva, mert nem használok GPU igényes alkalmazást. Radeon kártyán így lehet csökkenteni az órajeleket:

# echo low > /sys/class/drm/card0/device/power_profile

Ezt a sort beillesztjük a /etc/rc.local nevű fájlba, ami a rendszer indításakor szépen le is futtatja, leszabályozva ezzel a GPU órajeleit. Órajelekről ennyi.


Nvidiánál nem tudom, és nem szeretnék hülyeséget mondani :)


ACPI:

Az acpi felel például a ventillátor fordulatszámának szabályzásáért, vagy a telep élettartamának figyeléséért.

Az rc.conf-ba vegyük fel a modulokat, és a démont. Laptopon szerintem mindenkinél elérhetőek az alábbi modulok: ac battery button fan (ha meg szeretnél győződni róla, mik érhetőek el, és mik nem, az alábbi linken található modulokat próbálgasd végig a modprobe paranccsal)
Tehát illesszük az /etc/rc.conf moduljai közé ezeket. A démonok közé pedig az acpi szócskát. Ezzel az acpi meg is volna. Reboot.

ACPID:

Az acpid-del tudunk lefuttatni szkripteket ha a tápot kihúzzuk, vagy épp bedugjuk a gépünkbe.
Hogy hogyan viselkedjen az acpid a /etc/acpi/handler.sh nevű fájlban tudjuk megadni. Ha belekukkantunk, láthatjuk, hogy vannak események (pl. sleep button megnyomva, táp kihúzva, stb.), és vannak hozzá tartozó teendők. Ha nem szeretnénk a kettőt keverni, akkor a /etc/acpi/events/ mappába tudjuk felvenni külön az eseményeket, és a handler.sh-ba a hozzá tartozó teendőket. Az eseményeket nyomon tudjuk követni az acpi_listen paranccsal. Próbáljuk is hát ki. Adjuk ki terminálban a parancsot, majd pl. nyomjuk meg a bekapcsoló gombot, vagy húzzuk ki a tápot. A kimenetek körülbelül így fognak kinézni:

Bekapcsoló gomb megnyomásakor:
button/power PBTN 00000080 00000000

Táp kihúzásakor:
ac_adapter ACPI0003:00 00000080 00000000
battery PNP0C0A:00 00000080 00000001

Táp bedugásakor:
battery PNP0C0A:00 00000080 00000001
ac_adapter ACPI0003:00 00000080 00000001
battery PNP0C0A:00 00000080 00000001

A 'handler.sh'-ban láthatjuk, hogy az eseményeknek vannak szintjei. Az 'acpi_listen'-ből a megfelelő szintek pl.:

$1 ac_adapter
$2 ACPI0003:00
$3 00000080
$4 00000000
     00000001

Egész egyszerűen cseréljük ki a megfelelő szinteken lévő azonosítókat a miénknek megfelelőekre, így az eseményeink már jók is.

...

ac_adapter)
        case "$2" in
            ACPI0003:00)
                case "$4" in
                    00000000)
                        #echo -n $minspeed >$setspeed
                        #/etc/laptop-mode/laptop-mode start
                        /etc/acpi/powersave
                    ;;
                    00000001)
                        #echo -n $maxspeed >$setspeed
                        #/etc/laptop-mode/laptop-mode stop
                        /etc/acpi/unpowersave
                    ;;
                esac
                ;;
            *)  logger "ACPI action undefined: $2" ;;
        esac
        ;;
...


A hozzájuk kapcsolódó teendő bármi lehet. Érdemes írni rá egy szkriptet (pl. /etc/acpi/powersave), amiben összefoglaljuk mik fussanak le az egyes eseményekkor, majd hozzájuk rendelni.
Hogy mik fussanak le? Na ez egy nehéz kérdés. Ehhez lesz szükségünk a powertop és a powertop2 nevű alkalmazásokra. Ha root joggal indítjuk őket, elárulják mi fogyasztaja a legtöbb energiát a  rendszerünkben, sőt ajánlást is adnak, hogyan lehetne csökkenteni ezek fogyasztását. Legegyszerűbb szerintem, ha a powertop wiki oldalán lévő ajánlásokkal kezdjük. Nézzük meg melyikre van szükségünk, és melyikre nem, melyiket kell módosítanunk, és melyiket nem. Végül ne felejtsük el a szkriptünket futtathatóvá tenni, majd az acpid szót bebökni a /etc/rc.conf démonjai közé.

Pm-utils:

Ezzel lehet hibernálni, vagy felfüggeszteni a gépet. Igaz ekkor nem tudjuk használni, de akár pár perc erejére is érdemes lehet, ha épp nincsen szükségünk rá.
Hibernálni a pm-hibernate, felfüggeszteni a pm-suspend paranccsal tudjuk a gépet. Hibernálásnál szükségünk lesz legalább akkora Swap területre, mint a ram-unk.

PHC:

Amivel még lehet csökkenteni a fogyasztást, az a PHC. Ez az alkalmazás leszabályozza a processzorunkon lévő feszültséget. Sajnos sok processzor nem támogatott (például az enyém sem), de egy próbát megér.

Ennyit szerettem volna bemutatni. Természetesen van az energia megtakarításra más járható út is, pl. laptop-mode-tools, tehát amit mondtam nem szentírás. Remélem hasznos információkat találtok benne! Ha bárkinek lenne ötlete, javaslata, mivel lehetne javítani, kiegészíteni a cikket, minden javaslatot örömmel fogadok.

Sziasztok