domenica 24 aprile 2011

Schermo nero al ritorno dalla sospensione

Dopo aver aggiornato il kernel Linux alla versione 2.6.38 (ma non sono sicuro che sia questa particolare versione del kernel la causa del problema) al ritorno dalla sospensione trovo lo schermo nero senza la possibilità di fare nulla. In realtà basta premere ALT + CTRL + F7 (o altro tasto funzione associato alla console in cui è avviato il server grafico X.org) per far comparire la la schermata per l'inserimento della password e tornare a utilizzare il proprio computer. Nel file di log /var/log/pm-suspend.log in corrispondenza del ritorno dalla sospensione compare qualcosa del tipo:
/usr/lib/pm-utils/sleep.d/99video suspend suspend: success.
Sun Apr 24 17:17:00 CEST 2011: performing suspend
Sun Apr 24 17:18:39 CEST 2011: Awake.
Sun Apr 24 17:18:39 CEST 2011: Running hooks for resume
Running hook /usr/lib/pm-utils/sleep.d/99video resume suspend:
Couldn't get a file descriptor referring to the console
VT_DISALLOCATE: Device or resource busy
deallocvt: could not deallocate console 63
Come segnalato qui per risolvere il problema dovrebbe essere sufficiente creare il file /etc/pm/config.d/10no-vt-switch contenente semplicemente
ADD_PARAMETERS=" --quirk-no-chvt "
però non ho provato personalmente questa soluzione. Il problema comunque potrebbe essere molto legato al particolare hardware del computer usato. Quindi controllate se i vostri componenti sono gli stessi di quelli riportati sul Wiki di Debian.

Emacs: effettuare il controllo della sintassi di documenti LaTeX

Nel post Opzioni utili per comporre documenti LaTeX in GNU Emacs + AUCTeX illustrai le principali opzioni di Emacs che trovo particolarmente utili per scrivere documenti LaTeX. Ora voglio mostrare l'impostazione di uno strumento esterno a AUCTeX ma che ritengo molto utile.

Il pacchetto Flymake, presente di default nelle ultime versioni di GNU Emacs, permette di effettuare un controllo della sintassi al volo, cioè durante la scrittura di un codice. Quindi per trovare un errore formale all'interno di questo non sarà necessario avviare manualmente la compilazione ma sarà Emacs stesso ad avvisare della loro presenza. Per fare questo Flymake si appoggia a programmi esterni di controllo della sintassi. Per quanto riguarda LaTeX esistono almeno un paio di programmi specifici: Lacheck e ChkTeX. Il primo non è più sviluppato dal 1997 e ha difficoltà con macro molto elaborate, quindi molto probabilmente non vorrete utilizzarlo (sebbene sia lo strumento predefinito da Emacs per effettuare l'analisi sintattica, non al volo, che si avvia con C-c C-c Check RET. È possibile cambiare questa impostazione modificando la variabile TeX-command-list come visto prima), il secondo progetto è un po' più attivo. Inoltre per effettuare un controllo della sintassi è possibile anche utilizzare i compilatori stessi latex, pdflatex, ecc., utilizzati con delle opportune opzioni di compilazione che vedremo più avanti.

