¿Cómo puedo activar la sesión actual en ConsoleKit?

¿Cómo puedo activar la sesión actual en ConsoleKit?

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 udiskspara 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 udisksfalla con:

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

Cambiar la allow_anyclave /usr/share/polkit-1/actions/org.freedesktop.udisks.policyno 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-sessionpara 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 nox11de la pam_ck_connector.solínea /etc/pam.d/common-sessiondespués de que ck-launch-sessiondejó 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 activesesión directamente cuando inicio mi administrador de ventanas mediante WDMel 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-sessionpor ejemplo, nm-appletpor ejemplo. .

Respuesta2

Tuve un problema con la sesión, dónde is-localy activeestaba FALSE. /bin/loginSe utiliza pam_ck_connectorpara realizar una sesión adecuada. Luego ejecuté xinit con ck-launch-session openboxin ~/.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

información relacionada