Muitas vezes dois ou mais pacotes desempenham a mesma função ou fornecem o mesmo programa de um modo diferente mas podem ser instalados ao mesmo tempo, definindo assim alternativas.
Um bom exemplo são os famosos "emuladores de terminal", como o
xterm
ou o rxvt
. Esses pacotes fornecem o programa
x-terminal-emulator
, assim você pode chamar
x-terminal-emulator que o pacote que for o dono da alternativa
será chamado.
Para ver as alternativas entre as quais você pode escolher para um determinado comando basta rodar:
$ update-alternatives --display nome
Onde nome é o nome da alternativa. Os nomes das alternativas são os
links presentes no diretório /etc/alternatives
Para escolher entre alternativas você pode usar o seguinte comando:
# update-alternatives --config nome
Lembrando que o nome é o nome de um dos links em
/etc/alternatives
. Por exemplo:
# update-alternatives --config x-terminal-emulator There are 3 programs which provide `x-terminal-emulator'. Selection Command ----------------------------------------------- + 1 /usr/X11R6/bin/xterm 2 /usr/X11R6/bin/uxterm * 3 /usr/bin/gnome-terminal.wrapper Enter to keep the default[*], or type selection number: 1 Using `/usr/X11R6/bin/xterm' to provide `x-terminal-emulator'.
Note que a entrada em que está um '*' (asterisco) é a padrão, a que está sendo usada. A que está marcada com um '+' é a "melhor" entrada, seria a usada no caso de a alternativa ser escolhida automaticamente (veremos adiante).
Então, depois de rodar o que rodei acima, o xterm
será meu
x-terminal-emulator.
Na verdade é assim que as alternativas se comportam caso você não interfira com elas. Mas caso você tenha mexido alguma coisa e queira voltar ao modo automático basta fazer:
# update-alternatives --auto nome
Com isso a "melhor" entrada (aquela que tem um '+' na primeira coluna da --config ou que é mostrada como "`best' version" pelo --display) será selecionada automaticamente sempre.
Todo pacote que é parte de uma alternativa, quando se instala pela primeira vez
cria um link em /etc/alternatives
apontando para seu executável.
O executável que será o principal das alternativas, por sua vez, é um link para
o link que está no diretório citado. Complicado? Nem tanto, veja o exemplo:
$ ls -l /usr/bin/x-terminal-emulator lrwxrwxrwx 1 root root 37 Jul 16 2000 /usr/bin/x-terminal-emulator -> /etc/alternatives/x-terminal-emulator* $ ls -l /etc/alternatives/x-terminal-emulator lrwxrwxrwx 1 root root 31 Nov 24 18:00 /etc/alternatives/x-terminal-emulator -> /usr/bin/gnome-terminal.wrapper*
Dá pra perceber que eu uso o gnome-terminal
como meu
x-terminal-emulator, então toda vez que algum programa chama tal
programa o que se abre é o gnome-terminal
. Você pode mudar suas
alternativas mudando esses links.
O update-alternatives
permite que você adicione facilmente uma
alternativa ao sistema. Por exemplo, posso criar a alternativa
web-browser, onde coloco meus navegadores web.
Para isso faço:
# update-alternatives --install comando nome comando-real prioridade
O que isso faz? Instala uma nova alternativa na qual você pode chamar comando para rodar comando-real. Um exemplo prático:
# update-alternatives --install /usr/bin/web-browser web-browser /usr/bin/mozilla 20 # update-alternatives --install /usr/bin/web-browser web-browser /usr/bin/galeon 30
Isso cria /usr/bin/web-browser que aponta, primeiramente, para o
galeon
, já que esse tem prioridade maior e a alternativa está
configurada para auto. O link criado em
/etc/alternativos
é o argumento nome (veja o primeiro
exemplo), que serve para muitas outras funções do
update-alternatives
.
Note, porém, que web-browser não tem uma manpage. Seria lógico ligar a ele a manpage do browser que está sendo usado como web-browser em determinado momento, certo? Para isso que existe a opção --slave. Seria algo assim:
# update-alternatives --install /usr/bin/web-browser web-browser /usr/bin/mozilla 20 --slave /usr/share/man/man1/web-browser.1.gz web-browser.1.gz /usr/share/man/man1/mozilla.1.gz
Não é necessário explicar os argumentos de --slave, são todos os do --install menos a prioridade.
Remover alternativas é muito simples. Supondo que quero remover o
galeon
da alternativa web-browser que criei na seção
anterior basta fazer:
# update-alternatives --remove web-browser /usr/bin/galeon
Ou seja:
# update-alternatives --remove nome comando-real
Guia Prático para o Debian GNU/Linux
1.2kov@debian.org