A következő címkéjű bejegyzések mutatása: Linux. Összes bejegyzés megjelenítése
A következő címkéjű bejegyzések mutatása: Linux. Összes bejegyzés megjelenítése

2013. október 4.

Lemezcsere futásidőben

Hot-swap merevlemezeket cserélni nem is annyira egyszerű. Behelyezés után általában felismeri a rendszer de az eszköznevek (/dev/sdX) cserélődését még ilyenkor is figyelni kell például UUID alapján. Ha ki is akarunk venni akkor még több teendőnk van: Lecsatolni az összes érintett fájlrendszert, leállítani a lemezt és megszüntetni az eszközt. Ezen kívül nem illik például használatban lévő swap lemezt sem kitépni. Szerencsére ezt is lehet automatizálni.


A disk-eject.sh script a következőket végzi el helyettünk.
  • Azonosító (UUID), kötetcímke (LABEL) vagy eszköznév (/dev/sdXY) alapján is megkeres egy partíciót és a hozzátartozó lemezt.
  • Lecsatolja az összes lemezen lévő partíciót (unmount)
  • Ellenőrzi hogy biztosan nincs a lemezen cserehely (swap) partíció használatban, illetve nincs rajta aktív szoftveres raid partíció.
  • Leállítja a lemezt (spindown) és eltávolítja a blokkeszközt a rendszerből a lemez biztonságos eltávolításhoz.
Például ha egy tartalék backup1 nevű partíciót tartalmazó lemezt akarunk kivenni:
disk-eject.sh LABEL="backup1"
Ha az azonosító formátuma egyértelmű a LABEL="" vagy UUID="" meghatározás elhagyható, viszont egynél több találatra a script nem fog lefutni. Aktív swap vagy raid esetén nem emeli ki a lemezt. Ha mégis ezt szeretnénk a --force-swap és a --force-raid opcióval érhetjük el ezt. Ilyenkor a swap partíciókat swapoff parancssal leállítja, a raid tömbök alól viszont egyszerűen értesítés nélkül kitépi a lemezt.
#!/bin/bash
# (c) 2013 http://blog.webgyerek.net
# THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY

# Help
if [[ "$1" == "--help" ]] || [[ "$1" == "-h" ]]; then
echo "Eject a disk from the system: unmount, spindown, delete device"
echo
echo "Usage: $0 IDENTIFIER [--force-raid] [--force-swap]"
echo
echo "IDENTIFIER: something unique to find the disk device in blkid"
echo "--force-raid: !DANGEROUS! force ejecting even with raid volumes on disk in use"
echo "--force-swap: !DANGEROUS! force ejecting even with swap volumes on disk in use"
exit 0
fi

ident=$1

if [[ $2 == "--force-raid" ]] || [[ $3 == "--force-raid" ]]; then
forceraid="yes"
fi

if [[ $2 == "--force-swap" ]] || [[ $3 == "--force-swap" ]]; then
forceswap="yes"
fi

# Gettin device & check it's unique

blkid=$(blkid | grep -e "$ident")
devX=""
devY=""
while read -r line; do
devY=$(echo "$line" | cut -d : -f 1 | cut -c 6- | sed 's/[0-9]//g')
if [[ ! -z "$devX" ]] && [[ "$devX" != "$devY" ]]; then
echo "Abort: IDENTIFIER not unique" >&2
exit 1
fi
devX="$devY"
done <<< "$blkid"

if [[ -z "$devX" ]]; then
echo "Abort: IDENTIFIER not found" >&2
exit 1
fi

# Checking swap partitions
swap=$(cat /proc/swaps | grep -e "/dev/$devX" | cut -f 1)
if [[ ! -z "$swap" ]] && [[ $forceswap != "yes" ]]; then
echo "Abort: Swap partition in use $swap" >&2
fi

# If forced, try to swapoff
if [[ ! -z "$swap" ]]; then
echo "Warning: Swap partition in use $swap" >&2
# Swapoff
for part in $swap; do
swapoff $part || exit 4
done
fi

# Checking RAID
raid=$(cat /proc/mdstat | grep -e " $devX")
if [[ ! -z "$raid" ]] && [[ $forceraid != "yes" ]]; then
echo "Abort: RAID partition in use in $raid" >&2
exit 5
fi

# If forced we simply don't mind
if [[ ! -z "$raid" ]]; then
echo "Warning: RAID partition in use in $raid" >&2
fi

# Checking mounts
mounts=$(mount | grep /dev/$devX | cut -d " " -f 3)
for point in $mounts; do
umount $point
if (( $? > 0)); then
echo "Failed to unmount $point for $label!"
exit 2
fi
done

# Spin down disk
hdparm -Y /dev/$devX > /dev/null

# Remove device (sdX) from system
#echo 1 > /sys/block/$devX/device/delete

exit 0
A cserélt lemezeken lévő adatok kezeléséhez hasznos a partícióknak egyedi nevet adni, parancssorban ezt az e2label segítségével tehetjük meg. Ezután az adatokhoz való gyors hozzáféréshez további 2 scriptet javaslok.
A mediamount.sh az összes fel nem csatolt, címkével ellátott, szokásos (ext2,3,4 fat, fat32) fájlrendszert felcsatolja a /media/CÍMKE mappába.
A mediaclean.sh pedig ugyanitt takarít, az összes üres mappát törli, illetve -u paraméterrel meghívva az összes itt csatolt fájlrendszert le is választja.
#!/bin/bash

if [[ "$1" == "-h" ]] || [[ "$1" == "--help" ]]; then
echo "$0 [LABEL1, [LABEL2, ... ]]"
echo "Mount all simple (fat, fat32, ext2, ext3, ext4) partitions to /media/LABEL"
echo "LABELS: Only mount partitions with LABELS given"
exit 0
fi

