Nicola D'Agostino (.net) - Articoli, traduzioni, grafica, web

Silent Running

Come avviare e eseguire software “di nascosto” su Mac OS X. Bastano poche operazioni per nascondere in parte o del tutto alla vista dell’utente un programma.

di Nicola D’Agostino

Tutto il software con interfaccia grafica per Mac OS X può essere controllato e gestito tramite click sulle finestre che genera, sulle icone nel passaggio tramite combinazioni di tasti o con l’icona che compare (con un segno di lato a indicare l’esecuzione) nell’area apposita chiamata Dock. Questa affermazione ha però delle eccezioni perché esistono vari programmi (una è l’utility Quicksilver) che non appaiono nel dock e talvolta neanche a schermo.

Se il pensiero va subito a possibili intenti maliziosi se non addirittura malevoli in realtà ci sono vari motivi per cui questa può essere una scelta lecita: ad esempio per non ingombrare ed occupare spazio utile specialmente se al programma è di appoggio (un esempio è il server X11) o vi si accede anche in altro modo o deve compiere un’operazione specifica programmata e non è necessario interagirvi che raramente (come LittleSnitch) o per nulla.
Vediamo come fare perché un software in esecuzione resti il più nascosto possibile e non manifesti la sua presenza in dock, menù ed altri punti.

Nascondere non basta

Tra le preferenze di sistema in Mac OS X, sotto il pannello Account si può scegliere di far avviare un programma appena fatto login con un dato utente. Basta fare click sul tab “Elementi login” (“Login Items” in inglese) e mettere la spunta sulla casella nella colonna “Nascondi”. Può essere utile in alcuni casi ma l’effetto equivale ad un command-H (mela-H) relegando semplicemente il programma sullo sfondo ma non a nasconderlo veramente dalla vista. Per fare questo bisogna mettere mano al terminale o addentrarsi nei visceri degli applicativi.

Inganniamo il Dock

Un primo metodo si basa sull’ingannare il Dock: si tratta sostanzialmente di confondere le idee quanto basta perché non tenga più conto che un programma è attivo.
I passi sono tre. Una volta lanciato l’applicativo, mentre è in esecuzione, rinominarlo (basta anche una sola lettera). Il Finder protesterà e chiederà conferma dell’operazione.

Avviso di Mac OS X quando si ronomina un software in esecuzione

Seconda cosa da fare è fermare e rilanciare il Dock: il metodo più rapido è con un comando kill dalla shell nel Terminale, ad esempio un “killall Dock”.
Dopo che il dock sarà scomparso e riapparso noteremo che l’icona del software lanciato non c’è più.

Niente icona nel dock (appena riavviato)

La terza ed ultima operazione è di rinominare il programma ancora aperto ridandogli il nome originario.
Il risultato è che il programma non compare oltre che nel Dock neanche nella lista quando si usa l’application switching con il command-tab (mela-tab). Sono però visibili le finestre (se ce ne sono) e una volta portate in primo piano si vedono tutti i menù in alto. Non solo: una volta usciti dall’applicativo, al suo rilancio (o al rilancio del Dock) è tutto visibile e bisogna rifare la procedura.
Per un effetto più duraturo e generale ci vuole un’altra tecnica.

Un pacchetto da aprire

La tecnica consiste nel modificare il file Info.plist nel pacchetto che racchiude in Mac OS X le varie parti dei software. Dopo un backup del programma (non si sa mai) selezioniamo la sua icona ed entriamo nel suo contenuto facendo control-click (o click con il tasto destro del mouse) scegliendo la voce di menù contestuale “Mostra contenuto pacchetto” (“Show package Contents”).
Dentro troveremo una cartella chiamata “Contents” ed al suo interno il file Info.plist che dobbiamo modificare.

pmodifichiamo il plist

Con Property List Editor, programma di Apple contenuto nei Developer Tools (il percorso è /Developer/Applications/Utilities/Property List Editor.app/) possiamo aprire il file .plist, visualizzare il contenuto e modificarlo. Ciò che dobbiamo fare è aggiungere una nuova chiave chiamata LSUIElement. Posizioniamoci sulla root del file e creiamo una nuova chiave con “New Child” che chiameremo “LSUIElement”. La classe la impostiamo (o lasciamo) a “String” e per il valore, “Value”, digitiamo “1”: a questo punto salviamo il file e usciamo dall’editor.

Il file plist

La stessa procedura si può effettuare anche senza programmi appositi e con un banale editor di testo (ad esempio il TextEdit di Apple). Il file Info.plist è un banale documento XML in ascii con le chiavi e stringhe visibili e modificabili in cui basta aggiungere le due seguenti righe

<key>LSUIElement</key>
<string>1</string>

e salvare il file.

Ma funziona davvero?

Prima di verificare l’invisibilità del programma dobbiamo aggiornare i LaunchServices cioè far accorgere il Mac OS del cambiamento alle proprietà dentro il pacchetto. Ci sono vari modi ma il più semplice è quello di spostare di posizione il software, anche passando in un’altra cartella il .app. Se tutto è andato per il verso giusto il programma una volta lanciato non compare nel dock, non si vede con l’application switching e anche se riusciamo a portarlo in primo piano non mostra le sue solite voci in alto nella barra dei menù.

Problemi e soluzioni

Pasticciare con il Dock vuol dire interferire con il sistema operativo e l’interfaccia utente: Dock, switching e i menù sono tutti collegati. Se si usa il “Nascondi altre” si può perdere il controllo del programma: svanita la sua finestra svanisce l’unico modo normale per riacciuffarlo e bisogna usare qualche trucco.
Nel caso della prima tecnica si può provare con Exposé (tasto F10) oppure riavviando nuovamente il Dock perché si riaccorga del nome cambiato e si annulli l’effetto.
Nel secondo caso si può provare a rilanciare tramite icona e poi chiudere oppure si può impiegare il Terminale con un kill -9 X dove X è il numero del processo del software nascosto. A questo punto per rimettere tutto com’era basta ripetere la modifica dell’Info.plist impostando da “1” a “0” il valore della stringa o rimuovendo completamente la chiave e la stringa (cioè le due righe di codice).

Dockless

Dockless è un software che automatizza il secondo hack spiegato nell’articolo e cioè cambia in maniera facile e rapida l’Info.plist con la chiave LSUIElement. Si può scaricare dal sito dello sviluppatore oppure dalla scheda su MacUpdate.

Una versione di questo articolo è stata (presumibilmente) pubblicata su "Hacker Journal" nel novembre 2007