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 udisks
ein 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 udisks
mit 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_any
Schlüssels /usr/share/polkit-1/actions/org.freedesktop.udisks.policy
hilft 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-session
eine 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 nox11
die pam_ck_connector.so
Zeile „in /etc/pam.d/common-session
after ck-launch-session
stopped 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 active
Sitzung, wenn ich meinen Fenstermanager über WDM
die 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-session
z. B. nm-applet
mehr erforderlich.
Antwort2
Ich hatte ein Problem mit der Sitzung, wobei und is-local
verwendet wurden , um eine ordnungsgemäße Sitzung zu erstellen. Dann habe ich xinit mit in ausgeführt . Die zweite Sitzung war unterbrochen.active
FALSE
/bin/login
pam_ck_connector
ck-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