if [[ ! -z "$*" ]]; then
labels="$*"
else
labels=$(blkid | perl -ne '/^.*?LABEL=\"(.*?)\".*?TYPE=\"(fat|ext[234]|fat32)\".*?$/ && print "$1 "' )
fi

for label in $labels
do
# Gettin device name
devXNUM=$(blkid | grep "LABEL=\"$label\"" | cut -d : -f 1 | cut -c 6- )

if [[ -z "$devXNUM" ]]; then
echo "No such label: $label" >&2
continue
fi

# Mount only if not alerady
ismnt=$(mount | grep "/dev/$devXNUM ")
if [[ ! -z "$ismnt" ]]; then
continue
fi

# Mounting
mkdir -p /media/$label
mount /dev/$devXNUM /media/$label
done
#!/bin/bash

if [[ "$1" == "-h" ]] || [[ "$1" == "--help" ]]; then
echo "$0 [-u]"
echo "Clean up in /media: remove empty dirs, optionally unmount filesystems"
echo "-u: Also unmount all filesystems in /media"
exit 0
fi

list=$(ls -A /media)
for dir in $list
do
mnted=$(mount | grep "/media/$dir")
# Mounting
if [[ ! -z "$mnted" ]] && [[ "$1" == "-u" ]]; then
umount /media/$dir
rmdir /media/$dir
fi
if [[ -z "$mnted" ]]; then
rmdir /media/$dir
fi
done

2013. augusztus 23.

Telepítés Samsung S7 Chronosra

Saját számítógépemet lecserélve egy új Samsung Series 7 NP700Z3C típusú gépen üzemeltem be megszokott operációs rendszereimet. A gép teljesítményben és kivitelezésben kiváló, de Windwos 8-as rendszerrel érkezik. Az új eszközöknek köszönhetően a Linux támogatással, a belső "hibrid" merevlemezfelépítés miatt pedig a Windows 7 telepítésével is meg kell küzdeni de a végeredmény egyértelműen megéri.

Lássuk a telepítés menetét többé-kevésbé részletesen kifejtve:

2013. június 2.

GDM3 felhasználó-lista letiltása

A GNOME3 (Shell) környezet, alapértelmezetten olyan témával érkezik ami bejelentkezéskor listázza az elérhető felhasználókat. Ez sokfelhasználós gépeknél és tartományi bejelentkezésnél nem praktikus, és bizonyos esetekben biztonsági problémának is tekintik.
Letiltásához a /etc/dconf/db/gdm.d mappában kell a 90-debian-settings nevű (eredetileg üres) fájlt szerkeszteni. Tartalma:
[org/gnome/login-screen]
disable-user-list=true
banner-message-enable=true
banner-message-text='Bejelentkezés a számítógépre'
A fájl 1. sora a beállítási szekció meghatározása (bejelentkező-képernyő)
A 2. sor tiltja a felhasználók listázását, visszakapcsoláshoz hamisra (false) állítható.
A 3. és 4. sorral bejelentkező üzenetet határozhatunk meg ami a felhasználónév mező felett jelenik meg. A banner-message-enable hamisra állításával (false) letiltjuk az üzenetet, ekkor az utolsó sor elhagyható.

Amennyiben a fenti megoldás nem működne érdemes lehet a /usr/share/glib-2.0/schemas mappa fájlait átnézni, illetve a /etc/gdm/custom.conf vagy /etc/gdm/greeter.settings fájlok szerkesztésével foglalkozni. A beállítások életbe lépése elég esetleges, egy pontos specifikációt vagy magyarázatot a működésről én is szívesen látnék.

2013. május 26.

Ubuntu 13.04 energiatakarékosság

Egy laptop telepítése kapcsán mindig felmerül hogy mit kell tenni egy laptop telepítése után hogy a Linux rendszer takarékosan bánjon az energiával. Ezeket futottam át a saját NP700Z3C gépem telepítése kapcsán, de a beállítások bármilyen laptopon hasznosak lehetnek.

Az említett gépen az eredeti ~1,5 órás Linux alatt üzemidőt ~5 órára sikerült növelni, a vezeték nélküli hálózat és a gép folyamatos használata mellett! Az elérhető időtartam tehát a gyárival nagyjából azonos - a beállítások elvégzése nélkül viszont csapnivaló.

Friss rendszermag

A legnagyobb és utólag legnehezebb orvosolható kritérium hogy a jó energiatakarékossághoz viszonylag friss rendszermagra volt szükség. Az összes további beállítást elvégeztem Debian Wheezy alatt is (Linux 3.2), de akkumulátoros üzemidőnek csak nagyjából a felét-kétharmadát sikerült elérni az Ubuntu 13.04-es (Linux 3.8) változatához képest.

Grafikus meghajtók

A legnagyobb fogyasztó, és így a legfontosabb energiatakarékossági beállítás is a grafikus kártya. Az NP700Z3C-t nVidia Optimusal szerelik, ehhez Linux alatt a Bumblebee projekt nyújt támogatást. A módszer lényege hogy a gépben található két kártya között elosztja a feladatokat és lekapcsolja a felesleges grafikus erőforrásokat.
Ubuntu alatt a telepítéshez (külön tárolóból) kész csomagok állnak rendelkezésre:
sudo add-apt-repository ppa:bumblebee/stable
sudo apt-get update
sudo apt-get install bumblebee bumblebee-nvidia virtualgl linux-headers-generic
Az Ubuntu Wiki leírása a Bumblebeeről (angol)

Beépített illesztőprogramok

A linux rendszermag a legtöbb periféria energiatakarékos módjához tartalmaz támogatást, ezek legtöbbje viszont kompatibilitási okokból alapértelmezetten le van tiltva. A letiltott funkciókat a rendszerindítást paraméterezve tudjuk engedélyezni.
Az Ubuntu Wiki leírása az energiatakarékossági funkciókról (angol)

PCIe aktivitás-kezelés

