2012. augusztus 17., péntek

HP4530s Bluetooth csatlakozás Crunchbangen

Most a Bluetooth életrekeltését fogom bemutatni HP 4530s laptopon, Crunchbang rendszeren.
Először arra lettem figyelmes, hogy a hciconfig parancs semmilyen kimenetet nem ad, ezért először a gépemben található Bluetooth chipset típusát akartam kideríteni, valamint hibaüzeneteket kerestem:
grep -i bluetooth /var/log/syslog
Ezt találtam, többek között:
Bluetooth: Atheros AR30xx firmware driver ver 1.0
Bluetooth: Error loading firmware
Tehát Atheros chipset-em van! Rövid keresgélés után megtaláltam, hogy Debianra milyen csomagokat kell feltenni a működéshez:
sudo apt-get install bluez bluetooth gnome-bluetooth bluez-firmware firmware-atheros
Ezenkívül, hogy biztosan legyen jogosultságunk használni a userünkkel a Bluetooth-t, állítsuk be jogosultságot rá magunknak:
sudo gedit /etc/dbus-1/system.d/bluetooth.conf
A busconfig tagen belül adjuk hozzá a következő sorokat, és mentsük el a változásokat. Természetesen a felhasználónév helyére írjuk be a saját felhasználónevünket.
<policy user="FELHASZNÁLÓNÉV">
   <allow own="org.bluez"/>
   <allow send_destination="org.bluez"/>
   <allow send_interface="org.bluez.Agent"/>
</policy>
Nézzük meg ezután, hogy a Bluetooth modul be van-e töltve:
lsmod | grep bluetooth
Ha egy hasonló kimenet kapunk, akkor már be van töltve a modul:
bluetooth             137855  24 bnep,rfcomm,ath3k,btusb
Ha nincs töltsük be, most:
sudo modprobe bluetooth
Indítsuk el a servicet:
sudo service bluetooth start
Majd az Openbox-os applet-et is indítsuk el:
bluetooth-applet &
Ekkor már meg tudjuk keresni Bluetooth eszközeinket a számítógéppel az előbb elindított applet segítségével, és párosítani is tudjuk, azonban Android esetében nekem soha nem akart csatlakozni, és a telefon a következőt írta ki:
Párosítva, de nincs csatlakoztatva
Rákeresve a problémára az internet tele van a megoldást kereső emberekkel. Grafikus felületen sehogy nem sikerült csatlakozásra bírni a telefont és a gépet, mindig "ismeretlen hiba történt", ha valamilyen fájlt szerettem volna küldeni a telefonomra. Természetesen az interneten rengeteg érdekes "megoldás" található a problémára pl.: vegyük ki és rakjuk vissza az akkumulátort, váltsuk angolra a telefon nyelvét... természetesen ezek nem működnek. :D

Viszont egy idő után konzolos felületen is kipróbáltam a csatlakozást, és valamiért az egyből működött:
Nézzük meg, hogy a Bluetooth  eszközünk jól van-e beállítva, ha kapunk valamilyen kimenetet valószínűleg rendben lesz:
hciconfig
Keressük meg a csatlakoztatni kívánt eszközt (természetesen a mobilon engedélyezni kell, hogy megtalálható legyen). Ez a program kiírja az elérhető eszközök MAC-címeit:
hcitool scan
Csatlakoztassuk az áldozatot:
sudo rfcomm connect 0 MAC-CÍM 1
A MAC-cím helyére írjuk be a telefon MAC-címét. Ha a parancs lefut akkor máris csatlakoztatva van a Bluetooth eszközünk, és küldhetünk rá fájlokat, tallózhatjuk a tartalmát, stb.

2012. augusztus 14., kedd

Raspberry Pi IP cím küldése emailben


