mercoledì 24 luglio 2013

Creare il link a /dev/dvd in Fedora 19

Riporto qui essenzialmente quanto già scritto nell'ambito di una discussione sul forum Fedora Online con alcune integrazioni. Ad oggi in Fedora 19 (a differenza delle precedenti release) non è presente alcun meccanismo automatico per  la creazione del link /dev/dvd verso il dispositivo dvd (in genere /dev/sr0).
Questa lacuna è piuttosto seccante dal momento che la totalità dei media player punta di default verso questo link, di conseguenza ogni tentativo di avviare la riproduzione di un dvd video fallirà con errori del tipo "device not found" o "can't read from device".

Grazie alle proprietà di systemd è possibile risolvere facilmente questo problema creando un file di configurazione apposito nella directory  /etc/tmpfiles.d/. Tale file, eseguito ad ogni avvio del sistema, ricreerà il link "dimenticato" dagli sviluppatori di Fedora.

Individuiamo innanzitutto il nome esatto del nostro lettore dvd:
 $ cat /proc/sys/dev/cdrom/info  | grep name
   drive name:             sr0
Trovato il nome del dispositivo spostiamoci nella directory /etc/tmpfiles.d/ e creiamo un file dal nome dvd.conf il cui contenuto sarà il seguente:
L /dev/dvd - - - - /dev/sr0
Verifichiamo che il nostro file funzioni e che il symlink a /dev/dvd venga creato:
# systemctl start systemd-tmpfiles-setup-dev.service
Se abbiamo SELinux in modalità "Enforcing" (modalità di default) il comando provocherà un allarme e l'esecuzione verrà bloccata.
Per consentirla diamo:
# grep systemd-tmpfile /var/log/audit/audit.log | audit2allow -M mypol
# semodule -i mypol.pp
Ripetiamo dunque il comando:
# systemctl start systemd-tmpfiles-setup-dev.service
A questo punto il nostro link dovrebbe essere stato creato, controlliamo con:
$ ls -l /dev/dvd
Se l'output che otteniamo è simile a questo:
 lrwxrwxrwx. 1 root root 8 24 lug 14.12 /dev/dvd -> /dev/sr0
significa che la procedura è andata a buon fine il link a /dev/dvd verrà automaticamente ricreato ad ogni boot di sistema.
Se siete interessati ad approfondire le potenzialità dei tmpfiles di systemd, vi consiglio questa esaustiva lettura

giovedì 18 luglio 2013

Come allegare file a Thunderbird direttamente da Dolphin (ovvero replicare il comando "Invia a destinatario di Posta" di Windows)

Un po' per necessità e un po' per gioco di recente ho scritto un servizio per Dolphin simile al ben noto "Invia a destinatario di Posta" che certamente avrete visto sui sistemi Windows.
Esiste già un servizio simile, Attach to Thunderbird, che però, forse anche perché non viene più aggiornato da tempo, non funziona in modo impeccabile: non è possibile allegare ad un nuovo messaggio più file contemporaneamente e inoltre fallisce del tutto in presenza di particolari caratteri al'interno del nome del file che desideriamo allegare.
Per questo motivo ho quindi preparato, con pochissime righe di Perl, una mia variante, partendo dal servizio già esistente; eccola in azione:


Se desiderate provare il servizio sulla vostra macchina, potete scaricarlo da qui.
L'installazione è semplicissima: scompattate l'archivio tar.xz  e copiate il file thunderbird-attachment.desktop nella cartella ~/.kde/share/kde4/services/.
Dopodiché copiate i file thunderbird-attachment.plget_tb_id.pl in ~/bin (oppure /usr/local/bin) e assicuratevi che siano eseguibili (è sufficiente un chmod 775 *.pl)
Lo script è pronto per essere utilizzato; per testarlo aprite Dolphin, selezionate uno o più file, quindi tasto dx del mouse e cliccate su Azioni->Invia E-mail con Thunderbird.

Il servizio usa di default come mail del mittente l'indirizzo associato all'id1 di Thunderbird. Se volete utilizzare un id diverso vi basta apre il file thunderbird-attachment.pl, posizionarvi alla riga n. 26 e  sostituire "id1" con quello di vostra scelta (id2, id3, ecc.)
Per verificare gli indirizzi disponibili e gli id associati, lanciate in un terminale:
$ get_tb_id.pl
Il comando richiede il modulo File::Slurp; se non è già presente nel vostro sistema installatelo con
 # yum install perl-File-Slurp
Il servizio è stato testato unicamente su Fedora 19, non dovrebbero comunque esserci problemi ad eseguirlo su distro diverse. Se così non fosse, segnalatemelo!

P.s. Ho creato anche un pacchetto rpm per Fedora 19, al fine di rendere ancora più agevole l'installazione; potere reperirlo qui

martedì 25 giugno 2013

Abilitare il formato video h.264 in Chromium con Fedora