A PCIe portokon való energiatakarékoskodás. Ha valami miatt nincs alapértelmezetten bekapcsolva, kézzel megtehetjük:
pcie_aspm=force 
A rendszer alapesetben megpróbál optimálisan energiát megtakarítani. Ezt tovább szigoríthatjuk:
pcie_aspm.policy=powersave
Ekkor minden esetben a lehető legkisebb fogyasztású üzemmódot fogja használni. Ez okozhat némi teljesítmény-csökkenést.

Intel i RC6: Processzor feszültségcsökkentés

Az Intel i sorozatú mobil processzorai képesek lecsökkentett feszültségszinten várakozni amikor nincsen számítási feladat. Ennek a funkciónak 3 szintje (RC6, RC6p, RC6pp) létezik. A mélyebb szintek alacsonyabb feszültséget, tehát több energiamegtakarítást jelentenek. Alapértelmezetten csak az RC6 engedélyezett, mert az RC6p és RC6pp bizonyos gépeken problémát okozhatnak.
A funkció az i915.i915_enable_rc6 paraméterrel állítható,
0: letiltás,
1: RC6 alapértelmezett szint,
3: RC6, RC6p: mély feszültségek engedélyezése,
7: RC6, RC6p, RC6pp: minden feszültségszint engedélyezése
Érdemes a legnagyobb olyan szintre állítani amelyen nem jelentkeznek problémák. Például:
i915.i915_enable_rc6=7

Intel LVDS downclock: Órajel csökkentés

Az LVDS órajel csökkentés engedélyezése. Csakúgy mint az előbbi, bizonyos gépeken hibákat okozhat, ha a képernyő vibrálását tapasztaljuk, próbáljuk meg ezt kikapcsolni. Engedélyezés:
i915.lvds_downclock=1

Intel processzor energiatakarékosság

Általános energiatakarékossági funkciók be vagy kikapcsolása intel processzorokon. Az alapértelmezett érték változó, érdemes lehet kézzel bekapcsolni. Paraméter:
i915.powersave=1

Intel hangkártya takarékosság

Ha a hangkártya nincsen használatban, várakozó üzemmódba lehet kapcsolni, így energiát takarítva meg. Ennek bekapcsolásához két paraméter szükséges.
A takarékoskodási funkció bekapcsolása:
snd_hda_intel.power_save=1
Az időlimit, ahány másodperc csend után a hangkártya takarékos üzemmódba lép: snd_hda_intel.power_save=1

Paraméterek beillesztése

A kiválasztott rendszermag-paraméterek beillesztéséhez a /etc/default/grub fájlt kell szerkeszteni. A GRUB_CMDLINE_LINUX_DEFAULT kezdetű sorban adhatunk hozzá beállításokat. Például:
# Eredeti rendszerindítási paraméterek
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
# Energiatakarékossági funkciók engedélyezve
GRUB_CMDLINE_LINUX_DEFAULT="pcie_aspm=force i915.i915_enable_rc6=7 i915.lvds_downclock=1 i915.powersave=1 snd_hda_intel.power_save_controller=1 snd_hda_intel.power_save=1 quiet splash"
Mentés után az sudo update-grub paranccsal frissíthetjük a rendszerindítót az új beállításokra.
Ha valamelyik beállítás gondot okozna, az indítóban (GRUB) e betűt nyomva egy alkalomra szerkeszthetjük ezeket. A paraméterek törlése után F10-el indítható a rendszer de a fenti szerkesztést és frissítést ekkor is el kell végezni, mert a rendszer következő alkalommal ismét az itt megadott beállításokkal fog indulni.

Energiatakarékossági démonok

Az illesztőprogramok megfelelő beállításán kívül feltétlenül szükség van egy olyan háttérszolgáltatásra ami az eszközök energiatakarékosságát kezeli. Az Ubuntu eleve tartalmaz ilyet (pm-utils) ezen kívül több program elérhető tárolókból is (laptop-mode-tools) de egy frissebb és összefogottabb megoldást ad a TLP csomag. Ez kezeli többek között az időlimiteket (dirty timeout, spindown timeout) a processzorok turbó és alvó (idle) üzemmódjait, valamint a feladatok energiatakarékos elosztását (process scheduler) valamint a csatlakoztatott perifériák (USB, PCIe, SATA) üzemmódjait.

Ubuntu alatt a ppa:linrunner/tlp tárolóból telepíthető, de ha a laptop-mode-tools telepítve van, azt előbb törölni kell.
#sudo apt-get purge laptop-mode-tools
sudo apt-add-repository ppa:linrunner/tlp
sudo apt-get update
sudo apt-get install tlp
sudo tlp start
A szolgáltatást a legtöbb esetben ezek után nem kell konfigurálni, amennyiben mégis szeretnénk a /etc/default/tlp fájl szerkesztésével tehetjük ezt meg. A rendszer energiatakarékossági információi és a szolgáltatás állapota a tlp-stat paranccsal kérdezhető le.

Kézi hajtányos energiastatisztika

Ha az automatikus megoldásokon kívül szeretnénk az energiakezeléshez nyúlni, akkor a powertop nevű segédeszközre van szükség.
sudo apt-get install powertop
sudo powertop
A program az akkumulátor adataiból dolgozik, ezért elsősorban a gépet hálózatról leválasztva érdemes használni. Áttekintést kaphatunk a legtöbbet fogyasztó eszközökről, programokról és a processzor állapotairól. Ezen kívül a Tunnables fül alatt megnézhetjük és állíthatjuk egyes eszközök energiatakarékossági üzemmódját. Good (jó) jelöli az energiatakarékosságra, Bad (rossz) jelöli a teljesítményre törekvő eszközöket. Az üzemmódokat át is lehet kapcsolni.

A cikkben található példák és instrukciók Ubuntu 13.04 Raring Ringatil GNOME változatán és Samsung Series 5 Chronos NP700Z3C-S02HU gépen lettek tesztelve.

2012. december 10.

SSD beállítások linuxon