Volendo usare ChkTex bisogna inserire nel proprio file di inizializzazione ~/.emacs il seguente codice:
(require 'flymake)
(defun flymake-get-tex-args (file-name)
  (list "chktex" (list "-q" "-v0" file-name)))
(add-hook 'LaTeX-mode-hook 'flymake-mode) 
Analizziamo nel dettaglio queste istruzioni: la riga (require 'flymake) dice semplicemente a Emacs di caricare il pacchetto flymake; le due successive specificano il programma esterno da usare (nel caso specifico chktex) e i relativi argomenti da passare, nel nostro caso -q -v0 seguiti dal nome del file che si sta modificando contenuto nella variabile file-name. Per capire cosa fanno le varie opzioni consultare il manuale. Infine l'ultima fa in modo che ogni volta che si apre un documento con la major mode LaTeX-mode venga attivata la minor mode flymake-mode. Se non si vuole aggiungere questa ultima funzione sarà necessario attivare manualmente la modalità con M-x flymake-mode.

Penso sia ora chiaro come bisogna modificare il codice precedente per appoggiarsi a uno strumento diverso da ChkTex. Bisogna sostituire a chktex il nome del programma desiderato e inserire al posto di "-q" "-v0" l'eventuale elenco di opzioni volute. Per esempio, volendo usare Lacheck, senza alcuna opzione passata da linea di comando, dovremo inserire
(require 'flymake)
(defun flymake-get-tex-args (file-name)
  (list "lacheck" (list file-name)))
(add-hook 'LaTeX-mode-hook 'flymake-mode) 

Come detto, è possibile anche utilizzare il compilatore stesso per effettuare un controllo della sintassi. Infatti quando compiliamo un documento il compilatore ci avvisa della presenza di errori. Tuttavia normalmente l'esecuzione della compilazione viene interrotta al punto in cui viene incontrato un errore, mentre noi vogliamo che tutto il codice sorgente venga analizzato affinché siano riportati tutti gli errori presenti e ciò può essere realizzato passando a pdflatex l'opzione -interaction=nonstopmode. Altre opzioni utili nel nostro caso sono -draftmode, che impedisce la creazione del file di output in PDF velocizzando così l'esecuzione del controllo, e -file-line-error, per fare in modo che Flymake possa effettuare correttamente il parsing dell'output di pdflatex. Dunque per utilizzare pdflatex come strumento di controllo della sintassi dovremo inserire il seguente codice nel nostro file di inizializzazione:
(require 'flymake)
(defun flymake-get-tex-args (file-name)
  (list "pdflatex"
        (list "-file-line-error" "-draftmode" "-interaction=nonstopmode" file-name)))
(add-hook 'LaTeX-mode-hook 'flymake-mode) 
Ricordo sempre che si potrebbe non voler inserire l'ultima riga preferendo attivare manualmente la modalità flymake-mode solo nei documenti in cui si desidera effettivamente svolgere l'analisi sintattica.

Una volta attivata la modalità flymake-mode gli errori saranno evidenziati in rosso e passando sul testo incriminato con il mouse oppure usando il comando M-x flymake-display-err-menu-for-current-line verrà mostrata la spiegazione dell'errore segnalato.

Devo evidenziare che pdflatex è piuttosto dispendioso dal punto di vista delle risorse di sistema e inoltre molto lento per i documenti grandi. Facendo delle prove su un documento di circa 200 pagine nel documento di output ChkTex e Lacheck hanno impiegato meno di mezzo secondo per concludere l'analisi dell'intero codice sorgente, contro gli oltre 20 secondi di pdflatex. D'altra parte il programma più affidabile è il compilatore stesso, infatti è l'unico dei tre programmi qui discussi in grado di riconoscere i comandi o pacchetti non esistenti. Se si preferisce la velocità a discapito della precisione allora lo strumento ideale è ChkTex, se invece si vuole un controllo più preciso e mirato allora pdflatex fa al caso vostro (in particolare nei documenti piccoli).

Trovate maggiori informazioni su Flymake sul sito Emacs Wiki alle pagine Fly Make e Flymake Tex (da cui questo post prende ispirazione), oppure nel manuale consultabile dentro Emacs con C-h i d m Flymake RET.

lunedì 4 aprile 2011

Aggiungere "Monta archivi" in Debian

Chi ha usato, almeno provato o visto Ubuntu, dalla versione 8.10 in poi, probabilmente avrà notato che facendo clic con il tasto destro sull'icona di un'immagine .iso è possibile scegliere l'opzione «Apri con Monta archivi». Questa opzione permette di montare rapidamente e per via grafica l'immagine che altrimenti potrebbe essere montata su un terminale con un comando di questo tipo
mount -o loop -t iso9660 /percorso/della/immagine.iso /punto/di/mount
in cui bisognerà naturalmente sostituire a /percorso/della/immagine.iso il percorso dell'immagine che si vuole montare e a /punto/di/mount il percorso del punto di mount scelto e precedentemente creato.

È possibile aggiungere l'opzione «Apri con Monta archivi» anche in Debian (dovrebbe funzionare da Lenny in poi, personalmente ho provato su Wheezy testing) semplicemente copiando il lanciatore utilizzato in Ubuntu per aggiungere quell'opzione. Prima di fare ciò bisogna installare, se non già presente, il pacchetto gvfs-backends:
apt-get install gvfs-backends
A questo punto è possibile scaricare il lanciatore dall'indirizzo http://bazaar.launchpad.net/~ubuntu-branches/ubuntu/natty/nautilus/natty/download/head:/mountarchive.desktop-20100222031218-t6ar3c8jxy685cre-2783/mount-archive.desktop (come ottenere questo indirizzo, che potrebbe cambiare in futuro: andare in https://code.launchpad.net/ubuntu/+source/nautilus, selezionare il ramo principale lp:ubuntu/nautilus → Browse the code, reperire il file debian/mount-archive.desktop) e metterlo nella cartella ~/.local/share/applications se si vuole che sia disponibile solo per il proprio utente, altrimenti in /usr/share/applications/ affinché possa essere usato da tutti gli utenti del sistema. Da terminale può essere scaricato con il comando
wget -P ~/.local/share/applications http://bazaar.launchpad.net/~ubuntu-branches/ubuntu/natty/nautilus/natty/download/head:/mountarchive.desktop-20100222031218-t6ar3c8jxy685cre-2783/mount-archive.desktop
nel primo caso, per il secondo:
wget -P /usr/share/applications http://bazaar.launchpad.net/~ubuntu-branches/ubuntu/natty/nautilus/natty/download/head:/mountarchive.desktop-20100222031218-t6ar3c8jxy685cre-2783/mount-archive.desktop
usando i diritti di root per poter scrivere sotto /usr.


È possibile aggiungere nel lanciatore, utilizzando un qualsiasi editor di testo, la riga
Name[it_IT]=Monta archivi
in modo che il nome dell'opzione sia in italiano se il sistema è localizzato in italiano.

Ho detto che questo sistema funziona su Debian, in realtà dovrebbe funzionare su qualsiasi sistema GNU/Linux che abbia il programma gvfsd-archive.