Personalizzare il comportamento delle finestre con Devil's Pie: differenze tra le versioni

m
nessun oggetto della modifica
mNessun oggetto della modifica
 
(12 versioni intermedie di 4 utenti non mostrate)
Riga 1: Riga 1:
[[Categoria:Sistema]]
{{Versioni compatibili|Squeeze|Wheezy}}
[[Categoria:Hardware]]
==Introduzione==
[http://www.burtonini.com/blog/computers/devilspie Devil's Pie] è un programma che permette di personalizzare il comportamento delle finestre dei programmi.<br/>
Ad esempio si può scegliere in quale workspace far partire un'applicazione, o impedire che compaia nella taskbar.


== Introduzione ==
Ogni volta che viene aperta un'applicazione, e quindi creata la sua finestra, Devil's Pie legge nei file di configurazione l'operazione da eseguire su di essa.


Gli '''Hard Disk''' sono una delle parti pi� delicate degli odierni pc, ed infatti sono tra le periferiche che pi� facilmente sono soggette a rompersi.
== Installazione ==
 
Devil's Pie è presente nell'archivio ufficiale Debian, quindi per installarlo basta usare il gestore di pacchetti preferito oppure scrivere semplicemente da [[shell]]:
Fortunantamente ci sono degli strumenti studiati per diagnosticare i malfunzionamenti prima ancora che possano creare danno (speriamo ;-)). Ma ricordate che un backup periodico dei dati importanti � sempre la scelta migliore.
 
In questa guida vedremo come usare alcuni strumenti come '''smartmontools''' e '''badblocks''' per monitorare lo stato di salute di un hard disk, vedremo come effettuare le basilari operazioni di backup di emergenza e come affrontare un eventuale ripristino dei dati.
 
{{Box|Nota|Questa guida raccoglie le mie (limitate) conoscenze in materia nella speranza che siano utili ad altri. Sentitevi liberi di contribuire con approfondimenti o link ad ulteriori documenti.}}
 
== DISCLAIMER ==
 
Per quanto abbia fatto del mio meglio per verificare l'attendibilit� delle informazioni, non posso garantire in alcun modo che alcune delle tecniche illustrate di seguito non possano danneggire i vostri dati, bruciare la vostra casa o uccidere il vostro gatto.
 
Faccio notare, inoltre, che il ripristino dei dati da una partizione corrotta � pi� una specie di magia nera che una scienza esatta, e richiede oltre che doti da chiromante anche una buona dose di fortuna. Quindi, e non lo ripeter� pi�, fate backup sistematici dei vostri dati o non lamentatevi se doveste perderli accidentalmente e non riuscire pi� a recuperarli!
 
== Controllare lo stato di salute di un HD: smartmontools ==
 