Egyre elterjedtebbek a merevlemezek helyén az új típusú, forgóalkatrész nélküli adattárolók, az SSD-k. Ezek a megoldások másképp viselkednek mint a fizikai lemezek. A merevlemezekhez képest rettentő gyorsan képesek adatokat írni és olvasni, ugyanakkor az adatok írása elhasználja a lemezt. Éppen ezért fontos,  hogy a behelyezés után helyesen beállítsuk a működését, így növelve az élettartamát és ezzel együtt fenntartva a sebességét.

Törlés: trim

A merevlemezekről, általános esetben az adatokat valójában nem töröljük, csak töröltként jelöljük. Ezeket a jelöléseket pedig csak az operációs rendszer dolgozza fel, az adattároló nem tudja, hogy az adat éppen törölt-e vagy sem. A merevlemezeknek működés szempontjából ez teljesen közömbös is.

Az SSD meghajtókba viszont a flash chipek sajátosságainak kezelésére olyan optimalizáló algoritmusokat építenek be, amiknek a működésükhöz tudniuk kell hogy mik az értékes adatok a lemezen, és mi került törlérse. Azt hogy ez az információ a tárolóeszközig eljusson, Linuxok alatt a trim beállítással érhetjük el.

Egy fájlrendszeren a trim támogatásának bekapcsolásához a /etc/fstab fájlban a discard szót kell hozzáadni. Érdemes ezt megtenni minden SSD-n lévő fájlrendszerrel.

Ez a fájl így nézhet ki például:
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc nodev,noexec,nosuid 0 0
# / was on /dev/sdb5 during installation
UUID=00000000-0000-0000-0000-000000000000 / ext4 discard,errors=remount-ro 0 1
# swap was on /dev/sdb1 during installation
UUID=00000000-0000-0000-0000-000000000000 none swap sw 0 0
Itt a 10. (kiemelt) sorban látható a discard szó elhelyezése az <options> oszlopban.

Tipp: Ha nem ismert a fájlrendszerek szerkezetét, és csak SSD-re van telepítve a rendszer, gyors megoldás minden sorban, ahol a <type> oszlopban ext4 szerepel, hozzáadni a discard paramétert.

Megnyitások ideje: noatime

A fájlrendszerek egy másik sajátossága, hogy akárhányszor megnyitunk egy fájlt, felírja az aktuális időpontot mint "az utolsó olvasás idejét". Ez azt jelenti, hogy ahányszor csak olvasunk valamit a lemezről, írunk is rá. Ez már a merevlemezeknél is gondot jelenthet azok sebességében, az SSD típusú háttértáraknak viszont az élettartamát is jelentősen megrövidíti. Ennek az adatnak kevés kivétellel csak statisztikai jelentősége van, ezért bátran kikapcsolható akár hagyományos merevlemezen is.  Az előzőhöz hasonlóan, a noatime opciót is az fstab fájlban lehet bállítani. A példafájl 10. sora kiegészítve:
UUID=00000000-0000-0000-0000-000000000000   /               ext4    noatime,discard,errors=remount-ro 0       1
Merevlemezekhez a noatime használható, de a fenti sorban jelen lévő discard opció nem!

Ha a noatime opció használata gondot okozna valamely programnak, köztes megoldásként használható helyette a relatime opció is. Így az utolsó olvasás dátuma csak akkor változik meg, ha az régebbi volt mint az utolsó módosítás dátuma. Ezzel a beállítással is rengeteg lemezírás spórolható meg, de helyesen tudnak működni azok a programok is, amiknek tudniuk kell, hogy egy fájlt tartalmát kiolvasták-e már az utolsó módosítás óta.

Cserehely: swappiness=0

Közismert tanács hogy a Linux swap meghajtóját nem szabad SSD-re tenni, mert az  nagy mennyiségű írással és olvasással jár. De hová máshová érdemes tenni a cserehelyet mint a leggyorsabb háttértárra? Nyilvánvalóan lassabb lesz egy rendszer ha a memória kiírására kényszerül, különösen akkor ha ezt egy lassú meghajtóra kell tennie.

Megoldásként elhelyezhető a cserehely az SSD-re, de a rendszerben be kell állítani hogy lehetőleg ne használja. Így gyors marad a hibernálás funkció, gördülékeny a rendszer és a meghajtót is csak akkor használja, ha szükséges.

A swap használatának beállításához a /etc/sysctl.conf fájlban helyezzhető el a vm.swappiness = 10 sor.

A számérték ízlés szerint állítható 1 és 100 között, én a 10-es értéket javasolom. A magasabb szám jelenti az intenzívebb cserehely használatot. A 60 feletti értéket asztali gépen semmiképpen nem érdemes használni, ez extrém takarékosságot okoz, a swap kárára így a rendszert is lassítja és a háttértárakat is gyilkolja.

2012. október 22.

Ubuntu altatása

A számítógépeket kikapcsolás helyett alvási üzemmódba is lehet tenni: Ilyenkor nem kell bezárni a futó programokat, azok visszakapcsolás után is az altatás előtti állapotban lesznek. Erre több módszer is van, különböző előnyökkel és hátrányokkal az Ubuntu viszont alapértelmezésben csak egyet engedélyez. Lássuk a többit (is).

Altatás

Az Ubuntu alapértelmezett üzemmódja. Ilyenkor a gépben minden eszköz kikapcsol, de az adatok a számítógép memóriájában maradnak, ezért ennek táplálásához áramot fogyaszt. Amennyiben a táplálás nem szűnik meg a gép villámgyorsan indul hiszen minden ott van a memóriában, de ha a gép áram nélkül marad, az el nem mentett adatok elvesznek.

Hibernálás

A rendszer kikapcsolás előtt a memóriát lementi a merevlemezre, és így minden eszközt kikapcsol, és a visszakapcsolásig egyáltalán nincs szüksége áramra. Cserébe a számítógép lassabban indul, mert bekapcsoláskor a memória teljes tartalmát be kell olvasni.

