2013. január 16., szerda

Conky Google Reader szkript

Ahogy ígértem már itt is a Google Reader olvasatlan feed értesítő Python szkript Conky-hoz. A korábbi verziót nem én írtam és nem is teljesen arra célra való, amire használtam, így inkább megírtam egy újabb változatot, ami a méréseim szerint majdnem kétszer olyan gyors, és 20%-al kevesebb erőforrást is használ működéséhez. Ráadásul így nem kell jelszót beírni a Conky konfigurációs fájlba, ami biztonságosabb így.

Telepítése nagyon hasonlít az előző cikkben szereplő szkripthez, hozzunk létre egy futtatható szkriptfájlt:

$ mkdir -p ~/.scripts
$ touch ~/.scripts/rssToConky.py
$ chmod +x ~/.scripts/rssToConky.py
$ gedit ~/.scripts/rssToConky.py

A megnyíló Gedit szerkesztőbe pedig másoljuk be a következő kódot:

Természetesen az emailcím és a jelszó mezőket ki kell tölteni. Ha mindez megvan akkor ugyanúgy lehet felhasználni, mint a korábbi változatot, egy lehetséges példa:

You have ${texeci 300 python ~/.scripts/rssToConky.py} unread feed(s).

Az eredményről screenshotot az előző cikkben láthattok. :)

2013. január 15., kedd

Conky Google Calendar szkript

A korábbi Gmail, Google Reader újdonság értesítő szkriptek után egy ideje már akartam Google Calendar-os Conky kiegészítést is. (Arról nem beszélve, hogy a Google Reader olvasatlan feed megjelenítő szkriptet is optimalizáltam.) Egy ideig keresgéltem, de nem igazán találtam olyat, ami egy Conky méretű kis helyen tényleg jól néz ki, és elég információ tartalma is van. Ezért elkezdtem megírni a saját verziómat Pythonban a Google Calendar API segítségével.

Az eredmény a következőképpen néz ki, persze lehet, hogy lesznek módosítások rajta még, ha valami jó eszembe jut (vagy valaki javasol valamit):

A szkript működéséhez szükség lesz a python-gdata csomagra, tehát telepítsük:

$ sudo apt-get install python-gdata

Ezután kelleni fog a megjeleníteni kívánt naptár privát URL-címe. Ezt a Naptárbeállítások fül alatt szerezhetjük be Google Calendarban, a Privát URL-cím helyen, mondjuk az XML gomb linkjéből. A link szerkezete a következő:

http://www.google.com/calendar/feeds/EMAILCÍM/PRIVÁT URL CÍM/basic

Ha mindez megvan, akkor már berakhatjuk a kész szkriptet Conky-ba:

$ mkdir -p ~/.scripts
$ touch ~/.scripts/calToConky.py
$ chmod +x ~/.scripts/calToConky.py
$ gedit ~/.scripts/calToConky.py
Majd másoljuk be a következő kódot, értelemszerűen az email cím, és a megszerzett privát url címeket töltsük ki:

Végül a Conky-ban hívjuk meg a most elkészített szkriptet:

CALENDAR ${hr 2}
${texeci 300 ~/.scripts/calToConky.py}

Hamarosan érkezik a Google Reader-es Conky szkript is.

Update: A szkriptet időközben átírtam Python3-ra, így szükség van egy >3.x verzió telepítésére, amihez a pyenv eszközt ajánlom.

2013. január 13., vasárnap

Audacious 3.3.3 Waldorf (Debian Wheezy) telepítése

