18 março 2007

Super-user (su) e seus derivados

Usando uma distro de Linux é imperativo que estejamos logados como um utilizador normal, e apenas usamos os poderes do super-mega poderoso root quando e só se, seja necessário. Normalmente no Debian é usado o comando "su" para adquirir-mos esse poder do root. Já no Ubuntu e outros derivados é usual usar o comando "sudo" para se conseguir esse objectivo, e é de realçar que este comando é mais poderoso na medida em que pode ser configurado com esse objectivo.
Voltando ao "su", quem já o usou deve ter reparado que quando há a intenção de abrir um programa gráfico, ele não abre e aparece o seguinte erro:

Xlib: connection to ":0.0" refused by server

Nestas situações a solução é utilizar o comando "gksu" ou "kdesu", dependendo do ambiente que se está a utilizar, seja o Gnome ou o KDE. Mas terás de repetir esse comando sempre que queiras usar outra aplicação gráfica como root. Também podes contornar essa limitação fazendo um "gksu gnome-terminal" e dentro do gnome-terminal abrir vários programas gráficos como root.
Outra solução é usar o comando "sux", é o mesmo que o "su" mas sem as tais limitações gráficas, permitindo abrir várias aplicações gráficas do root no ambiente X do utilizador normal.

Concluindo, no Linux há sempre várias soluções para se atingir o mesmo objectivo.

4 comentários:

Minor correction: su - substitute user (ou switch user). A maior parte das pessoas faz a mesma confusão, mas nada como um man su para perceber o nome do comando.

Ou eventualmente fazer:

$ xhost +localhost
Para permitir ligações ao servidor X mas apenas da própria máquina e depois na shell como root:

export DISPLAY=:0

:)

O problema desta solução actualmente residirá no facto que as distros vêm com o X configurado para não aceitar ligações TCP (DisallowTCP=true em /etc/X11/gdm/gdm.conf).

António Dias, por acaso até fiz um "man su" por saber o raio do nome correto do comando e foi isto que vi:

NAME
su - change user ID or become super-user

Não se vê nenhum "switch user" nem "substitute user" mas sim "change user", embora esteja corretíssimo o termo que usaste....

"The Unix su (substitute user) command is used to assume the login shell of another user without logging out."
http://en.wikipedia.org/wiki/Su_(Unix)

O "su" é normalmente utilizado para fazer login como root, mas também pode ser usado para fazer login com outro utilizador: "su utilizador"