A hibernálás kipróbálása:

Elsőként tesztelni szükséges, hogy a számítógéppel kompatibilis-e a hibernálás funkció. Ehhez néhány programot futva hagyva a háttérben, kell a terminálban kiadni:
sudo pm-hibernate
A jelszó megadása után a számítógép kikapcsol. Visszakapcsolás után ha megnyitva maradtak az alkalmazások, akkor a hibernálás működik.

A hibernálás engedélyezése:

Ahhoz hogy a hibernálás egy kattintással is elvégezhető legyen, engedélyezni kell azt felhasználók számára. Ehhez egy új /etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla fájlt kell lértehozni:
sudo -s
rm /etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla
echo "[Enable Hibernate]
Identity=unix-user:*
Action=org.freedesktop.upower.hibernate
ResultActive=yes" >> /etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla
Ezek után ki majd visszajelentkezés szükséges, hogy a hibernálás gomb megjelenjen az altatás fölött.

Hibrid alvás

A Linux rendszermag a 3.6-os változattól támogatja a hibrid alvást: A memória tartalmát kiírja a lemezre, és megtartja a memóriában is. Így ha az alvás ideje alatt volt áramellátás, akkor a gép ugyan olyan gyorsan ébred mint alvásból, ha viszont valamiért nem jutott volna áramhoz, az adatok akkor sem vesznek el, bekapcsoláskor a merevlemezről visszamásolja őket (mint a hibernálás esetén).

Sajnos az Ubuntunak még nincsen 3.6-os rendszermagra építő változata ezért itt a hibrid alvás nem ezt jelenti: A jelenleg elérhető hibrid alvás funkcióval a rendszer először hagyományos alvó állapotba kerül, tehát az adatok csak a memóriában lesznek meg, majd ha megadott ideig nem ébresztették fel a gépet akkor magától felébred és automatikusan azonnal lehibernálja magát.

Tehát hibrid alvás esetén a gép egy megadott ideig hagyományos alvásba merül, utána pedig hibernálva van. A kettő között bekapcsol, és átmenti az adatokat a memóriából a merevlemezre!

Hibrid alvás kipróbálása:

Hibrid alvást rendszergazdaként a pm-suspend-hybrid paranccsal lehet kezdeményezni, ez előtt azonban érdemes beállítani az alvás időtartamát is (azaz hogy mennyi idő után váltson hibernálásba alvásból.) Ehhez a /etc/pm/config.d/00-suspend-hybrid fájl írása szükséges
sudo -i
rm /etc/pm/config.d/00-suspend-hybrid
echo "PM_HIBERNATE_DELAY=10" >> /etc/pm/config.d/00-suspend-hybrid
Ezek után a hibridalvás parancsát kiadva a gép előbb elalszik, majd 10 másodperc múlva ismét láthatóan felébred és lehibernálja magát. Mindezek után bekapcsolható a gép, és ha ez is sikeresen megtörténik akkor a hibrid alvás működik.
sudo pm-suspend-hybrid

Hibrid alvás használata hibernálás vagy alvás helyett

A hibrid alvás használható a hibernálás vagy alvás funkció helyett automatikusan akár pl. a képernyő lezárásakor is. Asztali gépeken a hagyományos alvás helyett ezt javaslom, de hordozható eszközöknél ne felejtsünk el belegondolni, hogy mi történik  ha elcsomagolva, vagy a táskában felébred!

Ahhoz hogy az alvás vagy a hibernálás helyett a hibrid alvás kerüljön használatba, szintén a /etc/pm/config.d/00-suspend-hybrid fájlt kell módosítani.
sudo -i
rm /etc/pm/config.d/00-suspend-hybrid
echo "# Always use suspend_hybrid instead of suspend
if [ "$METHOD" = "suspend" ]; then
METHOD=suspend_hybrid
fi
PM_HIBERNATE_DELAY=7200
" >> /etc/pm/config.d/00-suspend-hybrid
Ne felejtsük el a hibernálás előtti várakozás idejét megfelelően beállítani. (Itt 7200 mp) A fájl elmentése után minden funkció ami eddig az alvás üzemmódot indította, ezentúl hibrid alvásba teszi a gépet. Az alvás helyett a hibernálás üzemmód hibrid alvásra cserélyéhez, a suspend feltételt szükséges hibernate-ra cserélni:
sudo -i
rm /etc/pm/config.d/00-suspend-hybrid
echo "# Always use suspend_hybrid instead of hibernate
if [ "$METHOD" = "hibernate" ]; then
METHOD=suspend_hybrid
fi
PM_HIBERNATE_DELAY=7200
" >> /etc/pm/config.d/00-suspend-hybrid
Ezek a változatások automatikusan érvénybe lépnek, nem szükséges újraindítani a rendszert. Ez szinte határtalan lehetőségeket nyit: a scriptek kombinálásával használható például laptopt-mode vagy cron is annak eldöntésére hogy aktuálisan milyen alvásba kerüljön a gép.

2012. október 12.

Európai WiFi csatornák használata Ubuntuval

A WiFi szabvány 13 különböző csatornát állapít meg használatra a 2,4Ghz-es frekvencia sávban. Ezek általában mind szabadon használhatóak, de sajnos Angliában a 12, 13-as sávok használata tilos. Ennek mellékhatása, hogy bizonyos eszközök és szoftverek néha tévedésből letiltják ezek használatát olyankor is, amikor legális lenne. A Linux esetében ez a probléma egyetlen paraméter átállításával orvosolható.

Az Ubuntu 12.04-es változata elméletileg magától, az időzónától és valamilyen geolokációs adattól függően alapján állítja be hogy a felső csatornák használhatóak-e. Ez nálam nem sikerült neki. (Talán a Unity->Gnome3 csere zavarta meg a működést.) Ennek következtében kézzel állítottam be felsőbb csatornák használatát.

