Tengo un sistema Debian Squeeze activo en una unidad USB que contiene un script que uso para crear imágenes de otra unidad. Este script se utiliza udisks
para montar una unidad por etiqueta, pero no funciona en una consola serie. El motivo es que la sesión asociada a la consola serial no aparece "activa", lo que significa que udisks
falla con:
user@my-live-usb:~$ udisks --mount /dev/disk/by-label/image-data --mount-options ro
Mount failed: Not Authorized
Cambiar la allow_any
clave /usr/share/polkit-1/actions/org.freedesktop.udisks.policy
no ayuda, así que me gustaría saber cómo decirle a ConsoleKit que la consola serie está "activa". Intentar hacer esto a través de la interfaz DBUS falla:
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 es la que aparece en /dev/ttyS0.
Entonces, ¿cómo puedo hacer que ConsoleKit reconozca la consola serie como una sesión activa?
(En mi caso, la versión de udisks es 1.0.1+git20100614-3, el kit de consola es 0.4.1-4).
Probablemente también valga la pena señalar que el sistema Debian Live registra automáticamente al usuario Live en las 6 videoconsolas y en la consola serie.
Respuesta1
El objetivo es configurar una sesión activa de ConsoleKit. Puedes comprobarlo a través de:
$ ck-list-sessions | grep active
active = TRUE
Si hay varias sesiones de ConsoleKit, solo puede haber una sesión activa a la vez como máximo.
Si la salida es algo como
$ ck-list-sessions | grep active
active = FALSE
active = FALSE
tiene un problema porque las cosas que necesitan una sesión activa de ConsoleKit para autenticarse y enviar mensajes a través de dbus no funcionan (por ejemplo, NetworkManager, es decir nm-applet
, udisk...).
Existen varios métodos para crear (y activar) una sesión de ConsoleKit. El administrador de pantalla puede configurar uno comunicándose directamente con el demonio ConsoleKit. O un módulo pam puede hacerlo. O un script de inicio de sesión/X11-session-init podría llamar a ck-launch-session, lo que debería crear una sesión activa (errores de módulo).
Por lo general, el objetivo debería ser configurar ConsoleKit de tal manera que obtenga una sesión activa para su administrador de ventanas o shell de inicio de sesión (no solo para scripts individuales).
Para probar el sistema ConsoleKit, puede intentar utilizarlo ck-launch-session
para crear una sesión de consolekit adecuada. Por ejemplo, puedes llamar a tu script de esta manera:
$ ck-launch-session ./script
Para probar si ck-launch-session está libre de errores, puede llamar
$ ck-launch-session ck-list-sessions
y comprobar si hay una sesión activa.
Insectos:Actualizaciones del sistema ConsoleKit introducidas recientementevarios insectosen el frágil (¿y sobrediseñado?) ecosistema ConsoleKit.
Por ejemplo, en mi sistema Ubuntu 11.10 tuve que eliminar nox11
de la pam_ck_connector.so
línea /etc/pam.d/common-session
después de que ck-launch-session
dejó de funcionar después de una actualización del 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
Con ese cambio ahora obtengo una active
sesión directamente cuando inicio mi administrador de ventanas mediante WDM
el inicio de sesión.
Eso significa que el administrador de ventanas ahora se ejecuta dentro de una sesión activa de ConsoleKit y todo lo que se inicia como hijo desde el proceso del administrador de ventanas (por ejemplo, desde un xterm) también es parte de esa sesión, es decir, ya no es necesario realizar llamadas adicionales a, ck-launch-session
por ejemplo, nm-applet
por ejemplo. .
Respuesta2
Tuve un problema con la sesión, dónde is-local
y active
estaba FALSE
.
/bin/login
Se utiliza pam_ck_connector
para realizar una sesión adecuada. Luego ejecuté xinit con ck-launch-session openbox
in ~/.xinitrc
. La segunda sesión se interrumpió.
La solución NO es usar ck-launch-session
, sino ejecutar xinit permaneciendo en la misma terminal virtual y manteniendo activa la primera sesión local existente:XINITRC=/path_to_custom/xinitrc xinit -- :1 vt1