Gli ''smartmontools'' permettono di usare la funzionalit� [http://en.wikipedia.org/wiki/Self-Monitoring%2C_Analysis_and_Reporting_Technology SMART] di tutti i moderni HD grazie alla quale � possibile prevedere con 24 ore di anticipo la rottura di un HD.
 
In debian basta installare il pacchetto smartmontools:
 
# aptitude install smartmontools
 
=== Analizzare lo stato dell'HD ===
Possiamo usare l'utility <tt>'''smartctl'''</tt> per analizzare lo stato dell'HD.
 
Innanzi tutto vediamo alcune informazioni generiche sul nostro HD:


<pre>
<pre>
# smartctl -i /dev/hda
# apt-get install devilspie
smartctl version 5.34 [i686-pc-linux-gnu] Copyright (C) 2002-5 Bruce Allen
Home page is http://smartmontools.sourceforge.net/
 
=== START OF INFORMATION SECTION ===
Model Family:    Western Digital Caviar family
Device Model:    WDC WD600BB-00CAA1
Serial Number:    WD-WMA8F1747570
Firmware Version: 17.07W17
User Capacity:    60,022,480,896 bytes
Device is:        In smartctl database [for details use: -P show]
ATA Version is:  5
ATA Standard is:  Exact ATA specification draft version not indicated
Local Time is:    Tue Jan 31 17:36:07 2006 CET
SMART support is: Available - device has SMART capability.
SMART support is: Enabled
</pre>
</pre>


oltre alle informazioni generiche, dalle ultime due righe si capisce che l'HD supporta la tecnologia SMART e che il supporto � attivato. Se non fosse attivato basterebbe questo comando:
== Configurazione ==
<pre>
La versione attuale di Devil's Pie è la 0.17.
# smartctl -s on /dev/hda
Dalla 0.13 è stato modificato completamente il sistema di configurazione, passando da un file di configurazione xml a un sistema a s-expressions.
</pre>
per attivare il supporto SMART.


Per controllare lo stato di salute attuale:
Questo crea qualche problema perché le guide che si trovano su internet si riferiscono al vecchio sistema, e l'autore non ha ancora scritto una guida per il sistema nuovo.


Significativo in questo senso il manuale, accessibile con:
<pre>
<pre>
# smartctl -H /dev/hda
# man devilspie
smartctl version 5.34 [i686-pc-linux-gnu] Copyright (C) 2002-5 Bruce Allen
Home page is http://smartmontools.sourceforge.net/
 
=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED
</pre>
</pre>
Nella sezione '''Bugs''', leggiamo un incoraggiante:
<pre>This manpage is useless, as it was thrown together on a train.</pre>


L'ultima riga ci dice che la salute sembra buona e nessuno dei parametri interni controllati da SMART ha superato il livello di guardia.
Per fortuna ci viene in aiuto il file README, che troviamo nella directory <code>/usr/share/doc/devilspie</code>.


{{Warningbox| Se il precendente comando non riporta '''PASSED''' smontate immediatamente tutte le partizioni presenti su quell'HD ed effettuate un backup dei dati: la rottura definitiva ed irreversibile del disco � prevista nelle successive 24 ore!}}
Per ogni finestra su cui vogliamo eseguire un'operazione, creiamo un file <code>nomeprogramma.ds</code> nella directory <code>.devilspie</code> della nostra home, in cui scriviamo il comando con l'operazione da eseguire, formattata come [http://en.wikipedia.org/wiki/S-expression s-expression].


Per avere tutte le informazioni possibili sul nostro HD diamo:
In attesa della guida, per sapere i comandi disponibili bisogna spulciare il file <code>src/parser.c</code> nei sorgenti di Devil's Pie, e fare tante prove :-).<br/>
<pre>
Per le prove, basta richiamare devilspie da shell seguito dal file di configurazione che si vuole provare, e lanciare l'applicazione su cui deve eseguire l'operazione.
# smartctl -a /dev/hda
</pre>


L'output, abbastanza lungo (-a sta per "all"), � diviso in quattro sezioni. Il primo blocco rappresenta le informazioni generiche sull'HD (le stesse ottenute prima con <tt>-i</tt>), la seconda sezione riporta le informazioni sul supporto SMART. La terza sezione elenca i parametri interni monitorati da SMART e se hanno mai superato il livello di guardia, nel mio caso:
{{Box|Aggiornamento:|È disponibile un [http://wiki.foosel.net/linux/devilspie tutorial completo] in lingua inglese.}}


<pre>
=== Azioni ===
SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG    VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate    0x000b  200  200  051    Pre-fail  Always      -      0
  3 Spin_Up_Time            0x0007  099  091  021    Pre-fail  Always      -      4108
  4 Start_Stop_Count        0x0032  098  098  040    Old_age  Always      -      2590
  5 Reallocated_Sector_Ct  0x0033  200  200  140    Pre-fail  Always      -      0
  7 Seek_Error_Rate        0x000b  200  200  051    Pre-fail  Always      -      0
  9 Power_On_Hours          0x0032  092  092  000    Old_age  Always      -      6494
10 Spin_Retry_Count        0x0013  100  100  051    Pre-fail  Always      -      0
11 Calibration_Retry_Count 0x0013  100  100  051    Pre-fail  Always      -      0
12 Power_Cycle_Count      0x0032  098  098  000    Old_age  Always      -      2435
196 Reallocated_Event_Count 0x0032  200  200  000    Old_age  Always      -      0
197 Current_Pending_Sector  0x0012  200  200  000    Old_age  Always      -      0
198 Offline_Uncorrectable  0x0012  200  200  000    Old_age  Always      -      0
199 UDMA_CRC_Error_Count    0x000a  200  200  000    Old_age  Always      -      19
200 Multi_Zone_Error_Rate  0x0009  200  200  051    Pre-fail  Offline      -      0
</pre>


I parametri indicati come ''Pre-fail'' sono quelli che superano la soglia di guardia nelle 24 ore che precedono la rottura dell'HD, mentre quelli ''Old_age'' sono i parametri che superano la soglia di guardia quando ormai l'HD � vecchio e non � considerato pi� affidabile dal costruttore. Nel mio esempio si vede che nessun parametro ha mai superato la soglia di guardia.
Questo è l'elenco delle azioni che possono essere applicate da devilspie all'apertura di una finestra:


L'ultima sezione del comando <tt>smartctl -a /dev/hda</tt> riguarda il log dei test manualmente effettuati sull'HD:
; <code>(geometry geo)</code>: Setta la dimensione e il posto in cui verrà visualizzata la finestra.


<pre>
; <code> (fullscreen) </code>: Visualizza la finestra a pieno schermo.
SMART Error Log Version: 1
No Errors Logged


SMART Self-test log structure revision number 1
; <code> (focus) </code>: Seleziona la finestra.
Num  Test_Description    Status                  Remaining  LifeTime(hours) LBA_of_first_error
# 1  Short offline      Completed without error      00%      952        -
# 2  Conveyance offline  Completed without error      00%      951        -
# 3  Short offline      Completed without error      00%      951        -
# 4  Short offline      Completed without error      00%      875        -
</pre>


Nell'esempio si pu� vedere che sono stati effettuati 4 test, di cui tre di tipo ''short'' e uno di tipo ''conveyance''. Nessuno di loro ha dato esito positivo (cio� non sono stati rilevati malfunzionamenti).
; <code> (center) </code>: Posiziona la finestra al centro dello schermo.


=== Effettuare manualmente i test ===
; <code> (maximize) </code>: Massimizza la finestra.


E' possibile effettuare dei test pi� o meno approfonditi sul disco. Alcuni test si possono effettuare con l'HD montato e funzionate, ed il test stesso avr� un impatto minimo o nullo sulle prestazioni del sistema.
; <code> (maximize_vertically) </code>: Massimizza la finestra verticalmente.


Per effettuare un test:
; <code> (maximize_horizontally) </code>: Massimizza la finestra orizzontalmente.


# smartctl -t tipo_test /dev/hda
; <code> (minimize) </code>: Minimizza la finestra.


dove ''<tt>tipo_test</tt>'' pu� essere:
; <code> (pin) </code>: Visualizza la finestra iin tutti i workspaces.


;<tt>short</tt>: effettua un test sul disco di durata inferiore a 10 minuti, pu� essere eseguito durante il normale funzionamento e non impatta le prestazioni. Questo test controlla le performace meccaniche ed elettriche del disco, oltre che le performance in lettura.
; <code> (unpin) </code>: Il contrario di pin.


;<tt>long</tt>: effettua un test di durata da 40 minuti ad un ora (a seconda del disco). Pu� essere effettuato durante il normale funzionamento del disco e non ha impatto sulle prestazioni. Questo test � una versione pi� estesa dello ''short test''.
; <code> (set_workspace num) </code>: Setta il workspace (al posto di num va messo il numero del workspace).


;<tt>conveyance</tt>: effettua un test di alcuni minuti atto a scoprire difetti dovuti ad incurie nel trasporto dell'HD. Pu� essere eseguito durante il normale funzionamento dell'HD.
; <code> (skip_pager) </code>: Non fa visualizzare la finestra nel [[pager]].


Esistono anche altri tipi di test per i quali si rimanda alla simpatica pagina di manuale: '''<tt>man smartctl</tt>'''.
; <code> (skip_tasklist) </code>: Non fa visualizzare la finestra nella tasklist.


I risultati di questi test vengono riportati nella parte finale dell'output di <code>smartctl -a /dev/hda</code>, come notato in precedenza.
; <code> (above) </code>: Visualizza la finestra sempre sopra altre.


=== Controllo automatizzato ===
; <code> (below) </code>: Visualizza la finestra sempre sotto altre.


E' possibile attivare il demone '''<tt>smartd</tt>''' fornito dal pacchetto <tt>smartmontools</tt> per monitorare in continuazione lo stato di salute dell'HD e notificare ogni anomalia immediatamente tramite syslog.
; <code> (undecorate) </code>: Toglie le decorazioni del window manager.


Normalmente il demone � disabilitato. Per abilitarlo bisogna editare il file <tt>/etc/default/smartmontools</tt> e decommentare la riga:
=== Esempi ===
Supponiamo di avere <code>gkrellm</code> su tutti i workspace, ma di non voler vedere la sua miniatura nel pager.<br/>
Creiamo un file <code>gkrellm.ds</code> e scriviamo:
<pre>
(if (is (application_name) "gkrellm") (begin skip_pager (skip_tasklist)))
</pre>
Questo comando fa svolgere due operazioni, l'eliminazione dal pager e dalla taskbar. Per applicare operazioni multiple è stato necessario iniziare l'elenco dei comandi con 'begin'. Da notare anche l'annidamento delle parentesi.


start_smartd=yes
Se vogliamo svolgere una sola operazione, ad esempio aprire <code>XMMS</code> nel workspace 2 e nient'altro, basta il solo comando senza 'begin':


Dobbiamo inoltre configurare smartd per deciderne il suo comportamento. A tal scopo editiamo il file <tt>/etc/smartd.conf</tt>. Leggendo i commenti nel file e l'amichevole pagina di manuale (<tt>man smartd.conf</tt>) � possibile scegliere quali parametri <tt>smartd</tt> debba monitorare, programmare dei test automatici, e decidere quali azioni intraprendere in caso di errore.
<pre>
(if (is (application_name) "XMMS") (set_workspace 2))
</pre>


Nel mio caso ho inserito solo la seguente linea:
Un altro esempio un po' più complesso, se si vuole mostrare la lista contatti di <code>gaim</code> su tutti i workspaces, una grandezza di 340x630 alla posizione (4, 150), il comando è questo:
<pre>
(if
    (and
        (is (application_name) "gaim")
        (is (window_name) "Lista contatti")
    )
    (begin
        (pin)
        (geometry "340x630+4+150")
    )
)
</pre>


/dev/hda -a -o on -S on
=== Determinare il nome della finestra ===
Negli esempi precedenti, le azioni vengono associate a delle applicazioni o a delle finestre attraverso le voci (<code>application_name</code>) o (<code>window_name</code>). Se la personalizzazione si riferisce alla finestra di un programma, solitamente è sufficiente usare (<code>application_name</code>) con il nome del programma, come negli esempi precedenti <code>xmms, gkrellm, gaim.</code>


che attiva il monitoraggio di tutti (<tt>-a</tt>) i parametri, abilitia l' ''automatic online data collection'' (<tt>-o on</tt>), e abilita il salvataggio degli attributi (<tt>-S on</tt>) in modo che le informazioni di log di SMART vengano memorizzare nella FLASH del disco e siano disponibili anche dopo il riavvio.
Nel caso si voglia definire un comportamento di un'applicazione di cui non si è sicuri del nome, oppure di una finestra specifica di un'applicazione, si possono avere tutte le informazioni necessarie avviando devilspie con l'opzione debug:
 
<pre>$devilspie --debug</pre>
== Verifica di settori corrotti ==
A questo punto, aprendo la finestra desiderata, si leggerà una cosa del tipo:
 
<pre>
L'utility <tt>'''badblocks'''</tt> permette di fare un controllo di basso livello per vedere se su una partizione sono presenti dei settori danneggiati.
Window Title: 'XMMS - 48. Alanis Morissette - No pressure over cappucino (4:45)'; Application Name: 'XMMS - 48. Alanis Morissette - No pressure over cappucino (4:45)'; Class: 'xmms'; Geometry: 275x116+0+0
 
Window Title: 'GDancer'; Application Name: 'Xmms'; Class: 'dancer'; Geometry: 100x173+562+132
I moderni HD IDE fanno un controllo automatico degli errori e sono in grado di segnare dei settori corrotti che di conseguenza non verranno pi� usati. Questo rende in parte inutile <tt>badblocks</tt>, ma se si effettua un controllo e dei settori risultano danneggiati vuol dire che probabilmente la superficie del disco contiene cos� tanti settori danneggiati che la circuiteria di controllo non � pi� in gradio di gestirli.
Skipping pager
 
Skipping tasklist
Per effettuare un controllo con <tt>badblocks</tt> smontiamo la partizione ed eseguiamo:
Setting pinned
 
</pre>
# badblocks -b dimensione_blocco /dev/hdaX
Nell'esempio si vedono le informazioni relative all'applicazione <code>xmms</code> e al suo plugin [http://figz.com/gdancer/ gDancer], e viene anche indicato che sono già state applicate delle azioni su quest'ultimo: non compare nel pager né nella barra delle applicazioni, e viene visualizzato in tutti i workspaces.
 
I comandi corrispondenti del file <code>gdancer.ds</code> sono:
dove <tt>/dev/hdaX</tt> la partizione da controllare. Il parametro <tt>dimensione_blocco</tt> � la dimensione del blocco usata dal filesytem espresso in byte. Di solito � 4096 (ovvero 4KB), per controllare potete usare:
<pre>
 
(if (is (window_class) "dancer")
# disktype /dev/hda
  (begin
 
(skip_pager)
Per le ulteriori opzioni di <tt>badblocks</tt> si rimanda all'amichevole pagina di manuale, ma '''attenzione: l'opzione <tt>-w</tt> distrugger� tutti i dati sulla vostra partizione'''. Non usatela se non volete che ci� accada.
(skip_tasklist)
 
(pin)
Se trovate dei settori danneggiati conviene cambiare immediatamente HD. Sebbene ci sia una piccola probabilit� che l'errore sia isolato (dovuto ad esempio ad uno sbalzo di tensione) � molto pi� probabile che l'HD si stia progressivamente danneggiando e presto ci saranno dei nuovi settori danneggiati. Comunque se volete giocare alla roulette russa con i vostri dati siete liberi di farlo :-P.
  )
 
)
== Backup di emergenza ==
</pre>
 