Ehhez a /etc/modprobe.d/ mappába kell egy új fájlt felvenni, ami tartalmazza a
cfg80211 ieee80211_regdom="EU"paramétert. Terminálban:
sudo -i
# Jelszó megadása
rm wifiregion.conf
echo 'options cfg80211 ieee80211_regdom="EU"' >> /etc/modprobe.d/wifiregion.conf
A módosítások után a rendszer újraindítása szükséges a csatornák használatához.

2012. augusztus 12.

GNOME Shell Kiegészítők

Egy korábbi bejegyzésben már írtam a GNOME Shellről általánosságban, most egy saját kiegészítő elkészítésével fogok foglalkozni. Ezek, bár a jól ismert JavaScript íródnak, elég nehezen kezelhetőek, ugyanis a shellben elérhető függvényekhez és erőforrásokhoz szinte semmilyen dokumentáció nem készült.

Kompatibilitás

A GNOME csapat a Shell fejlesztése közben több visszafelé nem kompatibilis változtatást vezetett be. A 3.1 és a 3.4-es verzió között alapvető változások történtek a kiegészítők által használt kódokban. Ebben a leírásban végig a GNOME Shell 3.4.1-es, az Ubuntu 12.04 LTS által szállított változatát fogom használni.
Ennek telepítése:
sudo apt-get install gnome-shell gnome-shell-common gnome-tweak-tool

Első lépések

A felhasználók saját GNOME Shell kiegészítői a saját mappájukban, a ~/.local/share/gnome-shell/extensions helyen találhatóak. Minden kiegészítőnek szüksége van egy egyedi névre úgynevezett UUID-re. Ennek a formája e-mail cím szerű: alkalmazásneve@a_fejlesztő_saját_egyedi_kódja. Én a helloworld@webgyerek.net azonosítót használom.

Egyedi azonosító birtokában a GNOME Shell egy segédparancsa létrehozza az alkalmazást:
gnome-shell-extension-tool --create
A következő kérdéseket teszi fel:
Name: Az alkalmazás ember által olvasható neve (Hello Világ)
Description: Egymondatos leírás (Első Shell kiegészítőm)
Uuid: A korábbiakban tárgyalt egyedi azonosító (helloworld@webgyerek.net)

A válaszok megadása után A GNOME Shell Extension Tool egy Helló Világ programot készít az összes szükséges fájllal együtt. Az új kiegészítő kipróbálásához engedélyezni kell azt, majd a újratölteni a GNOME Shellt:
gnome-shell-extension-tool -e helloworld@webgyerek.net
A shell legegyszerűbben az <ALT>+F2 futtatás ablakba r betűt írva és entert ütve indítható újra. Az alkalmazásaink nem fognak bezáródni, csak a Shell tölt be ismét. A GNOME Shellben a jobb felső sarokban (a hang ikontól balra) megjelenik két fogaskerék, rájuk kattintva pedig a Hello, world! szöveg villan fel szürke dobozban a képernyő közepén. Ha ki akarnánk kapcsolni a kiegészíőnket akkor a következő paranccsal megtehetjük. Utána szintén újratöltés lehet szükséges.
gnome-shell-extension-tool -d helloworld@webgyerek.net

Kiegészítők felépítése

Az új kiegészítő a felhasználói kiegészítők között található: ~/.local/share/gnome-shell/extensions/helloworld@webgyerek.net (Az UUID a létrehozáskor megadott!) A mappa teljes tartalmával együtt maga a kiegészítő. A következő fájlok találhatóak benne:

extension.js
Ebben található a kiegészítő JavaScript kódja. A tartalmazott kód kerül programkódként felhasználásra ha a kiegészítőt bekapcsolják.
metadata.json
Ebben a fájlban találhatóak a kiegészítő adatai, például (a létrehozáskor parancssorban megadottak), valamint néhány más beállítás és tulajdonság, mint például a GNOME Shell verziószáma amivel a kiegészítő működik.
stylesheet.css
Ha a kiegészítő használ valamilyen egyedi elemet, akkor ebben a fájlban tárolható a hozzá tartozó megjelenés és formázás. Ha nincs ilyen, ez a fájl nem kötelező.

Az extensions.js programfájlnak 3 függvényt kötelező tartalmaznia ahhoz hogy a kiegészítő üzemképes legyen.
Az init() függvény akkor fut le amikor a kiegészítő először betöltődik a shellbe. Ebben kell elhelyezni azokat a műveleteket amik előkészítik a kiegészítőnek szükséges dolgokat, de nem változtatnak sem a megjelenésen, sem a működésen.
Az enable() függvény akkor fut le, amikor a kiegészítőt bekapcsolják. Ez mindig később történik mint az init() lefutása. Ebben kell elhelyezni azokat a kódokat amik módosítják a megjelenést vagy a működést.
A disable() függvény pedig akkor kerül futtatásra, amikor kikapcsoljásra kerül a kiegészítő. Minden változtatást el kell tüntetnie amit az enable() végzett.

A forráskód

A kiegészítő forrásának elkészítéséhez természetesen tudni kell, hogyan működik a GNOME Shell felülete. Sajnos ez meglehetősen aluldokumentált:

A Shell a felület megrajzolásához mindenhol egy Clutter nevű alprogramot használ, ennek segítségével egy 2.5D térben helyezhetőek el elemek. Minden elem egy ún. actor, olyasmi mint a weben egy div blokk. Ezeknek vannak fajtái, és egyeseknek lehet további tartalma (szöveg, ikon, vagy újabb actor) valamint vannak tulajdonságaik (méret, kattinthatóság, ...).
A legfontosabb hogy minden aktornak van egy connect metódusa, amivel különböző eseményekhez rendelhetőek saját JavaScript függvények futtatásai.

Sajnos (a cikk írásakor) a Clutterhez semmilyen a JavaScript felületet bemutató leírás nincs. Elvileg a működés és a metódusok ugyan azok mint C nyelven, úgyhogy az eredeti Clutter dokumentáció használható, több kevesebb sikerrel. A feladatot bonyolítja hogy a kiegészítők valójában nem a Clutterrel dolgoznak.

