Consolekit e DBus no Gentoo

Embora pareça um problema sem importância, ainda é perceptível o sofrimento de alguns usuários para fazer funcionar o sistema de forma correta no Gentoo. Eu mesmo demorei pra aprender como fazer funcionar a mágica de plugar um pendrive e poder abrir num gerenciador de arquivos com poderes de gravação sem ser root. Se esse for o seu caso, leia este pequeno artigo.

Eu resolvi escrever sobre isso, pois mesmo estando no forum do Gentoo não é tão fácil encontrar. Mas para quem quiser conferir, a postagem original pode ser encotrada aqui. Então mãos à obra.

Ative as USE flags abaixo globalmente:

USE="consolekit dbus pam policykit udev"

Verifique as seguintes opções do kernel, para sys-fs/udisks:

CONFIG_USB_SUSPEND=y
CONFIG_IDE=n

E para sys-auth/consolekit:

CONFIG_AUDITSYSCALL=y

Acrescente "gnome-base/gvfs gdu" em /etc/portage/package.use, e então remova os pacotes obsoletos e desnecessários e recompile tudo com as novas USE flags:

# emerge -C hal hal-info policykit devicekit devicekit-disks
  devicekit-power
# emerge -av gvfs udisks upower
# emerge -avDNut world

Você precisa ter instalado um agente responsável pela autenticação, para evitar mensagens como: "Not authorized" ao plugar um pendrive.

Para desktops GTK+:

# emerge -av polkit-gnome

Alternativa:

# emerge -av lxpolkit

Para KDE:

# emerge -av polkit-kde-agent

Se você não quer nenhum agente instalado, você precisa ler a documentação após a instalação do polkit:

$ man 8 pklocalauthority

Reinicie os serviços abaixo (lembrando que para o dbus, é necessário estar com o ambiente gráfico fechado para evitar que trave):

# /etc/init.d/hald stop         - (se ainda estiver em uso)
# rc-update del hald            - (se ainda estiver em uso)
# rc-update add dbus default    - (se já não estiver)
# rc-update add consolekit default
# /etc/init.d/consolekit restart
# /etc/init.d/dbus restart

Método para iniciar o xfce com startx:

$ cat ~/.xinitrc:

exec ck-launch-session startxfce4

E então:

$ startx

Método para iniciar o openbox com startx:

$ cat ~/.xinitrc::

exec ck-launch-session dbus-launch --sh-syntax --exit-with-
session openbox-session

$ startx

Ou se você usa fluxbox (com slim ou xdm):

$cat ~/.xinitrc::

exec ck-lauch-session dbus-lauch startfluxbox

E se você usa kdm ou gdm não é necessário criar o arquivo ~/.xinitrc, pois ambos inicializam as sessões automaticamente. Basta refazer o login.

Por fim, você deve ver uma sessão do consolekit ativa após se logar e dar o comando:

$ ck-list-sessions::

Session1:
   unix-user = '1000'
   realname = '(null)'
   seat = 'Seat1'
   session-type = ''
   active = FALSE
   x11-display = ''
   x11-display-device = ''
   display-device = '/dev/tty1'
   remote-host-name = ''
   is-local = TRUE
   on-since = '2010-12-25T09:44:12.519713Z'
   login-session-id = '1'
   idle-since-hint = '2011-01-02T16:04:09.020983Z'
Session3:
   unix-user = '1000'
   realname = '(null)'
   seat = 'Seat1'
   session-type = ''
   active = TRUE
   x11-display = ':0'
   x11-display-device = '/dev/tty7'
   display-device = '/dev/tty1'
   remote-host-name = ''
   is-local = TRUE
   on-since = '2011-01-02T16:03:40.847555Z'
   login-session-id = '1'

Problemas conhecidos que impedem o funcionamento correto do dbus:

Entradas em /etc/fstab conflitam com sys-fs/udisks. Por exemplo, se você quer que seu cdrom seja gerenciado pelo udisks (e suporte a gerenciador de arquivos, como nautilus, pcmanfm or Thunar)você deve remover as entradas relacionadas ao cdrom em /etc/fstab. E obviamente, a qualquer dispositivo removível.

É necessário recompilar dev-libs/dbus-glib após a atualização do dev-libs/glib:

# emerge -av1 dbus-glib

Feito todo o trabalho, tudo precisa funcionar. Como eu disse no início do artigo, eu tive problemas com pendrives, hd externos, e até mesmo com o nm-applet (gerenciador gráfico para o networkmanager), pois todos eles requerem uma sessão do dbus iniciada.

Tendo qualquer problema, comente.

blog comments powered by Disqus