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

Session7은 /dev/ttyS0에 있는 것으로 나열된 것입니다.

그렇다면 ConsoleKit이 직렬 콘솔을 활성 세션으로 인식하도록 하려면 어떻게 해야 합니까?

(저의 경우 udisks 버전은 1.0.1+git20100614-3, consolekit은 0.4.1-4입니다.)

데비안 라이브 시스템이 6개의 비디오 콘솔과 직렬 콘솔 모두에 라이브 사용자를 자동으로 로그인한다는 점도 주목할 가치가 있습니다.

답변1

목표는 활성 ConsoleKit 세션을 설정하는 것입니다. 다음을 통해 확인할 수 있습니다.

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

ConsoleKit 세션이 여러 개인 경우 한 번에 최대 하나의 세션만 활성화할 수 있습니다.

출력이 다음과 같은 경우

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

dbus를 통해 메시지를 보내기 위해 인증하기 위해 활성 ConsoleKit 세션이 필요한 것들이 작동하지 않기 때문에 문제가 있습니다(예: NetworkManager, 즉 nm-appletudisk ...).

ConsoleKit 세션을 생성(및 활성화)하는 방법에는 여러 가지가 있습니다. 디스플레이 관리자는 ConsoleKit 데몬과 직접 통신하여 설정할 수 있습니다. 아니면 pam 모듈로 할 수도 있습니다. 또는 login/X11-session-init 스크립트는 활성 세션을 생성해야 하는 ck-launch-session을 호출할 수 있습니다(모듈로 버그).

일반적으로 목표는 창 관리자 또는 로그인 셸(단지 단일 스크립트용이 아님)에 대한 활성 세션을 얻는 방식으로 ConsoleKit을 설정하는 것입니다.

ck-launch-sessionConsoleKit 시스템을 테스트하려면 적절한 콘솔킷 세션을 생성하는 데 사용할 수 있습니다 . 예를 들어 다음과 같이 스크립트를 호출할 수 있습니다.

$ ck-launch-session ./script

ck-launch-session에 버그가 없는지 테스트하려면 다음을 호출하세요.

$ ck-launch-session ck-list-sessions

활성 세션이 있는지 확인하십시오.

버그:최근 도입된 ConsoleKit 시스템 업데이트다양한 버그깨지기 쉬운(과도하게 엔지니어링된?) ConsoleKit 생태계에 들어갑니다.

예를 들어 Ubuntu 11.10 시스템에서는 시스템 업그레이드 후 작업이 중지된 후 줄 nox11에서 삭제해야 했습니다 .pam_ck_connector.so/etc/pam.d/common-sessionck-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-session않습니다 nm-applet. .

답변2

세션에 문제가 있었습니다. 위치 is-localactive입니다 FALSE. 적절한 세션을 만드는 데 /bin/login사용됩니다 . 그런 다음 in pam_ck_connector으로 xinit를 실행했습니다 . 두 번째 세션이 중단되었습니다.ck-launch-session openbox~/.xinitrc

해결책은 를 사용하지 않고 ck-launch-session동일한 가상 터미널에 머물며 기존 첫 번째 로컬 세션을 활성 상태로 유지하면서 xinit를 실행하는 것입니다.XINITRC=/path_to_custom/xinitrc xinit -- :1 vt1

관련 정보