A GNOME csapat készített egy újabb virtuális réteget, ami a kiegészítő JavaScript kódokon kívül automatikusan alkalmazza a CSS tulajdonságokat is az actorokon. Erre a rétegre St-ként hivatkoznak a kódokban. A több dokumentálatlan közvetítőt rétegnek köszönhetően, végeredményben legegyszerűbb a kész kódokból kitapasztalni az actorok működését. Ehhez viszont van segítség, ugyanis a Shell felülete ugyanazon a nyelven íródott mint a kiegészítők. A kódok áttekintéséhez a /usr/share/gnome-shell/js/ui mappát lehet érdemes tanulmányozni.

A "Helló Világ!" kiegészítő forráskódja, amit az érthetőség kedvéért megjegyzésekkel egészítettem ki:
//Az összes szükgéses lib betöltése 
const St = imports.gi.St; //Ez az aktorok fölé húzott, CSS-t alkalmazó réteg
const Main = imports.ui.main; //Ebben vannak a Shell alapelemei (felső panel, monitorok, dash, stb)
const Tweener = imports.ui.tweener; //Ezzel a segéddel lehet animációkat készíteni

let text, button; // A text és a button az egész kiegészítőben elérhető közös változók

function _hideHello() { //Ez a függvény fogja letörölni a "Hello, world!" felirat actorát
Main.uiGroup.remove_actor(text); //Letöröli a címkét a monitorról
text = null; //És megszünteti a létezést (hogy új kattintásnál újragyártsa majd)
}

function _showHello() { //Ez a függvény rajzolja ki a "Hello, world!" felirat actorát
//Ezek a részek új Helló feliratot csinálnak. Ha éppen még látszik, nem futnak le
if (!text) {
//Ha épp nincs felirat, készít egyet
//Ez egy címke típusú actor lesz
text = new St.Label({ style_class: 'helloworld-label', text: "Hello, world!" });
Main.uiGroup.add_actor(text); //Hozzáadja a címkét a monitorhoz
}
//Ezek a részek az animációt állítják, minden kattintáskor lefutnak, hogy újra kezdődjön.
text.opacity = 255; //Actor kezdeti átlátszósága

let monitor = Main.layoutManager.primaryMonitor; //Elsődleges monitor beszerzése



//Elhelyezzi a címkét a monitor közepére
text.set_position(Math.floor(monitor.width / 2 - text.width / 2),
Math.floor(monitor.height / 2 - text.height / 2));



//Lefuttatja az animációt, az animáció végén meghívja a _hideHello-t
Tweener.addTween(text,
{ opacity: 0,
time: 2,
transition: 'easeOutQuad',
onComplete: _hideHello });
}

function init() { //Kötelező függvény, lásd a leírásban
//Készít egy új gombot két aktorból (ez lesz a két fogaskerék gombja)
//A külső aktor (St.Bin) lesz a gomb, készít egy másik actort, amiben az ikon van
button = new St.Bin({ style_class: 'panel-button',
reactive: true,
can_focus: true,
x_fill: true,
y_fill: false,
track_hover: true });
let icon = new St.Icon({ icon_name: 'system-run',
icon_type: St.IconType.SYMBOLIC,
style_class: 'system-status-icon' });

button.set_child(icon); //Beletesszi az ikont a gombba
button.connect('button-press-event', _showHello); //Kattintásra történjem meg a _showHello
}

function enable() { //Kötelező függvény, lásd a leírásban
//Beszúrja a gombot a jobb oldali doboz 0. helyére (itt van a fogaskerék ikonos gomb)
Main.panel._rightBox.insert_child_at_index(button, 0);
}

function disable() { //Kötelező függvény, lásd a leírásban
//Kitöröli a gombot a helyéről
Main.panel._rightBox.remove_child(button);
}
A kód JavaScript, de a webhez képest felmerül egy szembetűnő újdonság: A kiegészítőkben nem a var kulcsszóval lehet definiálni változókat, az ilyenek ugyanis az egész Shellben elérhetőek lesznek. Helyette a let szóval definiálhatóak, ami csak az éppen aktuális blokkban és annak alblokkjaiban teszi őket elérhetővé. A JavaScript nyelvhez a GNOME csapat ezt a Mozillás leírást javasolja.

További források

A Shell központi UI forrásán kívül a GNOME Shell Extensionsról letöltött egyszerűbb kiegészítők forráskódja kíváló példa anyag. További olvasmány pedig angol nyelven található a témában:

2012. augusztus 8.

GNOME Shell

Amióta a GNOME 2 támogatása megszűnt, a csapból is az folyik, hogy milyen asztali környezetet érdemes használni helyette. Néhány hónapon belül megjelent a Unity, a MATE és a Cinnamon is alternatívaként a korábbi pehelysúlyú XCFE, LXDE mellett. A hivatalos utód a GNOME Shell viszont annál kevesebb figyelmet kapott, ezért ezzel foglalkozom egy bejegyzés erejéig.

Telepítés

A GNOME csapat kedvenc rendszere minden bizonnyal a Fedora. Ennek az alapértelmezett asztali környezete a GNOME Shell, így nincs teendő a telepítéssel.

A Debian alapú rendszerek kedvelőinek a legegyszerűbb az Ubuntu 12.04 LTS használata. A GNOME Shell itt elérhető a hivatalos tárolókból is, de egy frissebb változatot ad a Gnome3 csapat nem hivatalos tárolója (ppa:gnome3-team/gnome3):
sudo add-apt-repository ppa:gnome3-team/gnome3
sudo apt-get install gnome-shell
Az első sor elhagyható, de nem javaslom. Ekkor a hivatalos, régebbi verzió került telepítésre.