Per effettuare un backup di emergenza di una partizione corrotta il tool pi� efficace � '''[http://www.gnu.org/software/ddrescue/ddrescue.html GNU ddrescue]''' (da non confondere con il simile ma meno potente <tt>[http://www.garloff.de/kurt/linux/ddrescue/ dd_rescue]</tt>). Per installare GNU ddrescue in debian basta installare il pacchetto <tt>gddrescue</tt>.
 
GNU ddrescue pu� effettuare backup di singoli file o di intere partizioni, riconoscendo ed aggirando i settori danneggiati. Pu� essere interrotto in qualsiasi momento, riprendere la copia da punto in cui � stato interrrotto e pu� fare il ''merge'' dei file se si hanno pi� copie degli stessi file corrotti.
 
Il suo uso � vagamente simile al classico '''<tt>dd</tt>''':
 
# ddrescue ddrescue [OPTIONS] INFILE OUTFILE [LOGFILE]
 
Per una lista completa delle opzioni si rimanda al manuale: <tt>info ddrescue</tt>.
 
Riporto un semplice esempio di utilizzo:
 
# ddrescue -r3 /dev/hda3 /dev/hdb2 logfile
 
il precedente comando copier� la partizione hda3 in hdb2 (distruggengo gli eventuali dati ivi presenti) provando a leggere tre volte i settori danneggiati e usando <tt>logfile</tt> come file di log.
 
Ora possiamo eseguire sulla copia i normali tool di ripristino del nostro filesystem (<tt>fsck.*</tt>).
 
== Strumenti per il ripristino dei dati ==
''In questa sezione verr� accennato il problema del ripristino dati. Lo scopo � solo quello di dare una panoramica iniziale del problema che possa servire come orientamento per ulteriori approfondimenti''.
 
Prima di ogni operazione di ripristino dati � fortemente consigliato effettuare una copia della partizione (vedi sezione precedente) e operare sulla copia.
 
La metodologia per il ripristino dei dati pu� variare a seconda del filesytem utilizzato e del modo in cui si sono perduti i dati. Ad esempio se si vogliono recuperare dei file cancellati accidentalmente da una partizione ext2 ci sono delle buone possibilit� di usare il tool <tt>[http://recover.sourceforge.net/linux/recover/ recover]</tt> (presente nell'omonimo pacchetto debian). Il tool <tt>recover</tt> non pu� essere usato su partizione ext3. Purtroppo, oltre a <tt>recover</tt> per ext2, non conosco nessun altro tool free e automatico per il recupero dei file accidentalmente cancellati.
 
In mancanza di strumenti automatici si usa la cos� detta ''Unix Way''. Ovvero si usano i tradizionali strumenti unix per accedere direttamente al device ed estrarre i dati utili. Ad esempio se si devono recuperare file di testo o documenti non binari (per intenderci non foto o musica o programmi compilati) si possono usare <tt>egrep</tt> e <tt>strings</tt>.
 
Se si vogliono recuperare foto jpeg � possibile usare <tt>'''recoverjpeg'''</tt> (presente nell'omonimo pacchetto debian) che cerca di identificare gli header jpeg in una immagine di file system.
 
E' fortemente consigliata la lettura dei documenti elencati di seguito nella sezione ''Links->Articoli'' per degli esempi pratici sul recupero dati da filesystem ext2 e reiserfs (ma le informazioni possono servire da spunto per operare anche su altri file system).
 
== Links ==
=== Articoli ===
* [http://www.linuxquestions.org/linux/answers/Hardware/ReiserFS_Data_Recovery_Tips ReiserFS Data Recovery Tips]


* [http://ildp.pluto.it/HOWTO/Ext2fs-Undeletion.html Linux Ext2fs Undeletion mini-HOWTO]
== Automazione ==
* [http://www.linuxjournal.com/article/8366 How a Corrupted USB Drive Was Saved by GNU/Linux]
Una volta eseguito devilspie, tutte le volte che si apre un programma per cui è stata definita un'operazione questa viene eseguita.<br/>
Per fare in modo che queste siano sempre eseguite bisogna far partire Devil's Pie automaticamente all'avvio del sistema.


=== Strumenti Utili ===
Con gli ambienti desktop che seguono gli standard freedesktop (come <code>Xfce</code>), è sufficiente creare un link all'eseguibile di devilspie nella directory <code>Desktop/Autostart</code> della nostra home.<br/>
* [http://smartmontools.sourceforge.net/ smartmontools Home Page]
In generale, molto più semplicemente, al momento dello spegnimento si può salvare la sessione con devilspie avviato, in modo da ritrovarselo a ogni accesso successivo.
* [http://www.gnu.org/software/ddrescue/ddrescue.html GNU ddrescue]
* [http://www.partimage.org/index.en.html Partimage]
* [http://www.cgsecurity.org/index.html?testdisk.html TestDisk]


{{Autori
|Autore = [[Utente: Gnappa|Gnappa]] 17:21, Dic 8, 2005 (EST)
|Estesa_da =
:[[Utente: ilbeppe|ilbeppe]] 21:05, Mar 31, 2006 (EST)
|Verificata_da =
|Numero_revisori = 0
}}


----


Autore Iniziale: [[Utente:TheNoise|~ The Noise]] 05:31, Feb 4, 2006 (EST)
[[Categoria:Window Manager]]
3 581

contributi