Eljött az idő amikor a régi jól bevált Crunchbang 10 "Statler" rendszeremet frissítettem az új, még testing állapotban lévő Crunchbang 11 "Waldorf" verzióra. Eddig még soha nem használtam stable current-től eltérő Linux verziót, viszont egy ideje elkezdett zavarni, hogy minden programból nagyon régi verziókat tudok csak használni, és hiányoznak néha feature-ök, amik mindig csak a kevésbé stabil, testing változatban találhatóak meg. Az új verzió amúgy a még szintén testing státuszban lévő Debian Wheezy-re épül, ami lassan már egész stabilnak tekinthető. Ezért is gondoltam, hogy váltok az új Crunchbangre, ami gyakorlatilag 100%-osan kompatibilis az "anyadisztribúcióval".
Bár sok hibával nem találkoztam a rendszerben, azonban a Debian Wheezy tárolóiban lévő Audacious verzió (3.2.4-1) a következőhöz hasonló segmentation fault-tal elszáll:
** (audacious:17888): CRITICAL **: playback_get_paused: assertion `playing' failed
Rövid keresgélés után rátaláltam, hogy ez egy bejelentett hiba, a következő verziókban már nem tapasztalható. A Wheezy-ben található verziónál újabbat viszont elég problémás telepíteni, nem is találtam olyan tárolót amivel sikerült, lefordítani még problémásabb, így inkább a sid változatból debian.org-ról összevadásztam függőségekkel együtt egy működő Audacious 3.3.3-2 változatot.
Itt letölthető, kicsomagolás (tar -xvzf audacious.tar.gz) után az alapértelmezett GDebi csomagtelepítővel telepíthetőek a .deb csomagok.
Hamarosan írni is fogok az új Crunchbang kiadáshoz módosított beállításaimról (Conky, Tint2, Openbox, stb).

2012. december 27., csütörtök

Parcellite vágólapok szinronizációja


Már korábban többször is írtam vágólapkezelőkről, például itt, amikor még a Glipper-t használtam, vagy itt, amikor URL rövidítő szkriptet írtam. A Parcellite nevű vágólapkezelőt már rég óta használom, Crunchbang-en alapértelmezetten van telepítve. Van azonban egy kisebb hibája (bár ez a viccel ellentétben lehet, hogy komolyan feature), és a beállításaiban nem lehet bekapcsolni a vágólapok szinkronizációját, csak ha az elsődleges kiválasztást és a CTRL+C-s másoló eljárást is engedélyezzük. Ennek lehet, hogy van valamilyen komolyabb oka is, de akárhogy kerestem nem találtam ilyet (ha valaki tudja, nyugodtan szólhat :D). Ez ahhoz szükséges, hogy ha egy programból kilépünk a vágólapkezelő ugyan elmenti a vágólap tartalmát, azonban nem helyezi be azt a vágólapra, így nem lehet beilleszteni, csak a Parcellite kezelőfelületén való kiválasztás után.
Ez a változás az egyik újabb verzióban került a programba, ami nekem nem tetszett, így létrehoztam egy "fork"-ot, amiben ezt orvosoltam. A fenti képen látható bal oldali az alap, a jobb oldali az én változatom, ahol elég az egyik lehetőséget kiválasztani, hogy szinkronizálni lehessen a vágólapokat.
Telepítéshez:
wget https://github.com/thesnapdragon/parcellite/archive/master.zip
unzip master.zip
cd parcellite-master/parcellite-1.0.2rc5/
./configure
make
sudo make install

A Parcellite hivatalos oldala
A "fork" kódjának GitHub oldala

2012. október 24., szerda

Raspberry Pi firmware frissítés


Korábban nagyon bosszantó hiba volt a Raspberry Pi használatakor (Raspbian operációs rendszer mellett), hogy egy gyorsabb letöltésnél, egyre több ram-ot kezdett használni a Transmission, és egy idő után már nem maradt elég memória a működéséhez, ezért magától leállt a torrentkliens.
Szerencsére ez egy firmware frissítéssel megoldható, viszont sokáig nem találtam rá egy egyszerű megoldásra, amivel könnyen lehetne firmware-t frissíteni, így nagyon megörültem, amikor nem régen felfedeztem Hexxeh oldalát. Ő készített egy nagyszerű kis szkriptet, amivel nagyon egyszerű az egész:
  1. Git+ca-certificates csomag telepítése:
    sudo apt-get install git ca-certificates
  2. Szkript letöltése, telepítése, futtatási jog beállítása:
    sudo wget http://goo.gl/1BOfJ -O /usr/bin/rpi-update && sudo chmod +x /usr/bin/rpi-update
  3. Futtatás & enjoy:
    sudo rpi-update

2012. október 4., csütörtök

Linux optimalizálása SSD-hez

  1. Első lépésként érdemes megnézni, hogy a partíciók jól lettek-e létrehozva (partition alignment megfelelő-e), de ahogy láttam a Crunchbang telepítő erre figyel, és MSDOS partíciós táblánál is (nem csak GUID Partition Table-nél, ahogy fő forrásom is írja) az első szektor 2048-nál van, ami megfelelő. Erre azért van szükség röviden, mert az SSD másképpen működik, mint a HDD: ha egy partíció nem a page size méretével osztható határon kezdődik, akkor az SSD-nek egy lap írása helyett 2 lapot kell írnia, így a sebesség és az élettartam is csökken. 25nm-es gyártási technológiánál a page size 8kB, erase block size 2MB, egy szektor 512B így kiszámolható, hogy megfelelően van eltolva a partíció.
  2. Lépés a TRIM funkció bekapcsolása. Ehhez először is 2.6.33-as vagy újabb kernellel kell rendelkezünk. Röviden a TRIM-ről: HDD esetén, ha egy fájl letörlünk, akkor az operációs rendszer az érintett szektorokat megjelöli törölhetőként és később újabb adat kiírásakor felülíródnak a korábban törölt adatok. Az SSD-nél viszont más a helyzet, mert új adatot csak üres lapokra lehet írni, törléskor azonban az operációs rendszer csak megjelöli a szektorokat törölhetőként, így azok nem tűnnek el, megjelölve továbbra is ott vannak az SSD-n. Újabb adat írásakor az erase blocknak megfelelő nagyságú részt be kell olvasni, kiírni gyorsítótárba, törölni a szükségtelen lapokat, visszaírni, majd az üres helyre az új adatokat is beírni. A TRIM egy SATA utasítás, melyet az operációs rendszer hív meg, ilyenkor ténylegesen törlődnek a szükségtelen lapok az SSD-ről. Bekapcsolásával sebességnövekedést érhetünk el.
    Ehhez az /etc/fstab fájlba kell beírnunk a discard attribútumot:
    # / was on /dev/sda1 during installation
    UUID=8a159c3a-0867-431d-a7a1-e5211fc3a8d9 /               ext4    discard 0       1
    # /home was on /dev/sda5 during installation
    UUID=fc76149a-8a7d-43eb-a676-56ae599c440a /home           ext4    defaults,user_xattr,discard 0        0       2
  3.  Az előző lépéshez hasonlóan az /etc/fstab fájlban érdemes beállítani a noatime attribútumot is. Így a rendszer nem írja ki fájloknál az utolsó hozzáférés idejét, ezzel rengeteg erőforrást megspórolva.
    # / was on /dev/sda1 during installation
    UUID=8a159c3a-0867-431d-a7a1-e5211fc3a8d9 /               ext4    noatime,discard 0       1
    # /home was on /dev/sda5 during installation
    UUID=fc76149a-8a7d-43eb-a676-56ae599c440a /home           ext4    defaults,noatime,user_xattr,discard 0        0       2
  4. Az alapértelmezett IO ütemező Crunchbang-ben a CFQ (Complete Fair Queueing Scheduler), mely a HDD olvasó/író fej helyzetét is figyelembe veszi működése során. Az SSD-nél ennek nincsen értelme, így érdemes átállítani az ütemezőt Deadline, vagy Noop ütemezésre:
    printf 'ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="deadline"' | sudo tee /etc/udev/rules.d/60-ssd-scheduler.rules
  5. Néhány könyvtárat, amelyekbe nagyon gyakran történik írás, nem túl jó az SSD-n tárolni, hogy ne csökkenjen az SSD élettartama számottevően. Ezeket a könyvtárakat átmeneti fájlrendszerként érdemes felcsatolni, így ezek soha nem íródnak ki a lemezre, újraindításkor tartalmuk törlődik. Felcsatolásukhoz a /etc/fstab fájlba írjuk a következőket:
    tmpfs   /tmp       tmpfs   defaults,noatime,mode=1777   0  0
    tmpfs   /var/log   tmpfs   defaults,noatime,mode=0755   0  0
    tmpfs   /var/spool tmpfs   defaults,noatime,mode=1777   0  0
    tmpfs   /var/tmp   tmpfs   defaults,noatime,mode=1777   0  0
    Én a két tmp könyvtárat, a napló fájlok könyvtárát, és a futásra váró folyamatok könyvtárát helyeztem át a memóriába. Ezzel a konstrukcióval érdemes vigyázni, mert ha elfogy a hely a memóriából, akkor a swap-et fogja használni a rendszer, valamint egyes programok nem tudnak elindulni, ha nincsenek meg a /var/log-ban a saját mappáik.
    Egy megoldás ezen mappák létrehozására, ha a rendszer indulásakor elkészítjük ezeket egy init.d szkriptben. Egy majdnem jó megoldás található itt, azonban hiányoznak a függőség alapú bootolást segítő LSB mezők (itt írtam róluk). Helyesen:
    sudo touch /etc/init.d/make-tmpfs-dirs
    sudo gedit  /etc/init.d/make-tmpfs-dirs
    másoljuk be a szkriptet:
    #!/bin/sh

    ### BEGIN INIT INFO
    # Provides: make-tmpfs-dirs
    # Required-Start:
    # Required-Stop:
    # Default-Start:  2 
    # Default-Stop:
    # Short-Description: Create temporary directories on tmpfs.
    # Description: Create temporary directories for Debconf, Apache2, GDM, ATD
    ### END INIT INFO

    # Debconf
    mkdir /var/cache/debconf

    # Apache2
    sudo mkdir /var/log/apache2
    sudo chown root:adm /var/log/apache2
    sudo chmod 750 /var/log/apache2
    # GDM
    sudo mkdir -p /var/log/gdm

    # ATD
    sudo mkdir -p /var/spool/cron/atjobs
    exit 0
    majd állítsuk be a jogosultságokat, és a megfelelő runlevel-t:
    sudo chmod u+x /etc/init.d/make-tmpfs-dirs
    cd /etc/rc2.d
    sudo ln -s ../init.d/make-tmpfs-dirs S02make-tmpfs-dirs
  6. A gyakori írások nem túl jók az SSD-nek, általában egy böngésző cache-eléskor legtöbbször nagyon kis fájlokat ír ki. Ezt is érdemes a memóriába áthelyezni, mert ezzel még a böngészést is gyorsíthatjuk.
    Firefox-ban a következőt kell tennünk:
  • Írjuk be a böngésző címsorába a következőt: about:config
  • Jobb klikk -> New -> String
  • Névnek írjuk be a következőt: browser.cache.disk.parent_directory
  • Értéknek pedig: /tmp 
A további SSD optimalizációval kapcsolatos eredményekről is itt fogok írni.  

2012. szeptember 10., hétfő

Thunar egyéni műveletek: ISO készítés, mount


A Crunchbang Linux alapértelmezett fájlkezelője a Thunar, melynek fejlesztési céljai közé tartozik, hogy gyorsabban induljon, mint bármely más böngésző, és rendkívül megbízható legyen, ezenkívül könnyen kiterjeszthető legyen a funkcionalitása plugin-ek és egyéb szkriptek segítségével. Talán gyorsaság és memóriahasználat szempontjából nem a legjobb (a PCManFM egy kicsit ebben megelőzi), viszont az általam korábban használat Konqueror-t, és Nautilus-t bőven lehagyja.
Sokáig nem használtam hozzá saját kiegészítéseket, mert a Crunchbang-ben alapból hozzá adtak már néhány egyéni műveletet (custom action, magyarul szörnyen hangzik). Ezek a következők: Fájlok keresése Catfish-el, Thunar megnyitása root jogosultsággal, Terminator megnyitása az adott mappában a felhasználó vagy root jogosultsággal.
Nautilus esetén is ezeket a kiegészítéseket használtam, de néha hasznos lenne, ha .iso fájlokat is gyorsan tudnék kezelni Thunar-ból. Például egy Daemon Tools funkcionalitását megvalósíthatná custom action-ökkel! Amikor ez eszembe jutott el is kezdtem átírni a korábbi Nautilus-nál használt .iso kezelő szkriptjeimet Thunar-os verzióra, így most megosztom, hátha szüksége van másoknak is rájuk.

előkészítés
3 szkripttel elég jól kezelni tudjuk már az .iso képfájlokat. Lesz egy képfájlt csatoló, egy leválasztó, és egy képfájlokat készítő szkript. Természetesen bárhova telepíthetőek lesznek, ez csak egy példa lesz:
#csináljunk a home-unkban egy .scripts könyvtárat, ha még nincs
mkdir -p ~/.scripts/ISOManager
#hozzuk létre a 3 szkriptet
touch ~/.scripts/ISOMount ~/.scripts/ISOunMount ~/.scripts/MakeISO
#tegyük őket futtathatóvá
chmod +x  ~/.scripts/ISOMount ~/.scripts/ISOunMount ~/.scripts/MakeISO
.iso képfájl csatolása
A Thunar-ban a Szerkesztés -> Egyéni műveletek beállítása... résznél, a "+" gomb megnyomása után adhatunk hozzá újat. A Név és Leírás mezőket töltsük ki tetszés szerint, a Parancs részhez, pedig írjuk be a következőt:
gksudo ~/.scripts/ISOManager/ISOMount %f
Megjelenési feltételeknél írjuk be, hogy csak a *.iso alakú Egyéb fájlok-nál jelenjen meg ez az opció. Ezután Terminálban:
gedit ~/.scripts/ISOManager/ISOMount
 Majd illesszük be a következő szkriptet, és mentsük el a fájlt:
#!/bin/bash
BASENAME=`basename "$1"`
ISO=`printf "%q" "$1"`
sudo mkdir -p "/media/$BASENAME"
if sudo mount -o loop -t iso9660 $ISO "/media/$BASENAME"; then
    if zenity --question --title "ISO Mounter" --text "$BASENAME Successfully Mounted. Open Volume?"; then
        thunar /media/"$BASENAME"
    fi
    exit 0
else
    sudo rmdir "/media/$BASENAME"
    zenity --error --title "ISO Mounter" --text "Cannot mount $BASENAME!"
    exit 1
fi
.iso képfájl leválasztása
Az előzőhöz hasonlóan kell hozzáadnunk, de a Parancs a következő legyen:
gksudo ~/.scripts/ISOManager/ISOunMount %f
Megjelenési feltételeknél írjuk be, hogy csak a *.iso alakú Egyéb fájlok-nál jelenjen meg ez az opció. Ezután Terminálban:
gedit ~/.scripts/ISOManager/ISOMount
Majd illesszük be a következő szkriptet, és mentsük el a fájlt:
#!/bin/bash
BASENAME=`basename $1`
sudo umount "/media/$BASENAME"
sudo rmdir "/media/$BASENAME"
zenity --info --text "Successfully unmounted /media/$BASENAME"
exit 0
.iso képfájl készítése
Ugyanúgy, mint az előzőeket. Parancs:
~/.scripts/ISOManager/MakeISO %N
Megjelenési feltételeknél írjuk be, hogy bármely fájlnál (*) jelenjen meg ez az opció, és minden fájltípust jelöljünk be. Majd Terminálban:
gedit ~/.scripts/ISOManager/MakeISO
Végül  illesszük be a következő szkriptet, és mentsük el a fájlt:
#!/bin/bash
zenity --question --text="Create an ISO image here?" || exit

(genisoimage -r -o generated.iso "$@" 2>&1 |
while read i; do
    PARCIAL=$(echo $i | grep -o [0-9]*'\.'[0-9]*)
    if [ $PARCIAL ]; then
        echo $PARCIAL
        echo "# $PARCIAL% done..."
    fi;
done
echo "# Finish." ) | zenity --progress --title="Creating \"$*.iso\""
Ha mindent jól csináltunk a következő menüpontokkal találkozhatunk Thunar-ban, ha jobb klikkel kapcsoltunk kijelölt fájlokra:




Thunar hivatalos Wiki-je, néhány új custom action
Thunar hivatalos oldala