Se si stanno cercando altri meccanismi per impostare le applicazioni predefinite negli ambienti desktop, fare riferimento a Impostazioni predefinite del desktop.


Il sistema "Alternatives" di Debian

Il sistema per le alternative Debian crea un metodo, per svariati programmi che svolgono le stesse funzioni o funzioni simili, di essere elencati come implementazioni alternative che sono installate contemporaneamente ma di cui una in particolare è designata come predefinita. Per esempio, molti sistemi hanno svariati editor di testi installati contemporaneamente. Il programma vi è un classico esempio di editor che ha molte implementazioni, come nvi, elvis, vim, ecc., ma quale dovrebbe essere considerata la predefinita?

Questo sfogo nella mailing list debian-user è una buona introduzione all'uso del sistema di alternative Debian. Gran parte di quella discussione è riportata in questa pagina wiki.

Obiettivi e priorità

Il sistema di alternative Debian risolve il problema di selezionare una versione preferita in modo predefinito. La gestione viene fatta attraverso il programma update-alternatives che crea, rimuove, mantiene e visualizza le informazioni sui collegamenti simbolici che costituiscono il sistema di alternative Debian. Le priorità vengono assegnate dal creatore del pacchetto. Quando in modalità automatica il valoro predefinito è impostato all'alternativa con la più alta priorità. In aggiunta l'amministratore locale può sovrascrivere la selezione automatica con una manuale.

Il sistema di alternative di Debian è stato creato in origine per Debian, ma è stato in seguito usato da altre distribuzioni di software GNU/Linux. Red Hat, per esempio, usa adesso un fork del codice per mantenere il software di sistema come /usr/sbin/sendmail. In RHEL/Fedora /usr/sbin/sendmail è un collegamento simbolico del sistema di alternative che punta o al classico Sendmail o a Postfix, in qualità di implementazioni alternative di un MTA. Di fatto, il gruppo per le alternative è chiamato lì gruppo mta.

Aggiungere una nuova alternativa ad un gruppo esistente

Uno scenario comune di interazione con il sistema delle alternative Debian è quello di registrare un'applicazione personalizzata per un gruppo di collegamenti esistente.

Per esempio, in un sistema con w3m e edbrowse, eseguendo update-alternatives --config www-browser (da root) restituisce quanto segue:

È presente una sola alternativa nel gruppo www-browser (che fornisce /usr/bin/www-browser): /usr/bin/w3m
Nulla da configurare.

Se si desidera usare edbrowse come alternativa per www-browser è necessario installarlo usando update-alternatives - specificatamente:

--install <collegamento> <nome> <percorso> <priorità> [--slave <collegamento> <nome> <percorso>]...
       Aggiunge un gruppo di alternative al sistema in base ai seguenti argomenti:
       - <collegamento> è il nome generico per il collegamento principale (tipicamente /usr/bin/<collegamento>
       - <nome> è il nome del suo collegamento simbolico nella directory delle alternative
       - <perc> è l'alternativa introdotta per il collegamento principale (tipicamente il percorso al nuovo programma)
       - <priorità> è un numero (vedere più avanti per i dettagli).

La distinzione tra il collegamento principale <collegamento> e il collegamento <nome> nella directory delle alternative può essere vista qui:

$ ls -l /usr/bin/www-browser
lrwxrwxrwx 1 root root 29 Dec 16  2018 /usr/bin/www-browser -> /etc/alternatives/www-browser
$ ls -l /etc/alternatives/www-browser
lrwxrwxrwx 1 root root 12 May 19 01:34 /etc/alternatives/www-browser -> /usr/bin/w3m

Per aggiungere edbrowse, si può fare (da root):

update-alternatives --install /usr/bin/www-browser www-browser /usr/bin/edbrowse 50

Notare: update-alternatives si lamenta se <coll> non è un percorso assoluto. Questo perché è un percorso specificato dall'utente per un collegamento simbolico a /etc/alternatives/<nome>, invece del nome di un file nella cartella predefinita. Nel caso in esame, si vuole continuare a usare /usr/bin/www-browser, e si vuole solo aggiungere un'alternativa a /etc/alternatives/www-browser ; perciò viene usato /usr/bin/www-browser.

<priorità> è un numero che si deve fornire; i numeri con una più alta priorità sono i primi ad essere scelti in 'auto-mode' (la modalità predefinita per tutte le alternative in Debian). Nel caso in esame la priorità di w3m era 25, perciò viene usato 50 che promuove il nuovo edbrowse a nuovo www-browser predefinito. Ciò si può vedere con --config (ancora come root):

$ update-alternatives --config www-browser
Ci sono 2 scelte per le alternative per www-browser (providing /usr/bin/www-browser).

  Selezione    Percorso            Priorità   Stato
------------------------------------------------------------
* 0            /usr/bin/edbrowse   50        modalità automatica
  1            /usr/bin/edbrowse   50        modalità manuale
  2            /usr/bin/w3m        25        modalità manuale

Premere Invio per mantenere il valore predefinito[*] o digitare il numero
della selezione: 

Dato che è stato fatto manualmente, se si rimuove il pacchetto edbrowse, l'alternativa non verrà rimossa automaticamente. Per rimuoverla eseguire, da root:

update-alternatives --remove www-browser /usr/bin/edbrowse

E tutto torna normale.

Aggiungere un nuovo gruppo di collegamenti

La procedura descritta sopra si può anche usare per creare da zero un nuovo gruppo di collegamenti.

Per esempio in un sistema CDE con nedit and dtpad, si può volere un gruppo di collegamentimotif-text-editor come il gruppo gnome-text-editor. Eseguire:

update-alternatives --install /usr/bin/motif-text-editor motif-text-editor /usr/bin/nedit 25

farà ciò che si vuole.

Righe di comando per manipolare le alternative

Ecco una lunga riga di comando che visualizza tutti i collegamenti simbolici del sistema delle alternative Debian che sono stati configurati in modo manuale.

for i in /etc/alternatives/*; do
  LANG=C update-alternatives --display "${i#/etc/alternatives/}";
done 2>/dev/null | awk '/manual.mode/{print $1}'

Se si vuole ripristinarli tutti quanti alla modalità automatica, allora lo si può fare usando lo stesso elenco. Altrimenti usare semplicemente grep per estrarre quelli che si vuole o non si vuole.

for i in /etc/alternatives/*; do
  LANG=C update-alternatives --display "${i#/etc/alternatives/}";
done 2>/dev/null |
  awk '/manual.mode/{print $1}' | 

Vedere anche


CategorySystemAdministration | CategorySoftware