Como posso ativar a sessão atual no ConsoleKit?

Como posso ativar a sessão atual no ConsoleKit?

Eu tenho um sistema Debian Squeeze ativo em uma unidade USB, contendo um script que uso para criar imagens de outra unidade. Este script é usado udiskspara montar uma unidade por rótulo, mas não funciona em um console serial. A razão é que a sessão associada ao console serial não parece estar "ativa", o que significa que udisksfalha com:

user@my-live-usb:~$ udisks --mount /dev/disk/by-label/image-data --mount-options ro
Mount failed: Not Authorized

Alterar a allow_anychave /usr/share/polkit-1/actions/org.freedesktop.udisks.policynão ajuda, então gostaria de saber como informar ao ConsoleKit que o console serial está "ativo". Tentar fazer isso através da interface DBUS falha:

user@my-live-usb:~$ dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Session7 org.freedesktop.ConsoleKit.Session.Activate
Error org.freedesktop.DBus.GLib.UnmappedError.CkSeatError.Code0: Unable to activate session

Session7 é aquela listada como estando em /dev/ttyS0.

Então, como posso fazer com que o ConsoleKit reconheça o console serial como uma sessão ativa?

(No meu caso, a versão do udisks é 1.0.1+git20100614-3, o consolekit é 0.4.1-4.)

Provavelmente também vale a pena notar que o sistema Debian live registra automaticamente o usuário live em todos os 6 consoles de vídeo e no console serial.

Responder1

O objetivo é configurar uma sessão ativa do ConsoleKit. Você pode verificar isso através de:

$ ck-list-sessions | grep active
    active = TRUE

Se houver diversas sessões do ConsoleKit, apenas uma sessão poderá estar ativa por vez.

Se a saída for algo como

$ ck-list-sessions | grep active
    active = FALSE
    active = FALSE

você tem um problema porque coisas que precisam de uma sessão ativa do ConsoleKit para autenticação para envio de mensagens via dbus não funcionam (por exemplo, NetworkManager, ou seja nm-applet, udisk ...).

Existem vários métodos para criar (e ativar) uma sessão do ConsoleKit. O gerenciador de exibição pode configurar um comunicando-se diretamente com o daemon ConsoleKit. Ou um módulo pam pode fazer isso. Ou um script login/X11-session-init pode chamar ck-launch-session que deve criar uma sessão ativa (modulo bugs).

Normalmente, o objetivo deve ser configurar o ConsoleKit de forma que você obtenha uma sessão ativa para seu gerenciador de janelas ou shell de login (não apenas para scripts únicos).

Para testar o sistema ConsoleKit, você pode tentar usar ck-launch-sessionpara criar uma sessão de consolekit adequada. Por exemplo, você pode chamar seu script assim:

$ ck-launch-session ./script

Para testar se ck-launch-session está livre de bugs você pode ligar

$ ck-launch-session ck-list-sessions

e verifique se há uma sessão ativa.

Insetos:Atualizações no sistema ConsoleKit introduzidas recentementevários insetosno frágil (e superprojetado?) ecossistema ConsoleKit.

Por exemplo, no meu sistema Ubuntu 11.10, tive que excluir nox11da pam_ck_connector.solinha /etc/pam.d/common-sessiondepois de ck-launch-sessionparar de funcionar após uma atualização do sistema:

--- a/pam.d/common-session      Fri May 25 10:26:53 2012 +0200
+++ b/pam.d/common-session      Fri May 25 10:39:41 2012 +0200
@@ -29,5 +29,5 @@
 session        required        pam_unix.so 
 session        optional                        pam_winbind.so 
 session        optional        pam_ecryptfs.so unwrap
-session        optional                        pam_ck_connector.so nox11
+session        optional                        pam_ck_connector.so
 # end of pam-auth-update config

Com essa mudança agora recebo uma activesessão diretamente ao iniciar meu gerenciador de janelas via WDMlogin.

Isso significa que o gerenciador de janelas agora é executado dentro de uma sessão ativa do ConsoleKit e tudo que é iniciado como filho do processo do gerenciador de janelas (por exemplo, de um xterm) também faz parte dessa sessão, ou seja, não há necessidade de chamadas extras de, ck-launch-sessionpor exemplo, nm-appletmais .

Responder2

Tive um problema com a sessão, onde is-locale activeestava FALSE. /bin/loginusado pam_ck_connectorpara fazer uma sessão adequada. Então executei o xinit com ck-launch-session openboxin ~/.xinitrc. A segunda sessão foi interrompida.

A solução NÃO é usar ck-launch-session, mas executar o xinit permanecendo no mesmo terminal virtual e mantendo ativa a primeira sessão local existente:XINITRC=/path_to_custom/xinitrc xinit -- :1 vt1

informação relacionada