Chromium così come il suo derivato proprietario Chrome supporta pienamente i codec previsti dal sempre più popolare tag <video> introdotto con l'avvento di HTML5: Theora, WebM e h.264.
Tuttavia nella versione fornita da Fedora il formato video h.264 è stato disabilitato, perché trattasi di una tecnologia ancora coperta da brevetti software, nonostante il suo utilizzo sia di fatto gratuito ed esente da royalties (come dichiarato dalla MPEG LA, l'azienda che gestisce le licenze relative agli standard MPEG).
Questo "limite" del pacchetto di Fedora rientra comunque in un discorso più vasto e complesso della distribuzione di non voler supportare il codec h.264 a livello generale, decisione che è stata ed è tuttora oggetto di pesanti critiche e feroci diatribe. 
Celebre in tal senso, tra le altre, questa discussione dell'anno scorso nella mailing list di Fedora.
Tornando a Chromium, come avrete certamente già immaginato, per abilitare il supporto a H.264 occorre per forza di cose ricompilare il programma. L'operazione è in sé piuttosto semplice, il rovescio della medaglia è che la ricompilazione del browser, a secondo dell'hardware della vostra macchina, può richiedere anche diverse ore.
Quello che ad oggi è l'rpm ufficiale per Fedora non è adatto ai nostri scopi,  poiché il pacchetto non si basa sui sorgenti "vanilla" del browser ma bensì su una versione "clean", ripulita cioè di alcuni componenti, tra cui le preziose librerie richieste da h.264
Fortunatamente in rete ho trovato nei repository di Russian Fedora (un'interessantissima derivata) un pacchetto che fa proprio al caso nostro: esente dal difetto di cui sopra e che, con pochissime modifiche, può essere facilmente ricompilato.
Andiamo quindi sul sito del servizio Koji di Russian Fedora e preleviamo l'ultimo source rpm disponibile per Fedora 18. Alla data in qui sto scrivendo il pacchetto più recente è chromium-28.0.1500.52-1.fc18.R.src.rpm (attenzione che si tratta di un rpm di oltre 1GB!!)
Terminato il download, andiamo ad scompattare il pacchetto:
$ rpm -ihv chromium-28.0.1500.52-1.fc18.R.src.rpm
Entriamo ora nella cartella ~/rpmbuild/SPECS/ e con un editor di testo (nano, vim, gedit, kwrite, ecc.) apriamo il file chromium.spec, dopodichè localizziamo la seguente porzione di testo:
%build
export GYP_GENERATORS=make
build/gyp_chromium --depth=. \
-D linux_sandbox_path=%{_libdir}/%{name}/chrome-sandbox \
-D linux_sandbox_chrome_path=%{_libdir}/%{name}/chrome \
-D linux_link_gnome_keyring=0 \
-D use_gconf=0 \
-D werror='' \
-D use_system_sqlite=0 \
-D use_system_libxml=0 \
-D use_system_zlib=0 \
-D use_system_bzip2=1 \
-D use_system_libbz2=1 \
-D use_system_libpng=0 \
-D use_system_libjpeg=1 \
-D use_system_libevent=1 \
-D use_system_flac=1 \
-D use_system_vpx=1 \
-D use_system_speex=1 \
-D use_system_libusb=1 \
-D use_system_libexif=1 \
-D use_system_libsrtp=1 \
-D use_system_libmtp=1 \
-D use_system_opus=0 \
-D use_system_libwebp=1 \
-D use_system_harfbuzz=0 \
-D use_system_minizip=1 \
-D use_system_yasm=1 \
-D use_system_xdg_utils=1 \
-D build_ffmpegsumo=1 \
-D use_system_ffmpeg=0 \
-D use_pulseaudio=1 \
-D use_system_v8=0 \
-D linux_link_libpci=1 \
-D linux_link_gsettings=1 \
-D linux_link_libspeechd=1 \
-D linux_link_kerberos=1 \
-D linux_link_libgps=1 \
        -Dgoogle_api_key='AIzaSyD1hTe85_a14kr1Ks8T3Ce75rvbR1_Dx7Q' \
-Dgoogle_default_client_id='4139804441.apps.googleusercontent.com' \
-Dgoogle_default_client_secret='KDTRKEZk2jwT_7CDpcmMA--P' \
Come dicevo prima, le modifiche che occorre fare per attivare il fase di compilazione il supporto al codec h.264 sono tutt'altro che complicate; è sufficiente aggiungere i seguenti parametri al comando gyp_chromium:
        -D ffmpeg_branding=Chrome \
        -D proprietary_codecs=1 \
Fatta questa operazione il risultato finale sarà di questo tipo:
build/gyp_chromium --depth=. \
-D linux_sandbox_path=%{_libdir}/%{name}/chrome-sandbox \
-D linux_sandbox_chrome_path=%{_libdir}/%{name}/chrome \
-D linux_link_gnome_keyring=0 \
-D use_gconf=0 \
-D werror='' \
-D use_system_sqlite=0 \
-D use_system_libxml=0 \
-D use_system_zlib=0 \
-D use_system_bzip2=1 \
-D use_system_libbz2=1 \
-D use_system_libpng=0 \
-D use_system_libjpeg=1 \
-D use_system_libevent=1 \
-D use_system_flac=1 \
-D use_system_vpx=1 \
-D use_system_speex=1 \
-D use_system_libusb=1 \
-D use_system_libexif=1 \
-D use_system_libsrtp=1 \
-D use_system_libmtp=1 \
-D use_system_opus=0 \
-D use_system_libwebp=1 \
-D use_system_harfbuzz=0 \
-D use_system_minizip=1 \
-D use_system_yasm=1 \
-D use_system_xdg_utils=1 \
-D build_ffmpegsumo=1 \
-D use_system_ffmpeg=0 \
-D use_pulseaudio=1 \
-D use_system_v8=0 \
-D linux_link_libpci=1 \
-D linux_link_gsettings=1 \
-D linux_link_libspeechd=1 \
-D linux_link_kerberos=1 \
-D linux_link_libgps=1 \
-D ffmpeg_branding=Chrome \
-D proprietary_codecs=1 \
        -Dgoogle_api_key='AIzaSyD1hTe85_a14kr1Ks8T3Ce75rvbR1_Dx7Q' \
-Dgoogle_default_client_id='4139804441.apps.googleusercontent.com' \
-Dgoogle_default_client_secret='KDTRKEZk2jwT_7CDpcmMA--P' \
Salvate e chiudete il file. Se siete utilizzatori di chromium-pepper-flash e volete continuare ad usarlo con questo pacchetto alternativo di Chromium dovete sostituire il file  ~/rpmbuild/SOURCES/chromium-wrapper con la versione da me modificata e scaricabile da qui. In caso contrario ignorante tranquillamente questo passaggio.

Terminate le attività di modifica, passiamo alla compilazione; innanzitutto scarichiamo le dipendenze necessarie:
 $ sudo yum-builddep chromium.spec
Se siete su Fedora a 64 bit e il precedente comando vi restituisce l'errore:
Nessun pacchetto trovato per /lib/libz.so.1
installate il pacchetto zlib.i686 per risolverlo, dopodiché ripetete l'esecuzione del comando yum-builddep.
Fatto questo lanciamo finalmente la vera e propria compilazione del pacchetto:
$ rpmbuild -ba chromium.spec
Come detto in precedenza l'operazione potrebbe richiedere parecchio tempo, quindi mettetevi comodi :-)
Al termine, se tutto è andato per il verso giusto, troverete il pacchetto rpm di Chromiun in  ~/rpmbuild/RPMS/i686 o ~/rpmbuild/RPMS/x68_64, a seconda dell'architettura del vostro pc, pronto per essere installato.
Effettuiamo ora qualche test per verificare l'effettiva disponibilità del codec h.264; iniziamo con l'aprire la pagina della versione di prova HTML5 di youtube.
Ora in corrispondenza della voce h.264 dovrebbe esserci un segno di spunta verde e non più un punto esclamativo rosso.

Collegandovi alla pagina  HTML5 tests - video su quirksmode.org potete provare la riproduzione di uno spezzone di Big Buck Bunny in formato h.264 (oltre che WebM e Theora)
Vimeo dovrebbe ora consentirvi l'utilizzo del player HTML5 al posto di Flash. Aprite un qualunque video (ad esempio questo) e cliccate su Switch to HTML5 Player. Enjoy! :-)

P.s.
Per chi volesse provare questo pacchetto alternativo di Chromium, risparmiandosi l'avventura della ricompilazione, potete trovare nel mio repository personale (e sperimentale) il pacchetto compilato a 64 bit

EDIT:
Ho appena aggiunto anche la versione 32 bit. Non posso invece caricare nel repo (creato all'intero di un account dropbox free) il source rpm per ovvi motivi di spazio, sorry!

EDIT2 (27/07/13):
Aggiungo alcune informazioni che ritengo molto utili da sapere:
- Per la compilazione su x86_64 è richiesta una dipendenza che non è indicata nel file spec e senza la quale  la compilazione stessa fallisce: libstdc++.i686. Installate il pacchetto prima di procedere con rpmbuild.
- A partire da chromium-28.0.1500.71-1.1.fc19.R il team di Russian Fedora ha deciso di utilizzare di default Aura, la nuova interfaccia utente progettata per ChromeOS. In attesa che Aura diventi più maturo consiglio caldamente di disattivarne la compilazione: è sufficiente all'interno del file spec sostituire  use_aura=1 in use_aura=0.
Se invece volete provate Aura, sappiate che la vostra scelta causerà parecchi problemi a chromium: nessun plugin (eccetto chromium-pepper-flash) verrà caricato, non sarà possibile riprodurre video HTML5 a schermo intero e l'icona di chromium non verrà visualizzata nella barra delle finestre.