Ha az ember SSH-n keresztül akar belépni Raspberry Pi-jére, otthon még könnyű dolga van, mert egy
nmap -sP 192.168.1.0-255
paranccsal könnyen kiderítheti mi is a helyi IP címe az eszköznek. Ha viszont már nem otthonról akarnánk belépni, a külső IP cím megszerzéséről kell gondoskodni, ami egy fokkal már bonyolultabb.
Ahhoz, hogy külső hálózatból tudjunk csatlakozni a Raspberry Pi-re, és routert használunk otthon, akkor a routerben a 22-es portot át kell irányítanunk a Raspberry-re. Ezt minden router esetében máshogy kell megtenni; én ezenkívül még MAC cím alapján rögzített helyi IP címhez kötöttem a gépet, mert így otthonról nem kell még az nmap-ot se elindítanom.
Mindez megvan mégis legtöbbször a külső IP cím megszerzésével van a probléma, újraindul a gép, áramszünet volt, megszakadt a net, stb. Ezért kitaláltam, hogy az internetre csatlakozás után küldje el - az előző cikket felhasználva - emailben a külső IP címét nekem. Természetesen ez se nekem jutott először eszembe, a hivatalos RPi wiki oldalon van egy hasonló, csak az bootolás után küldi el az IP címet, feltételezve, hogy egy rendszerindítás után csak egyszer csatlakozunk az internetre. Én olyat szerettem volna, ami minden csatlakozáskor elküldi az IP címet.
NetworkManager-hez könnyen írhat az ember ilyen szkriptet, de én nem szoktam használni ezt a programot, így az /etc/network mappában helyeztem el az emailküldő szkriptet.
  1. Először is hajtsuk végre az előző írásomban leírtakat.
  2. Terminálban adjuk ki a következő parancsokat:
    cd /etc/network/if-up.d/
    sudo touch ipaddress
    sudo chmod +x ipaddress
    sudo gedit ipaddress
    Az elkészítendő fájl nevében nem lehet . (pont), mert különben nem fog lefutni a szkript.
  3. A megnyíló Gedit-be másoljuk be a következő szkriptet:
    #! /bin/bash
    su FELHASZNÁLÓNÉV -c '(wget -q -O - checkip.dyndns.org | sed -e "s/.*Current IP Address: //" -e "s/<.*$//" | mailx -s "Raspberry IP Address (`date`)" EMAILCÍM) &'
A felhasználónév helyére írjuk be a Raspberry Pi-n használt felhasználónevünket, amihez beállítottuk a konzolos email küldést (Amely felhasználóval kiadtuk a ./setup_gmail_command_line.sh install parancsot). Az email cím helyére pedig írjuk be azt a címet, amelyen értesülni akarunk az új külső IP címről.
Egy újraindítással (sudo reboot) már ki is próbálhatjuk, hogy sikerült-e mindent beállítani. :)

2012. augusztus 10., péntek

Email küldés parancssorból


Gyakran hasznos lehet, ha parancssorból tudunk emailt küldeni. Például, ha letöltődött egy torrent, beállíthatjuk Transmission-ben, hogy küldjön egy figyelmeztető emailt nekünk, vagy bármilyen más esemény esetén is megtehetjük ezt. Egy szerverként használt Raspberry Pi-nél ez egy hasznos figyelmeztető lehetőség lehet.
Arra gondoltam, hogy ez akkor lehetne igazán hasznos, hogyha a saját Gmail-es címemről tudnék írni, így rákerestem használhatnám-e a Gmail SMTP szerverét levelezésre konzolból. Sajnos (:D) találtam egy elég szép megoldást, így most nem kellett semennyit se kódolnom. Ezen az oldalon találtam egy szkriptet, amely a mailx és msmtp programok config fájljait készíti elő a Gmail SMTP szerverével való kommunikációra.
Itt letölthetjük a szkriptet, majd futtatás előtt a /tmp/test_email fájlba kell írni valamilyen szöveget, amit tesztelésként elküldünk magunknak:
echo "Ez egy teszt mail." > /tmp/test_email
Ezután nyissuk meg a fájlt:
gedit setup_gmail_command_line.sh

Majd állítsuk be a Gmail felhasználónkat, és jelszavunkat a következő résznél
GMAIL_USER='YOUR_GMAIL_USER_NAME'
GMAIL_PASS='YOUR_GMAIL_USER_PASSWORD'
Ekkor már elindíthatjuk a programot:
chmod +x setup_gmail_command_line.sh
sudo ./setup_gmail_command_line.sh install

Ha minden jól ment mostmár küldhetünk emaileket akár parancssorból is a következő paranccsal:
mailx -s "email tárgya" -a /csatolmányelérésiút/csatolmány.zip címzett@valami.hu < /emailszövegelérésiút/email.txt

vagy, ha sietünk nem is kell külön fájlba megírni az email törzsét:

echo "teszt" | mailx -s "tesztmail" címzett@valami.hu

-s kapcsolóval adható meg az email tárgya, -a kapcsolóval a csatolmány (ez el is hagyható), utána a címzett, majd az emailünk törzse.

