Wie kann ich die aktuelle Sitzung in ConsoleKit aktivieren?

Wie kann ich die aktuelle Sitzung in ConsoleKit aktivieren?

Ich habe ein Live-Debian-Squeeze-System auf einem USB-Laufwerk, das ein Skript enthält, mit dem ich ein anderes Laufwerk abbilde. Dieses Skript mountet udisksein Laufwerk nach Label, funktioniert aber nicht über eine serielle Konsole. Der Grund dafür ist, dass die mit der seriellen Konsole verknüpfte Sitzung nicht „aktiv“ zu sein scheint, was bedeutet, dass es udisksmit folgendem fehlschlägt:

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

Das Ändern des allow_anySchlüssels /usr/share/polkit-1/actions/org.freedesktop.udisks.policyhilft nicht, daher würde ich gerne wissen, wie ich ConsoleKit mitteilen kann, dass die serielle Konsole „aktiv“ ist. Der Versuch, dies über die DBUS-Schnittstelle zu tun, schlägt fehl:

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

Sitzung7 ist diejenige, die als auf /dev/ttyS0 aufgeführt ist.

Wie kann ich ConsoleKit dazu bringen, die serielle Konsole als aktive Sitzung zu erkennen?

(In meinem Fall ist die Udisks-Version 1.0.1+git20100614-3, die Consolekit-Version 0.4.1-4.)

Es ist wahrscheinlich auch erwähnenswert, dass das Debian-Live-System den Live-Benutzer automatisch auf allen 6 Videokonsolen und der seriellen Konsole anmeldet.

Antwort1

Ziel ist es, eine aktive ConsoleKit-Sitzung einzurichten. Dies können Sie wie folgt überprüfen:

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

Wenn mehrere ConsoleKit-Sitzungen vorhanden sind, kann jeweils nur höchstens eine Sitzung aktiv sein.

Wenn die Ausgabe etwa wie folgt lautet:

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

Sie haben ein Problem, weil Dinge, die eine aktive ConsoleKit-Sitzung zur Authentifizierung beim Senden von Nachrichten über dbus benötigen, nicht funktionieren (z. B. NetworkManager, d. h nm-applet. udisk ...).

Es gibt mehrere Methoden, um eine ConsoleKit-Sitzung zu erstellen (und zu aktivieren). Der Display-Manager kann eine Sitzung einrichten, indem er direkt mit dem ConsoleKit-Daemon kommuniziert. Oder ein PAM-Modul kann dies tun. Oder ein Login/X11-Session-Init-Skript kann ck-launch-session aufrufen, wodurch eine aktive Sitzung erstellt werden sollte (Modulo-Bugs).

Normalerweise sollte das Ziel darin bestehen, ConsoleKit so einzurichten, dass Sie eine aktive Sitzung für Ihren Fenstermanager oder Ihre Anmelde-Shell erhalten (nicht nur für einzelne Skripte).

Um das ConsoleKit-System zu testen, können Sie versuchen, ck-launch-sessioneine richtige ConsoleKit-Sitzung zu erstellen. Sie können Ihr Skript beispielsweise folgendermaßen aufrufen:

$ ck-launch-session ./script

Um zu testen, ob ck-launch-session fehlerfrei ist, können Sie aufrufen

$ ck-launch-session ck-list-sessions

und prüfen Sie, ob eine aktive Sitzung vorhanden ist.

Fehler:Kürzlich eingeführte Updates für das ConsoleKit-Systemverschieden Fehlerin das fragile (und überentwickelte?) ConsoleKit-Ökosystem.

Auf meinem Ubuntu 11.10-System musste ich beispielsweise nox11die pam_ck_connector.soZeile „in /etc/pam.d/common-sessionafter ck-launch-sessionstopped working“ (nach einem Systemupgrade nicht mehr funktionieren) löschen:

--- 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

Mit dieser Änderung erhalte ich jetzt direkt eine activeSitzung, wenn ich meinen Fenstermanager über WDMdie Anmeldung starte.

Das bedeutet, dass der Fenstermanager jetzt innerhalb einer aktiven ConsoleKit-Sitzung ausgeführt wird und alles, was als untergeordnetes Element vom Fenstermanagerprozess gestartet wird (z. B. von einem xterm), ebenfalls Teil dieser Sitzung ist, d. h. es sind keine zusätzlichen Aufrufe von ck-launch-sessionz. B. nm-appletmehr erforderlich.

Antwort2

Ich hatte ein Problem mit der Sitzung, wobei und is-localverwendet wurden , um eine ordnungsgemäße Sitzung zu erstellen. Dann habe ich xinit mit in ausgeführt . Die zweite Sitzung war unterbrochen.activeFALSE/bin/loginpam_ck_connectorck-launch-session openbox~/.xinitrc

Die Lösung besteht darin, NICHT zu verwenden ck-launch-session, sondern xinit auszuführen, wobei Sie auf demselben virtuellen Terminal bleiben und die bestehende erste lokale Sitzung aktiv halten:XINITRC=/path_to_custom/xinitrc xinit -- :1 vt1

verwandte Informationen