Как активировать текущий сеанс в ConsoleKit?

Как активировать текущий сеанс в ConsoleKit?

У меня есть живая система Debian Squeeze на USB-накопителе, содержащая скрипт, который я использую для создания образа другого диска. Этот скрипт используется udisksдля монтирования диска по метке, но он не работает через последовательную консоль. Причина в том, что сеанс, связанный с последовательной консолью, не выглядит "активным", что означает, что udisksпроисходит сбой с:

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

Изменение allow_anyключа /usr/share/polkit-1/actions/org.freedesktop.udisks.policyне помогает, поэтому я хотел бы узнать, как сообщить ConsoleKit, что последовательная консоль "активна". Попытка сделать это через интерфейс DBUS не удалась:

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

Сеанс 7 указан как находящийся на /dev/ttyS0.

Так как же мне заставить ConsoleKit распознавать последовательную консоль как активный сеанс?

(В моем случае версия udisks — 1.0.1+git20100614-3, consolekit — 0.4.1-4.)

Вероятно, стоит также отметить, что система Debian Live автоматически регистрирует пользователя Live на всех 6 видеоконсолях и последовательной консоли.

решение1

Цель — настроить активную сессию ConsoleKit. Вы можете проверить это через:

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

Если имеется несколько сеансов ConsoleKit, одновременно может быть активен только один сеанс.

Если вывод будет выглядеть примерно так:

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

у вас возникла проблема, поскольку не работают вещи, которым требуется активный сеанс ConsoleKit для аутентификации при отправке сообщений через dbus (например, NetworkManager, т. е nm-applet. udisk ...).

Существует несколько методов создания (и активации) сеанса ConsoleKit. Менеджер отображения может настроить его посредством прямого взаимодействия с демоном ConsoleKit. Или это может сделать pam-модуль. Или скрипт login/X11-session-init может вызвать ck-launch-session, который должен создать активный сеанс (по модулю ошибок).

Обычно целью является настройка ConsoleKit таким образом, чтобы получить активный сеанс для вашего оконного менеджера или оболочки входа в систему (а не только для отдельных скриптов).

Для тестирования системы ConsoleKit вы можете попробовать использовать ck-launch-sessionдля создания правильного сеанса consolekit. Например, вы можете вызвать свой скрипт следующим образом:

$ ck-launch-session ./script

Чтобы проверить, не содержит ли ck-launch-session ошибок, вы можете вызвать

$ ck-launch-session ck-list-sessions

и проверьте, есть ли активный сеанс.

Ошибки:Недавно представленные обновления системы ConsoleKitразличный ошибкив хрупкую (и чрезмерно сложную?) экосистему ConsoleKit.

Например, в моей системе Ubuntu 11.10 мне пришлось удалить nox11из pam_ck_connector.soстроки in /etc/pam.d/common-sessionпосле того, ck-launch-sessionкак перестало работать после обновления системы:

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

Благодаря этому изменению теперь я сразу получаю activeсеанс при запуске оконного менеджера через WDMвход в систему.

Это означает, что оконный менеджер теперь работает внутри активного сеанса ConsoleKit, и все, что запускается как дочерний процесс из процесса оконного менеджера (например, из xterm), также является частью этого сеанса, т. е. больше нет необходимости в дополнительных вызовах ck-launch-sessionfor .nm-applet

решение2

У меня была проблема с сессией, где is-localи activeбыло FALSE. /bin/loginиспользовалось pam_ck_connectorдля создания правильной сессии. Затем я выполнил xinit с ck-launch-session openboxin ~/.xinitrc. Вторая сессия была сломана.

Решение состоит в том, чтобы НЕ использовать ck-launch-session, а выполнить xinit, оставаясь на том же виртуальном терминале и сохраняя существующий первый локальный сеанс активным:XINITRC=/path_to_custom/xinitrc xinit -- :1 vt1

Связанный контент