Wie kann ich die aktuelle Sitzung in ConsoleKit aktivieren?


7

Ich habe ein Live-Debian-Squeeze-System auf einem USB-Laufwerk, das ein Skript enthält, mit dem ich ein Image eines anderen Laufwerks verwende. Dieses Skript dient udiskszum Mounten eines Laufwerks nach Label, funktioniert jedoch nicht über eine serielle Konsole. Der Grund dafür ist, dass die der seriellen Konsole zugeordnete Sitzung nicht "aktiv" zu sein scheint. Dies bedeutet, dass udisksFolgendes 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 möchte ich wissen, wie ConsoleKit mitgeteilt wird, 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

Session7 ist diejenige, die als / 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, consolekit ist 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.

Antworten:


2

Ziel ist es, eine aktive ConsoleKit-Sitzung einzurichten. Sie können dies überprüfen über:

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

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

Wenn die Ausgabe so etwas wie ist

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

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

Es gibt verschiedene Methoden zum Erstellen (und Aktivieren) einer ConsoleKit-Sitzung. Der Display-Manager kann einen einrichten, indem er direkt mit dem ConsoleKit-Daemon kommuniziert. Oder ein Pam-Modul kann es tun. Oder ein Login / X11-Session-Init-Skript ruft möglicherweise ck-launch-session auf, wodurch eine aktive Sitzung erstellt werden soll (Modulo-Fehler).

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

Um das ConsoleKit-System zu testen, können Sie versuchen ck-launch-session, eine ordnungsgemäße Consolekit-Sitzung zu erstellen. Zum Beispiel können Sie Ihr Skript folgendermaßen aufrufen:

$ ck-launch-session ./script

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

$ ck-launch-session ck-list-sessions

und prüfen Sie, ob eine Sitzung aktiv ist.

Fehler : Durch Aktualisierungen des ConsoleKit-Systems wurden kürzlich verschiedene Fehler in das fragile (und überentwickelte?) ConsoleKit-Ökosystem eingeführt.

Zum Beispiel musste ich auf meinem Ubuntu 11.10-System nox11aus der pam_ck_connector.soZeile löschen, /etc/pam.d/common-sessionnachdem ich ck-launch-sessionnach einem System-Upgrade aufgehört hatte zu arbeiten:

--- 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 die WDMAnmeldung starte.

Das bedeutet, dass der Fenstermanager jetzt in 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, dh keine zusätzlichen Aufrufe von ck-launch-sessionz. B. nm-appletmehr erforderlich sind .


Wenn ich von diesem Terminal aus anrufe ck-launch-session bashund ausführe ck-list-sessions, hat die Konsole noch Zeit active = FALSEfür diese Sitzung.
Detly

Der einfachste Weg, dies zu testen, ist das Ausführen ck-launch-session bash -c 'pkexec true'. Wenn es keine Ausgabe gibt, funktioniert es. Wenn Sie sehen (wie ich) Error executing command as another user: Not authorized, tut es nicht.
Detly

@detly, nun, ConsoleKit scheint wirklich eine fragile (und überentwickelte?) Software zu sein. Abhängig von Ihrer Methode zum Starten von X (über DM oder nicht, welches DM usw.) haben kürzlich Aktualisierungen des ConsoleKit-Systems verschiedene Fehler verursacht .
Maxschlepzig

@detly, aktualisierte die Antwort mit einer
Problemumgehung

0

Ich hatte ein Problem mit der Sitzung, wo is-localund activewar FALSE. /bin/loginwird verwendet pam_ck_connector, um eine ordnungsgemäße Sitzung durchzuführen. Dann habe ich xinit mit ck-launch-session openboxin ausgeführt ~/.xinitrc. Die zweite Sitzung war unterbrochen.

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.