A telepítés után ki kell jelentkezni, majd a bejelentkező képernyőn a felhasználónév melletti ikonra kattintva a GNOME-ot választani az Ubuntu helyett. Bár a GNOME-nak van saját bejelentkező képernyője, az Ubuntu esetében ez a telepítés után is a LightDM marad. Ez kifejezetten hasznos akkor, ha több asztali környezet is van használatban, így pusztán a bejelentkezéshez nem kerülnek betöltésre a GNOME függőségek.

A GNOME Shell elképzelés

Az új felület felrúgja megszokásokat és a grafikus környezet használatát két részre bontja: Az ablakok kezelésére, alkalmazások indítására (ez a Tevékenységek nézet), és maguknak az alkalmazásoknak a használatára. Részletesebb leírás helyett ezt a bemutató videót érdemes megnézni.

Véleményem szerint az elképzelés és a módosítások igazán jók, viszont felvet néhány problémát a konkrét megvalósítás.

A GNOME csapat egyik régóta kitűzött célja az egyszerűség, a minél kevesebb "felesleges és bonyolult" beállítás megvalósítása. Ez a gyakorlatban úgy jelenik meg hogy az új környezetnek alapértelmezés szerint szinte nincsenek beállításai. A testreszabást az új kiegészítő rendszer (Gnome Shell Extensions) segítségével szeretnék megoldani, ezek azonban sajnos még messze nem kiforrottak.

Beállítások

Elsősorban a "már megszokott" beállítások kezeléséhez készült el a GNOME Tweak Tool. Az eszköz alapesetben nem a GNOME Shell része, külön kell telepíteni. Telepítés után az indítóban Speciális beállítások néven jelenik meg.
sudo apt-get install gnome-tweak-tool
Ennek a segítségével sokminden átállítható:
    Gnome Tweak Tool képernyőkép
  • Műveletek az ablakdekoráción történő különböző kattintásokkor (kicsinyít, hátraküld, stb)
  • Ablakok aktiválása (kattintásra, fókuszálásra, késleltetve)
  • Betűkészlet, méret, alávágás, élsimítás tulajdonságai
  • Asztal kezelése (ikonok használata az asztalon)
  • A shell dátum és idő megjelenítési formátuma
  • Ablakkezelő gombok helyzete (bezár, minimalizál, maximalizál)
  • Művelet a noteszgép fedelének lezárásakor
  • GTK téma, ikonkészlet, shell téma* beállítások
  • Kiegészítők ki-be kapcsolása**
* Ehhez egy további shell kiegészítő telepítése is szükséges.
**  Ez kiemelten hasznos, ugyanis a kiegészítők ki-be kapcsolása alaphelyzetben csak online működik.

Kiegészítők

Amit a GNOME Tweak Tool nem tud állítani, arra a kiegészítők között lehet megoldást keresni. Ezek a Shell megjelenését tetszőlegesen átalakíthatják, illetve szinte teljes  működését is megváltoztathatják.

A Shell 3.2-es változatáig nincs lehetőség automatikus telepítésre, a kiegészítőket kézzel, kicsomagolva kell elhelyezni a fájlrendszeren. A közös gyűjtemény a /usr/share/gnome-shell/extensions könyvtár, a felhasználók saját kiegészítőiket a  ~/.local/share/gnome-shell/extensions mappában helyezhetik el.

A mappák nem változatlanok, de a 3.2-es változattól fölfelé egy új lehetőség jelent meg. A jóváhagyott kiegészítők az extensions.gnome.org címről egy kattintással "bekapcsolhatóak". Ez magában foglalja az automatikus letöltést és telepítést is. Ugyanezen a weblapon lehetőség van a telepített kiegészítők kezelésére és törlésére is az Installed Extensions fülön. Amennyiben viszont éppen nincs internetkapcsolat, a már telepített kiegészítők kezelése sem működni. Ilyenkor a GNOME Tweak Tool használható a ki-/bekapcsoláshoz.

A kiegészítők kezelése egyelőre(?) csak Mozilla Firefox böngészővel működik!

Sajnos kiegészítőből még elég kevés van ezért érdemes lehet egyszer átfutni az összeset, esetleg feliratkozni a GNOME Shell kiegészítők RSS csatornájára. Példaképpen kiemelnék néhány hasznos darabot:
  • Window list - Hozzáad egy a régi tálcához hasonló listát a felső panelhez. Így Tevékenységek oldalra lépés nélkül lehet váltani az ablakok között.Alkalmazások szerint csoportosít, a gomb fölött tartva az egeret jelenik meg az egyes ablakok listája, ha több van*.
    *(Ennek az átállítására elméletileg van lehetőség, de a cikk írásának pillanatában a kiegészítőnek semmilyen beállítása nem működött)
  • Move Clock - Áthelyezi az órát a jobb oldalra (több helyet adva az előző listának)
  • Window Navigator - Billentyűkombinációk ablakkezeléshez Tevékenység nézetben
  • Alternate Status Menu - Hozzáadja a kikapcsolás és hibernálás lehetőségeket az állapot menühőz. (Enélkül csak Felfüggesztésre van lehetőség, a leállításhoz az ALT billentyűt nyomva tartásakor jelenik meg.)

Témák

A kiegészítők, bár megtehetik, általában nem módosítják a Shell megjelenését. Erre a célra kifejezetten a témák valók, amiből sok jó található az interneten. Ilyen például ez a válogatás.

A témák telepítésére nincsen automatikus módszer. Az alapértelmezett és mindenhol használt téma a /usr/share/gnome-shell/theme mappában található. Ennek átnevezésével pl. theme-original-ra, és egy új theme mappa létrahozásával rendszer szinten módosítható a megjelenés. (Ehhez rendszergazdai jogok szükségesek!)

A témák kezelésére elméletileg létezik kiegészítő, aminek a segítségével a GNOME Tweak Tool-ban felhasználó szinten állítható át a használt téma illetve annak elérési útja, így akár a felhasználói fiókban saját maga által letöltött témák használatára is lehetőséget adva.