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 udisks
para 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 udisks
falha com:
user@my-live-usb:~$ udisks --mount /dev/disk/by-label/image-data --mount-options ro
Mount failed: Not Authorized
Alterar a allow_any
chave /usr/share/polkit-1/actions/org.freedesktop.udisks.policy
nã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-session
para 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 nox11
da pam_ck_connector.so
linha /etc/pam.d/common-session
depois de ck-launch-session
parar 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 active
sessão diretamente ao iniciar meu gerenciador de janelas via WDM
login.
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-session
por exemplo, nm-applet
mais .
Responder2
Tive um problema com a sessão, onde is-local
e active
estava FALSE
.
/bin/login
usado pam_ck_connector
para fazer uma sessão adequada. Então executei o xinit com ck-launch-session openbox
in ~/.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