Se estiver procurando por outros mecanismos para definir as aplicações padrão em desktops, consulte Configurações padrão de ambientes de área de trabalho.


Sistema de alternativas Debian

O sistema de alternativas Debian cria uma maneira de vários programas que cumprem as mesmas funções ou funções semelhantes serem listados como implementações alternativas que são instaladas simultaneamente, mas com uma implementação particular definida como padrão. Por exemplo, muitos sistemas possuem vários editores de texto instalados ao mesmo tempo. O programa vi é um exemplo clássico de editor que tem muitas implementações, como nvi, elvis, vim, etc., mas qual deve ser definido como padrão?

Esta bravata na lista de discussão debian-user (em inglês) é uma boa introdução ao uso do sistema de alternativas Debian. A maior parte dessa discussão está sendo colocada nesta página wiki.

Intenções e prioridades

O sistema de alternativas do Debian visa resolver o problema de selecionar uma versão preferida padrão. O gerenciamento é feito por meio do programa update-alternatives que cria, remove, mantém e exibe informações sobre os links simbólicos que constituem o sistema de alternativas do Debian. As prioridades são atribuídas pelos(as) criadores(as) do pacote. A alternativa com a prioridade mais alta determina o valor padrão quando em modo automático. Além disso, o(a) administrador(a) local pode substituir a seleção automática por uma escolha manual.

O sistema de alternativas do Debian foi originalmente criado para o Debian, mas foi escolhido por outras distribuições de software GNU/Linux. Por exemplo, o Red Hat agora usa uma bifurcação do código para manter softwares do sistema, como /usr/sbin/sendmail. No RHEL/Fedora, /usr/sbin/sendmail é um link simbólico alternativo para o Sendmail clássico ou para o Postfix como implementações alternativas de um MTA. Na verdade, o grupo alternativo é chamado de grupo mta lá.

Adicionando uma nova alternativa a um grupo existente

Um cenário comum para interagir com o sistema de alternativas do Debian é registrar um aplicativo personalizado para um grupo de link existente.

Por exemplo, em um sistema com w3m e edbrowse, executando update-alternatives --config www-browser (como root) retornará o seguinte:

There is only one alternative in link group www-browser (providing /usr/bin/www-browser): /usr/bin/w3m
Nothing to configure.

Se você quiser usar edbrowse como uma alternativa a www-browser, terá que instalá-lo usando update-alternatives - especificamente,

--install <link> <name> <path> <priority> [--slave link name path]...
       Add  a  group  of  alternatives  to the system according to the following arguments:
       - <link> is the generic name for the master link (typically /usr/bin/<link>)
       - <name> is the name of its symlink in the alternatives directory
       - <path>  is  the alternative  being  introduced for the master link (typically, the path to the new program)
       - <priority> is a number (see below for details).

A distinção entre o link principal <link> e o link <name> no diretório de alternativas pode ser vista aqui:

$ 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

Para adicionar edbrowse, podemos fazer (como root):

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

O update-alternatives reclamará se <link> não for um caminho absoluto. Isso ocorre porque é um caminho especificado pelo(a) usuário(a) para um link simbólico para /etc/alternative/<name> em vez do nome de um arquivo em uma pasta padrão. Em nosso cenário, queremos continuar usando /usr/bin/www-browser e apenas adicionar uma alternativa a /etc/alternative/www-browser - então usamos /usr/bin/www-browser.

<priority> é um número que você tem que fornecer - números com uma prioridade mais alta são os primeiros a serem escolhidos no 'modo automático' (o modo padrão para todas as alternativas Debian). Em nosso cenário, a prioridade de w3m era 25, então usamos 50, promovendo o novo edbrowse como o novo www-navegador padrão. Você pode ver isso com --config (novamente, como root):

$ update-alternatives --config www-browser
There are 2 choices for the alternative www-browser (providing /usr/bin/www-browser).

  Selection    Path               Priority   Status
------------------------------------------------------------
* 0            /usr/bin/edbrowse   50        auto mode
  1            /usr/bin/edbrowse   50        manual mode
  2            /usr/bin/w3m        25        manual mode

Press <enter> to keep the current choice[*], or type selection number:

Como foi feito manualmente, se agora você remover o pacote edbrowse, a alternativa não será removida automaticamente. Para removê-la, execute como root:

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

E tudo ficará bem novamente.

Você também pode usar o procedimento acima para criar um novo grupo de links inteiramente.

Por exemplo, em um sistema CDE com nedit e dtpad, pode-se querer um grupo de links motif-text- editor para corresponder ao grupo gnome-text-editor. Executando:

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

o truque funciona.

Comandos de uma linha para manipular as alternativas

Aqui está uma longa linha que imprimirá todos os links simbólicos do Debian Alternatives, configurados manualmente.

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

Se deseja redefinir tudo para automático, use a mesma lista gerada. Caso contrário, simplesmente retire com grep aquilo que você quer ou não quer.

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

Veja também