Installare Skype su Fedora

Per installare skype su Fedora è sufficiente scaricare il pacchetto rpm presente nella pagina di download ufficiale di skype (http://www.skype.com/it/download-skype/skype-for-computer/), attualmente marcata come Fedora 16 32 bit.
L’installazione delle dipendenze viene fatta in automatico da Software; una volta installato ed avviato, vi accorgerete che skype è sì funzionale, ma con font, icone e tema della GUI assolutamente compromessi.

Per sistemare la GUI di skype su Fedora occorre installare il pacchetto gtk-murrine-engine.i686

sudo dnf install gtk-murrine-engine.i686

Per aumentare l’integrazione di skype con Gnome Shell, infine, consiglio di installare la bella shell extension di chrisss404, che si può installare da qui:

https://extensions.gnome.org/extension/696/skype-integration/

Testato su Fedora 23 x64.

Uebbi – Indicazioni su come sviluppare il firmware

Nota: a chi si sia perso cosa sia Uebbi, consiglio di leggere un mio articolo precedente.

 



Il firmware del nostro dispositivo Uebbi è basato su Linux ed è (fortunatamente) per gran parte modificabile e personalizzabile.
In questo articolo vi illustrerò quali passaggi occorrono per creare un proprio ambiente di sviluppo per il firmware di Uebbi. Prima di procedere con gli aspetti pratici, comunque, ecco cosa vi serve come conoscenze di base.

Conoscenze necessarie

Uebbi è un firmware basato su Gnu/Linux. Una buona conoscenza di come funziona Gnu/Linux è pertanto basilare per sapere dove mettere le mani, soprattutto se si vogliono modificare aspetti core del device (riconoscimento hardware, avvio di servizi, giusto per citare un paio di esempi).
Per chi sia completamente a digiuno di Gnu/Linux, un buon punto di partenza può essere la documentazione offerta dall’Italian Linux Documentation Project (Pluto); sappiate comunque che non basterà una mezz’oretta (e neanche una settimana) per dominare un sistema Gnu/Linux.
Un discorso a parte riguarda invece lo sviluppo e la modifica dell’interfaccia grafica di Uebbi, che è progettato in Python (per la precisione con le pygtk); per questo ambito di sviluppo, non è necessario conoscere a fondo Gnu/Linux (anche se è comunque consigliato usarlo come ambiente di sviluppo), ma è ovviamente necessario conoscere, almeno di base, il linguaggio Python. Un buon sito dove documentarsi è il sito del progetto stesso, che contiene una ricca documentazione (in inglese). Attenzione, Uebbi è sviluppato con Python versione 2.5 e, sebbene i costrutti base siano gli stessi, è meglio leggere direttamente la documentazione relativa alla versione con cui poi si deve sviluppare.

Struttura del Firmware

Il Firmware di Uebbi è caratterizzato da due directory (bin e lib) e da sei files: app.cramfs-milano, data.yaffs2-milano, emergency-root.cramfs, root.cramfs-milano, update.sh e Vmlinux.gz.
Di questi, l’unico che non può essere modificato senza avere i sorgenti (che non sono a nostra disposizione) è Vmlunux.gz, che carica il kernel linux di base.
I file che ci interessano per le modifiche al firmware sono i seguenti:

root.cramfs-milano

Questo file immagine contiene il sistema operativo Gnu/Linux base, con i binari e le librerie base per il funzionamento del sistema operativo.

data.yaffs2-milano

In questo file immagine è contenuta la directory /root (e relative sottodirectory) di Uebbi. Con le modifiche apportate dal firmware tedesco (su cui si basa il nostro), molti file di configurazione di sistema sono stati spostati dal root.cramfs-milano a questo file immagine.

app.cramfs-milano

In questo file immagine sono contenute le app di Uebbi, ovvero l’interfaccia grafica scritta in Python.

update.sh

Questo file è uno script bash, e contiene la logica dei passaggi da eseguire quando si aggiorna il firmware.

Ambiente di sviluppo consigliato

Per poter sviluppare un nuovo firmware per Uebbi, consiglio di utilizzare un computer con installata una versione recente di Gnu/Linux. La distribuzione scelta non è importante, anche se consiglio di restare tra le più blasonate (Debian, Ubuntu, OpenSuse, Fedora, Linux Mint) anche solo per il numero di pacchetti software già pronti all’uso.
In questa guida si presuppone che stiate usando Ubuntu o OpenSuse (solo perché le conosco meglio di altre).
Per poter lavorare sulle immagini occorre avere installati i seguenti pacchetti:

  • Per Debian/Ubuntu/LinuxMint
    cramfsprogs, unyaffs
  • Per OpenSuse
    unyaffs, yaffs2utils

Per altre distribuzioni….cercate nei rispettivi package manager.

L’interfaccia grafica di Uebbi è, come dicevamo, costruita usando Python. Vengono utilizzati dei file python compilati (con estensione pyc).
I file pyc possono essere agilmente decompilati utilizzando il tool (che funziona con wine, su Linux) EasyPythonDecompiler e quindi editati con il vostro file di testo preferito.  Per ricompilarli però serve la stessa versione di python presente su Uebbi (la 2.5). Tale versione è piuttosto vecchia; consiglio quindi di creare una macchina virtuale  con VirtualBox, basata su una vecchia versione di Linux che utilizzerete solo per ricompilare i sorgenti modificati. Debian 5.0 è un’ottima candidata in questo caso, le iso di installazione sono reperibili negli archivi dei mirror.

Creare le directory per lo sviluppo

Copiate il firmware in una directory nella vostra Home (nell’esempio /home/user/fwdev) ed eseguite i seguenti comandi che serviranno a:

  • montare i file immagine in directory temporanee
  • copiare il contenuto delle immagini nelle directory di lavoro
  • smontare i file immagine
[email protected]:~/fwdev $ mkdir temp
[email protected]:~/fwdev $ sudo mount -t cramfs app.cramfs-milano temp
[email protected]:~/fwdev $ sudo cp -a temp app.cramfs
[email protected]:~/fwdev $ sudo umount temp
[email protected]:~/fwdev $ sudo mount -t cramfs root.cramfs-milano temp
[email protected]:~/fwdev $ sudo cp -a temp root.cramfs
[email protected]:~/fwdev $ sudo umount temp
[email protected]:~/fwdev $ sudo unyaffs2 data.yaffs2-milano data.yaffs2
[email protected]:~/fwdev $ rmdir temp

A questo punto avremo la possibilità di lavorare sul sistema di base Linux di Uebbi all’interno della directory root.cramfs, lavorare sulla configurazione del sistema di base e sulla configurazione delle app all’interno della directory data.yaffs2 e lavorare sullo sviluppo e modifica dell’interfaccia grafica all’interno della directory app.cramfs.

Modificare il sistema di base e le configurazioni

Per modificare il sistema di base e le configurazioni delle app occorre avere conoscenze abbastanza approfondite di Gnu/Linux e di scripting Bash (le due cose di solito vanno di pari passo 🙂 ).
Come regola generale fate sempre una copia di backup del file originale che state per modificare, prima di mettervi all’opera; in caso di disastri, sarà molto più semplice tornare sui propri passi.
Per le configurazioni, alcune dritte; in data.yaffs troverete i seguenti files sensibili:

  • etc/profile => contiene i path di librerie e binari; da modificare se testate librerie o binari in path non inclusi nella lista
  • etc/rc.local => è lo script che lancia i servizi all’avvio del sistema, compresi gli script personalizzati per il sync dell’orologio, il telnet, il dlna
  • setup_data/setup.init.db => è il file di configurazione generale di default delle app di Uebbi

La directory scripts contiene (con molta fantasia) vari script bash, lanciati per lo più all’interno di etc/rc.local per l’avvio di servizi al boot.
La directory www/ contiene il/i siti web serviti dal WebServer.

Modificare (o aggiungere!) le app di Uebbi

All’interno della directory app.cramfs c’è la struttura delle app di Uebbi. Le app si trovano nella directory milano/app. Per modificare una delle app esistenti consiglio di copiare l’intera directory dell’app interessata e decompilare la copia con EasyPythonDecompiler.
Una volta ottenuti i sorgenti, consiglio di rinominarli (il decompilatore dà loro l’estensione .pyc_dis, cambiatela in .py).
Quindi eseguite le modifiche che ritenete necessarie e copiate il sorgente modificato all’interno della macchina virtuale con Debian5. La compilazione di un sorgente dal nome di esempio.py avviene all’interno di una sessione di terminale con questi comandi:

[email protected]: ~$ python
Python 2.5.2
Type "help", "copyright", "credits" or "license" for more information.
>>> import py_compile
>>> py_compile.compile('esempio.py')
>>> 
[email protected]: ~$ ls
esempio.py esempio.pyc
[email protected]: ~$



Le app di Uebbi si appoggiano spesso a moduli esterni importati nelle prime righe del codice; tali moduli, anch’essi compilati in pyc (e quindi anch’essi decompilabili) si trovano in milano/modules e sono a loro volta suddivisi in widget, system e mzsys. Per comprendere a fondo come funziona una app di Uebbi è spesso necessario decompilare anche i moduli da cui dipende ed – eventualmente – operare modifiche anche su questi ultimi.
Nel caso in cui si volesse aggiungere una nuova app è necessario (oltre a scriverla correttamente!):

  • aggiungere la directory dell’app in milano/app
  • decompilare e modificare i files milano/app/home/homemenuwin.pyc e milano/app/home/menuicongrid.pyc per includere la voce di menu dell’app all’interno degli stessi.
  • creare un file con estensione .desktop all’interno della directory milano/app/desktops per la nuova app
  • Aggiungere i file png per il lancio della nuova app in milano/resources/images/global/home/; per la nuova app “esempio” serve l’icona esempio.png (icona colorata) ed esempio_p.png (icona “pressed” in toni di grigio). Le dimensioni delle icone png sono 58×58 pixel.

Ricreare i file immagine dopo le modifiche

Per ricreare i file immagine dopo aver effettuato alcune modifiche i comandi per root.cramfs-milano, app.cramfs-milano e data.yaffs2-milano sono, rispettivamente:

[email protected]:~/fwdev $ sudo mkfs.cramfs root.cramfs/ root.cramfs-milano
[email protected]:~/fwdev $ sudo mkfs.cramfs app.cramfs/ app.cramfs-milano
[email protected]:~/fwdev $ sudo mkyaffs2 data.yaffs2/ data.yaffs2-milano

Nota: se eseguite una modifica solo su una delle immagini, potete ricreare solo quel file immagine e copiarlo sulla SD assieme alle directory lib e bin e assieme ai file Vmlinux.gz e update.sh per aggiornare solo quella parte del firmware. In questo modo la procedura di reflash è più veloce e – se non modificate il file immagine data.yaffs2-milano – le vostre impostazioni personali resteranno intatte.

Buon Lavoro

A tutti coloro che, stuzzicati da questo articolo, abbiano deciso di provare a giocare il con firmware di Uebbi auguro un proficuo lavoro (e mi raccomando, condividete i vostri sviluppi).
Per stimolare ulteriormente la vostra curiosità, e per darvi un esempio funzionante su cui lavorare nel caso in cui vogliate creare nuove app, qui sotto trovate il sorgente della nuova app “U&B Utils” che serve per il reboot del dispositivo e per l’avvio e spegnimento del demone ftpd.
Vi ricordo inoltre che potete trovare il changeLog dei lavori svolti dul Firmware2.0 e i sorgenti modificati nel mio articolo precedente.

Listato di U&B Utils


# Embedded file name: /home/mindwave/src_voda/prizm_mid/milano/app/settings/reboot.py
import runtime
import config
import os
import manager
from widgets import pyapp
from widgets.widget import SoftButtonContainer
from widgets.scrollview import SimpleUniformList
from widgets.ulist import UListTextItem
if config.target:
    PROFILE_PATH = '/root/.profile'
else:
    PROFILE_PATH = '~/.uebbi_profile'

class Main(pyapp.PyApp):
	name = 'reboot'
	#exclusive_modules = ('Chrono',)

	def __init__(self, *args, **kwds):
		print ''
		print 'KWDS'
		print kwds
		print ''
		print ''
		print 'args'
		print args
		print ''
		print ''
		pyapp.PyApp.__init__(self)

		main_win = Reboot_MainView(self)
		self.add_window(main_win)



class Reboot_MainView(pyapp.Window):
    """
    \xec\x84\xa4\xec\xa0\x95\xea\xb0\x92 \xec\xb4\x88\xea\xb8\xb0\xed\x99\x94 \xed\x95\x98\xeb\x8a\x94 window class
    """

    def __init__(self, app):
        self.__super.__init__(app)
        self.set_title(_('U&B Utils'))
        btn_conf = {'right': (_('Back'), 'right')}
        self.soft_btn = SoftButtonContainer(self, btn_conf)
        self.soft_btn.add_callback('softbutton-clicked', self.cb_btn_back)
        self.make_list()

    def make_list(self):
        """
        \xeb\xa6\xac\xec\x8a\xa4\xed\x8a\xb8 \xec\x83\x9d\xec\x84\xb1
        """
        size = (runtime.app_width - 14, 160)
        sb_size = (49, 84)
        self.text_list = [_('Riavvia Uebbi'), _('Avvia il servizio FTP'), _('Ferma il servizio FTP')]
        self._list = SimpleUniformList(self, (258, UListTextItem.item_height * 3), UListTextItem, self.text_list)
        sc_view = self._list.get_view()
        sc_view.pos = (35, 40 - runtime.indicator_height)
        self._list.add_callback('selected', self.selected)

    def selected(self, index):
        """
        \xeb\xa6\xac\xec\x8a\xa4\xed\x8a\xb8 \xec\x84\xa0\xed\x83\x9d \xec\xb2\x98\xeb\xa6\xac
        """
        if index == 0:
            self.cb_reboot()
        elif index == 1:
	    self.start_ftp()
	elif index == 2:
	    self.stop_ftp()
	    
    def cb_reboot(self):
        """
        factory reset callback
        """

        def dialog_cb(result):
            if result == 0:
                self.user_reset(False)

        from widgets.dialog import YesNoDialog
        dialog = YesNoDialog('confirm', _('Riavvio Uebbi?'))
        dialog.add_callback('dialog-result', dialog_cb)

    def user_reset(self, user = True):
        """
        \xec\x84\xa4\xec\xa0\x95\xea\xb0\x92 \xec\xb4\x88\xea\xb8\xb0\xed\x99\x94 \xeb\xb6\x80\xeb\xb6\x84
        """
        manager.service.stop_all_services()
        os.system('/sbin/reboot')
        return

    def start_ftp(self):
	#Avvio il servizio ftp per il caricamento delle pagine web
	def dialog_cb(result):
            if result == 0:
                self.ftp_on(False)

        from widgets.dialog import YesNoDialog
        dialog = YesNoDialog('confirm', _('Avvio il servizio FTP?'))
        dialog.add_callback('dialog-result', dialog_cb)

    def ftp_on(self, user = True):
	from widgets.dialog import MessageDialog
	os.system('/usr/bin/tcpsvd -vE 0.0.0.0 21 /usr/sbin/ftpd -w /root/www &')
	dialog = MessageDialog('confirm', _('Servizio FTP avviato per /root/www. Ricordati di spegnere il servizio il prima possibile.'))
	return

    def stop_ftp(self):
	#Avvio il servizio ftp per il caricamento delle pagine web
	def dialog_cb(result):
            if result == 0:
                self.ftp_off(False)

        from widgets.dialog import YesNoDialog
        dialog = YesNoDialog('confirm', _('Spengo il servizio FTP?'))
        dialog.add_callback('dialog-result', dialog_cb)

    def ftp_off(self, user = True):
	from widgets.dialog import MessageDialog
	os.system('/usr/bin/killall tcpsvd')
	dialog = MessageDialog('confirm', _('Servizio FTP fermato.'))
	return

    def cb_btn_back(self, menu):
        """
        back button callback
        """
        self.close()

Webby (Uebbi) – Firmware 2.0

black-green-warning-1-md

ATTENZIONE: È uscito un nuovo firmware più aggiornato!
U&B (Uebbi) – Firmware 2.1


Per chi non conoscesse Webby/Uebbi, rimando all’articolo precedente

Dopo circa un mese dal precedente articolo, annuncio con piacere un nuovo firmware per Uebbi (ribattezzato in U&B), con molti miglioramenti, nuove funzionalità e un set di icone ridisegnato.
Ecco tutte le novità in breve, più sotto tutti i dettagli (e per i curiosi, in calce c’è tutto il changelog e i sorgenti python):

  • Ripristinato lo screensaver con l’indicazione della temperatura
  • Il pulsante “Connected Home” funziona nuovamente, permettendo di usare U&B come client/server DLNA
  • Il TwonkyMedia server (servizio collegato al DLNA) è ora raggiungibile via web browser sulla porta 9000
  • Rimossa l’app Flickr (non funzionava più in seguito a un cambiamento di API di flickr stessa)
  • Aggiunta l’app Timer (presa dal firmware 1.5.1 di hubster), di estrema utilità in cucina! 😉
  • Aggiunta una nuovissima (scritta da zero) app dal nome “U&B Utils” che permette il controllo di alcuni aspetti aggiuntivi di U&B.
  • Aggiunta la possibilità di avviare un server ftp
  • Modificato il banner di welcome che appare via Telnet (non più Webby, ma Webby2)
  • Nuovo set di icone grafiche, grazie al lavoro di Riccardo Zanghellini
  • Nuova icona del menu Home (sempre grazie a Riccardo)
  • La selezione della lingua è ora possibile dal menu Impostazioni > Lingua. È possibile scegliere tra tedesco, inglese e italiano.
  • Il Webserver integrato in U&B è ora diventato più “dinamico”.
  • Nuova sezione Giochi, raggiungibile dal WebServer

Sensore della temperatura

IMAG0569La visualizzazione della temperatura ambientale era una di quelle funzionalità presenti sul firmware di Telecom Italia, e che era stata persa nel firmware tedesco.
Grazie a varie fonti online, e agli spunti messi a disposizione dal sito mikrocontroller.net, ora la temperatura viene di nuovo visualizzata.

DLNA nuovamente funzionante

Ripristinare il pacchetto DLNA è stato forse uno dei lavori più complessi dell’intero progetto. Ora non solo il DLNA funziona correttamente, ma il TwonkyMedia Server (il servizio alla base del DLNA presente su U&B) è raggiungibile con un semplice browser web alla pagina http://<indirizzo_u&b>:9000 .
C’è un unico neo, non risolto (purtroppo): se si crea una playlist di canzoni e si vuole riprodurla su U&B verrà riprodotta solo la prima traccia.
Il bug era già presente, purtroppo non sono riuscito a individuare dove si trova, ma dovrebbe essere nel codice pygtk dell’app DLNA. Infatti la stessa playlist, se diretta verso un client diverso, viene riprodotta correttamente.
In ogni caso, il DLNA ora funziona (abbastanza 🙂 ) bene, quindi è possibile usare U&B per riprodurre, condividere o redirigere flussi da e per altri client/server abilitati.

Nuova app Timer

CAM00391Questa app in realtà non è nuova, ma presa a prestito dal firmware 1.5.1 di Hubster sfr. Permette di avviare un semplice cronometro per calcolare il tempo trascorso oppure un timer (in figura) per un conto alla rovescia. Alla fine del conto alla rovescia parte un allarme sonoro.
Personalmente, lo sto usando con grande soddisfazione per calcolare i tempi di cottura in cucina 🙂
Anche per far digerire questa app al resto dell’ambiente c’è voluto un po’ di lavoro (descritto nel dettaglio nel Changelog).

Nuova App U&B Utils

Ho creato questa nuova app per gestire un paio di processi di sistema di U&B.
Cliccando sull’app e selezionando la voce “Riavvia Uebbi” IMAG0574è possibile eseguire un riavvio del dispositivo senza doverlo staccare e riattaccare dalla presa di corrente (comodo anche per il reflash del dispositivo).
Gli altri due menu servono, rispettivamente, per avviare e fermare il servizio FTP su U&B.
Il servizio FTP è configurato per accedere in lettura e scrittura alla directory /root/www, che è quella utilizzata dal WebServer per offrire le pagine html.
Una nota di sicurezza sul servizio FTP; il servizio, una volta avviato, permette il caricamento di dati senza che sia necessario mettere alcuna password, quindi è intrinsecamente insicuro.
Usatelo solo al bisogno, per creare/aggiornare con facilità le pagine web offerte dal vostro U&B.

Nuovo set di icone

uebbi_iconsL’aspetto visivo non è meno importante di quanto gira “sotto al cruscotto” di U&B. Ringrazio ancora l’amico Riccardo di www.neocreations.it per la disponibilità ad offrire le proprie competenze grafiche al progetto.
Le icone, esclusa quella di U&B che è stata creata da zero, sono state create modificando le Free-flat-icons di Nick Frost di pixelbuddha.net

WebServer più “Dinamico”

uebbi_webserverHo creato un nuovo script (in /root/scripts/index_renew.sh) che gira ad ogni riavvio di U&B e che controlla le directory presenti in /root/www.
Lo script considera ogni directory come un “sito” a sé stante, con una propria pagina index.html e, sulla base di questo presupposto, ricostruisce la pagina principale del WebServer perché contenga la lista aggiornata dei “sotto-siti” in esso contenuti. A titolo di esempio, ho creato un mini-sito “Giochi” che dimostra come sia possibile creare siti “dinamici” usando solo html e JavaScript.
Il WebServer di U&B è raggiungibile puntando un browser all’indirizzo http://<indirizzo_u&b>

Altre modifiche

Ci sono altre piccole modifiche sotto al cofano del nuovo firmware di U&B, alcune di nessuna utilità (un esempio? dal menu Impotazioni > Sistema > Informazioni di Sistema è possibile leggere il numero di versione del firmware: 2.0.0): altre sono piccole migliorie che quasi sfuggono (ad esempio, è stato modificata leggermente l’app per il meteo per migliorare la resa estetica).

 Conclusioni

Spero che questo nuovo firmware sia utile a tutti i possessori di Uebbi (anzi, U&B 🙂 ).
Conto prossimamente di scrivere un articolo per spiegare nel dettaglio come ho fatto a modificare il firmware di U&B, quali comandi ho utilizzato e quali programmi e conoscenze di base servono; spero che possa essere utile a qualcuno di voi per migliorare ancora U&B.
Per qualsiasi dubbio/perplessità, ci si può sentire sul forum di uebbi (http://uebbiradio.altervista.org); un grazie particolare anche al gestore di uebbiradio, perché senza il suo lavoro gran parte delle app di U&B non potrebbero funzionare.


Scarica il Firwmare 2.0 di U&B
Changelog delle Modifiche
Sorgenti Python modificati

black-green-warning-1-md

ATTENZIONE: il download dei firmware è stato spostato (su registrazione) su www.uebproject.org