2010-11-25

eeepc + linux ARCH + nokia 6630 + bluetooth + tre.it

Il post odierno è su un tema originalissimo: utilizzare un cellulare Nokia 6630 per connettersi ad internet via bluetooth, sul solito eeePC con installato Arch Linux. In realtà il modello del computer è irrilevante.

PREMESSA: per realizzare quanto segue ho seguito scrupolosamente i passi indicati in questa pagina del wiki di Arch, che suggerisco al posto di questo post:

https://wiki.archlinux.org/index.php/Bluetooth_GPRS_Howto

Se avete difficoltà con l'inglese riporto in estrema sintesi i passi descritti (e come li ho realizzati); le frasi che iniziano in grassetto riguardano parti non presenti sulla pagina, quelli in corsivo sono passaggi che non sono stati necessari nel mio caso:

PRIMA PARTE: IL BLUETOOTH

La prima cosa da fare è installare bluez-utils, bluez-libs e dbus con pacman

# pacman -S bluez-utils bluez-libs dbus

ed avviare, nell'ordine:

# /etc/rc.d/dbus start
# /etc/rc.d/bluetooth start

Si può poi modificare il file /etc/rc.conf aggiungendo (in questo ordine) dbus e bluetooth alla riga DAEMONS=(... dbus ... bluetooth ...).

Si esegue una scansione dei dispositivi (il cellulare va messo in modalità visibile) con:

# hcitool scan
Scanning ...
00:11:22:33:44:55 NomeTelefono

00:11:22:33:44:55 è il mac del cellulare.

Poi con:

sdptool search --bdaddr 00:11:22:33:44:55 DUN
[...]
Channel 1
[...]

si trova il canale su cui il cellulare effettua il servizio DUN (dial-up network). Ovviamente al posto di 00:11:22:33:44:55 va messo il mac del proprio cellulare trovato in precedenza (la stessa cosa andrà fatta per ogni volta che si trova scritto 00:11:22:33:44:55).

Ora bisogna impostare il file /etc/bluetooth/rfcomm.conf, aggiungendo:

bind yes;
device 00:11:22:33:44:55;
channel 1;
comment "GPRS dialup";

Alla voce channel va messo il numero trovato prima, comment può essere quello che si vuole.

Quando ho fatto uno dei primi tentativi il canale era cambiato, ed al momento non ne capisco il motivo: in caso di malfunzionamenti potrebbe essere opportuno controllare che il proprio "channel" non sia diverso da quello trovato in precedenza.

Si modifica ora /etc/conf.d:

RFCOMM_ENABLE=true

e si riavvia il bluetooth:

# /etc/rc.d/bluetooth restart

Se il comando

# ls -l /dev/rfcomm0
crw-rw---- 1 root tty 216, 0 data e ora /dev/rfcomm0

dà una risposta simile a quella riportata, significa che il collegamento tra cellulare e il computer funziona (in particolare che il computer vede il servizio modem del cellulare, se non ho capito male).

Per connettere computer e modem è necessario un PIN condiviso, quindi si dà:

# bluez-simple-agent

quindi su un altro terminale si usa il comando:

# cat /dev/rfcomm0

A breve il telefono dovrebbe - ricordo che questa parte non è stata necessaria per me - chiedere un PIN; una volta inserito bluez-simple-agent richiederà lo stesso PIN per connettere i dispositivi.

SECONDA PARTE: IMPOSTARE LA CONNESSIONE

Di seguito è descritta la creazione di un file, /etc/ppp/peers/tre, che contiene i parametri per la connessione tramite un modem; in particolare fa riferimento ad altri due file, /etc/ppp/peers/tre-connect e /etc/ppp/peers/tre-disconnect. Questi ultimi due sono script che utilizzano il programma "chat", necessario per comunicare con il modem ma di cui non conosco nulla, come nulla so, al di là di ciò che è intuitivo, delle configurazioni contenute nel file "tre"; per impostare il mio computer li ho copiati pari pari dalla pagina wiki di riferimento e pertanto non so fornire chiarimenti se qualcosa non funziona.

Si inizia aggiungendo in fondo al file /etc/ppp/ip-up le seguenti due righe:

echo -e "#generated by ip-up\nsearch local\nnameserver $DNS1\nnameserver $DNS2" > /etc/resolv.conf
chmod a+r /etc/resolv.conf

Queste righe occorrono per impostare i DNS corretti. Ora bisogna creare il file /etc/ppp/peers/tre, che sarà del tipo:

show-password
noauth
/dev/rfcomm0
115200
connect /etc/ppp/peers/tre-connect
disconnect /etc/ppp/peers/tre-disconnect
defaultroute
noipdefault
nodetach
usepeerdns
crtscts
local
ipcp-accept-local
maxfail 10
lcp-echo-failure 0
lcp-echo-interval 0
novj
nobsdcomp
novjccomp
nopcomp
noaccomp
linkname saunalahti
mtu 1500
mru 1500

Quindi si crea /etc/ppp/peers/tre-connect

#!/bin/sh
exec /usr/sbin/chat -v \
TIMEOUT 5 \
ECHO ON \
ABORT '\nBUSY\r' \
ABORT '\nERROR\r' \
ABORT '\nNO ANSWER\r' \
ABORT '\nNO CARRIER\r' \
ABORT '\nNO DIALTONE\r' \
ABORT '\nRINGING\r\n\r\nRINGING\r' \
'' \rAT \
TIMEOUT 12 \
SAY "Press CTRL-C to close the connection at any stage!" \
SAY "\ndefining PDP context...\n" \
OK ATH \
OK ATE1 \
OK 'AT+CGDCONT=1,"IP","tre.it","",0,0' \
OK ATD*99# \
TIMEOUT 22 \
SAY "\nwaiting for connect...\n" \
CONNECT "" \
SAY "\nConnected." \
SAY "\nIf the following ppp negotiations fail,\n" \
SAY "try restarting the phone.\n"

*99# è il numero che il cellulare compone per collegarsi, e varia a seconda del cellulare. *99# è quello usato tipicamente da Nokia. Se si usa navigaTre il file dovrà contenere "naviga.tre.it" al posto di "tre.it", ma non garantisco che funzioni.

Se qualcosa non funziona il mio consiglio è di controllare attentamente di aver messo tutte le "\". Esatto, ne avevo dimenticata una.

Lo script di disconnessione, /etc/ppp/peers/tre-disconnect è abbastanza simile:

#!/bin/sh
exec /usr/sbin/chat -V -s -S \
ABORT "BUSY" \
ABORT "ERROR" \
ABORT "NO DIALTONE" \
SAY "\nSending break to the modem\n" \
"" "\K" \
"" "\K" \
"" "\K" \
"" "+++ATH" \
"" "+++ATH" \
"" "+++ATH" \
SAY "\nPDP context detached\n"

Dato che sono due script vanno cambiati i loro permessi in modo che siano eseguibili:

# chmod +x /etc/ppp/peers/tre-connect
# chmod +x /etc/ppp/peers/tre-disconnect

A questo punto si può far partire la connessione con:

# pon tre

Se è tutto impostato correttamente il computer utilizzerà il cellulare come modem per collegarsi ad internet. Si può chiudere la connessione con CTRL-C. Dopo aver verificato che la connessione funziona si può commentare l'opzione "# nodetach" nel file /etc/ppp/peers/tre. Ci si connette con:

# pon tre

e stavolta la disconnessione va fatta con:

# poff tre

Ecco il risultato (nulla di stupefacente, bisogna anche ricordare che il bluetooth fa da "collo di bottiglia"):



Per controllare il traffico effettuato il programma migliore che ho provato è:

# pacman -S vnstat

Infine il bluetooth sul cellulare va impostato in modalità "nascosta", se non altro per un fatto di privacy.

Una nota finale: una connessione 3G implica un consumo di energia notevole per il cellulare, quindi consiglio un occhio alla batteria quando lo si usa.

2010-11-15

Rotazione dello schermo

Aggiornamento all'ultimo post:

Con Xrandr è anche possibile cambiare l'orientamento dello schermo con l'opzione --rotate [left|right|normal|inverted], ricordando di cambiare anche la risoluzione, ovviamente. Come per il caso precedente è stato sufficiente modificare il file ~/.fluxbox/keys aggiungendo queste quattro righe:

# la combinazione Control + Tasto windows + freccia cambia l'orientamento dello schermo
# la freccia indica il basso

Control Mod4 114 :exec xrandr --output LVDS1 --fb 600x1024 --rotate left
Control Mod4 113 :exec xrandr --output LVDS1 --fb 600x1024 --rotate right
Control Mod4 116 :exec xrandr --output LVDS1 --fb 1024x600 --rotate normal
Control Mod4 111 :exec xrandr --output LVDS1 --fb 1024x600 --rotate inverted

Una nota: i numeri 114, 113, 116 e 111 indicano i tasti a cui sono abbinate le freccie (trovati con xev). Con "Control Mod4 left" si ottiene lo stesso risultato, ma preferisco usare i riferimenti assoluti per non fare confusione quando cambio il layout da QWERTY a DVORAK.

2010-11-11

Uso di Xrandr per zoomare parti del desktop

Sul mio computer fisso, dove pure è installato Arch, ho deciso di installare KDE. Tra gli effetti grafici di cui dispone, c'è la possibilità di zoomare l'area sotto al cursore del mouse.

Più volte ho pensato a quanto mi sarebbe piaciuto poter fare qualcosa di analogo sul mio eeePC, dove c'è Arch ma KDE risulterebbe troppo pesante. Esiste un software incluso in xorg, xzoom, ma ingrandisce una porzione di schermo in una finestra nuova. Così dopo qualche ricerca ho trovato il modo di ottenere questo risultato con xrandr.

Xrandr dispone dell'opzione "panning", cioè la possibilità di "inquadrare" la porzione dello schermo sotto al puntatore; se questo tutorial vi fa risparmiare l'oretta di tentativi che ci ho messo io mi considero soddisfatto.

La prima cosa da fare è decidere di quanto sarà l'ingrandimento; nel mio caso volevo quadruplicare l'area di mio interesse, ovvero visualizzare 512x300 pixel dove di solito ne stanno 1024x600.

È necessario avere la dimensione dell'ingrandimento tra le proprie modalità di xrandr; digitando da terminale "xrandr" si ha un output del tipo:

$ xrandr

LVDS1 connected 1024x600+0+0 (normal left inverted right x axis y axis) 220mm x 129mm
1024x600 60.0*+ 65.0
800x600 60.3 56.2
640x480 59.9


La modalità di mio interesse non c'è, ne va creata una nuova seguendo il formato di xorg.conf (modeline). Il formato prevede 10 parametri, di cui solo tre sono intuitivi (nome della modalità, risluzione orizzontale e risoluzione verticale). Tuttavia il programma cvt permette, dati in input risoluzione e frequenza, di trovare i parametri mancanti:

$ cvt 512 300 60

# 512x300 64.28 Hz (CVT) hsync: 20.31 kHz; pclk: 13.00 MHz
Modeline "512x300_65.00" 13.00 512 528 576 640 300 303 313 316 -hsync +vsync


quindi basta dare i comandi:

$ xrandr --newmode "512x300" 13.00 512 528 576 640 300 303 313 316 -hsync +vsync
$ xrandr --addmode LVDS1 512x300


per ottenere:

$ xrandr

LVDS1 connected 1024x600+0+0 (normal left inverted right x axis y axis) 220mm x 129mm panning 1024x600+0+0 tracking 1024x600+0+0 border 128/128/128/128
1024x600 60.0*+ 65.0
800x600 60.3 56.2
640x480 59.9
512x300 59.3


A questo punto con:

$ xrandr --output LVDS1 --mode 512x300 --panning 1024x600+0+0/1024x600+0+0/128/128/128/128


si ottiene un ingrandimento di un'area di 512x300 pixel che si sposta con il puntatore del mouse.

Infine, per facilitarmi la vita, ho aggiunto queste righe al file ~/.fluxbox/keys:

Mod4 65 :exec xrandr --output LVDS1 --mode 512x300 --panning 1024x600+0+0/1024x600+0+0/128/128/128/128
Mod4 58 :exec xrandr --output LVDS1 --mode 1024x600

Premendo le combinazioni "tasto windows"+barra spaziatrice si attiva lo zoom, con "tasto windows"+m si torna alle dimensioni originali.