Kiegészítésként megírom, hogyha saját teljes nevünkön akarjuk elküldeni az email-t, akkor a szkript 107-ik sorában módosítani kell a "($GMAIL_USER)"-t, a következőképpen:
19-ik sorba írjuk be egy változóba a teljes nevünk:
$GMAIL_FULLNAME='Teljes Név'
majd a 107-ikben:
set from="$GMAIL_USER@gmail.com ($GMAIL_FULLNAME)"

Update: Nem rég vettem észre, hogy a syslog tele van a következőhöz hasonló hibákkal:
Warning: program /usr/sbin/sensible-mda unsafe: No such file or directory
SYSERR(root): Cannot exec /usr/sbin/sensible-mda: No such file or directory
Rövid utánaolvasás után azt találtam, hogy a cikkben említett telepítőszkript, nem telepíti a sendmail program egy függőségét, így az egy csomó hiba forrása lesz. A helyes működéshez szükség van a következő program telepítésére is:
sudo apt-get install sensible-mda

2012. augusztus 6., hétfő

Doxygen Ruby támogatás


Egy újabb Doxygen kiegészítés következik! Az elmúlt időben egyre többet használom Linuxos projektek alatt a Ruby nyelvet, és néha eljön az idő amikor dokumentációt kell készíteni az elkészített programokhoz. Ilyenkor mindig először a Doxygen nevű dokumentáció készítő programhoz fordulok, mint a múltkori esetben, sajnos azonban néha olyan nyelvet használok, amit nem támogat a fenti program. Így volt ez a Ruby esetében is, azonban rövid keresgélés után találtam egy kiegészítést, amivel Ruby kódokat is dokumentálhatunk Ruby-Doc stílusban. Több, mint egy éve készítette el Vincent Fourmond az említett kiegészítést, és céljai közé tartozik, hogy alkotása bekerüljön a Doxygen fő fejlesztési ágába.
Itt letölthetjük a patchet (mondjuk zip formában), csomagoljuk ki:
unzip fourmond-doxygen-ruby-patch-9a90763.zip
cd fourmond-doxygen-ruby-patch-9a90763.zip
A fordításhoz szükség lesz a következő csomagokra:
sudo apt-get install flex bison
Majd fordítsuk és telepítsük a programot:
./configure
make
sudo make install
Ezekután Doxyfile generálás után (doxygen -g), szerkesztve a Doxyfile-t keressük meg, és állítsuk be a következőket:
RUBY_RDOC_COMPATIBILITY= YES
FILE_PATTERNS          = *.rb
Lehetnek hibák a programban, de eddigi próbálkozásaim során nem futottam bele semmilyen nagyobb bug-ba, remélem hamarosan bekerül alapértelmezetten a támogatott nyelvek közé a Ruby.

2012. augusztus 1., szerda

Doxygen Bash szkript támogatás


A Doxygen egy dokumentáció generáló eszköz, amellyel viszonylag könnyen szinkronban tudjuk tartani a dokumentációnkat a kóddal, mert a dokumentációt a kódba kell írni kommentek formájában. Elég sokféle programozási nyelvet támogat, azonban például Bash szkriptek dokumentálására alapértelmezetten nem képes ez a program.
Kis módosítással azonban írhatunk akár teljes dokumentációt is a segítségével.

A Doxygen a legtöbb disztribúció fő szoftvertárolóiban szerepel, szóval telepíthetjük apt-get-tel:
sudo apt-get install doxygen
Doxyfile generálás:
doxygen -g
Ezután már szerkeszthetjük a Doxyfile-t, hogy testreszabjuk a dokumentációnkat:
gedit Doxyfile
A Bash szkriptek támogatásához a következő módosításokat tegyük meg (a megoldást egy amerikai fiatalember honlapján találtam meg):
FILE_PATTERNS = *.sh
INPUT_FILTER = "sed -e 's|##|//!|'"
FILTER_SOURCE_FILES = YES
 Ezután dupla kettőskereszt (##) után írhatjuk a dokumentációt, azonban csak kivonatok (brief description) formájában tehetjük meg. Ebben az esetben az egy oldalra szánt dokumentációkat sorfolytonosan, összefüggően kell megírni; valamint elég sok Doxygen parancsot nem használhatunk.

Én a következő parancsokat szoktam használni (az összes parancs leírása itt található):
@author
@file
@version
@mainpage
@page
@section
@subsection
@param
@return
@details
\code - \endcode
Természetesen működik néhány parancs még, de ezeket teszteltem.