Làm cách nào để kích hoạt phiên hiện tại trong ConsoleKit?


7

Tôi có một hệ thống ép xung Debian trực tiếp trên ổ USB, chứa tập lệnh tôi sử dụng để ghi hình một ổ đĩa khác. Kịch bản lệnh này sử dụng udisksđể gắn ổ đĩa theo nhãn, nhưng nó không hoạt động trên bảng điều khiển nối tiếp. Lý do là phiên được liên kết với bảng điều khiển nối tiếp dường như không hoạt động, điều đó có nghĩa là udiskskhông thành công với:

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

Thay đổi allow_anykhóa trong /usr/share/polkit-1/actions/org.freedesktop.udisks.policykhông giúp ích, vì vậy tôi muốn biết làm thế nào để nói với ConsoleKit rằng bàn điều khiển nối tiếp đang "hoạt động". Cố gắng thực hiện điều này qua giao diện DBUS không thành công:

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

Phiên 7 là phiên được liệt kê là trên / dev / ttyS0.

Vậy làm thế nào tôi có thể khiến ConsoleKit nhận ra bàn điều khiển nối tiếp là một phiên hoạt động?

(Trong trường hợp của tôi, phiên bản udisks là 1.0.1 + git20100614-3, giao diện điều khiển là 0.4.1-4.)

Có lẽ cũng đáng chú ý hệ thống trực tiếp Debian tự động đăng nhập người dùng trực tiếp trên tất cả 6 bảng điều khiển video và bảng điều khiển nối tiếp.

Câu trả lời:


2

Mục tiêu là để thiết lập một phiên ConsoleKit hoạt động. Bạn có thể kiểm tra điều này qua:

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

Nếu có nhiều phiên ConsoleKit, chỉ có thể hoạt động nhiều nhất một phiên.

Nếu đầu ra là một cái gì đó như

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

bạn gặp sự cố vì những thứ cần phiên ConsoleKit hoạt động để xác thực gửi tin nhắn qua dbus không hoạt động (ví dụ: NetworkManager, tức là nm-appletudisk ...).

Có một số phương pháp để tạo (và kích hoạt) phiên ConsoleKit. Trình quản lý hiển thị có thể thiết lập một thông qua giao tiếp trực tiếp với daemon ConsoleKit. Hoặc một mô-đun pam có thể làm điều đó. Hoặc một tập lệnh đăng nhập / X11-session-init có thể gọi ck-launch-session sẽ tạo ra một phiên hoạt động (lỗi modulo).

Thông thường, mục tiêu nên là thiết lập ConsoleKit theo cách bạn có được một phiên hoạt động cho trình quản lý cửa sổ hoặc vỏ đăng nhập (không chỉ cho các tập lệnh đơn).

Để kiểm tra hệ thống ConsoleKit, bạn có thể thử sử dụng ck-launch-sessionđể tạo một phiên giao diện điều khiển thích hợp. Ví dụ: bạn có thể gọi tập lệnh của mình như thế này:

$ ck-launch-session ./script

Để kiểm tra xem ck-launch-session có lỗi không, bạn có thể gọi

$ ck-launch-session ck-list-sessions

và kiểm tra nếu có một phiên hoạt động.

Lỗi: Các bản cập nhật cho hệ thống ConsoleKit gần đây đã đưa nhiều lỗi khác nhau vào hệ sinh thái ConsoleKit mong manh (và quá kỹ thuật?).

Ví dụ: trên hệ thống Ubuntu 11.10 của tôi, tôi đã phải xóa nox11khỏi pam_ck_connector.sodòng /etc/pam.d/common-sessionsau khi ck-launch-sessionngừng hoạt động sau khi nâng cấp hệ thống:

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

Với sự thay đổi đó bây giờ tôi trực tiếp nhận được một activephiên khi bắt đầu trình quản lý cửa sổ của mình thông qua WDMđăng nhập.

Điều đó có nghĩa rằng người quản lý cửa sổ bây giờ chạy bên trong một phiên ConsoleKit hoạt động và tất cả những gì được bắt đầu như một đứa trẻ từ quá trình quản lý cửa sổ (ví dụ như từ một xterm) cũng là một phần của phiên đó, tức là không cần cho các cuộc gọi thêm ck-launch-sessioncho ví dụ nm-appletnữa .


Nếu tôi gọi ck-launch-session bashvà chạy ck-list-sessionstừ bên trong thiết bị đầu cuối đó, giao diện điều khiển vẫn có active = FALSEcho phiên đó.
gièm pha

Trong thực tế, cách dễ nhất để kiểm tra điều này là chạy ck-launch-session bash -c 'pkexec true'. Nếu không có đầu ra, nó hoạt động. Nếu bạn thấy (như tôi làm) Error executing command as another user: Not authorized, thì không.
gièm pha

@detly, tốt, ConsoleKit thực sự có vẻ là một phần mềm dễ vỡ (và quá kỹ thuật?). Tùy thuộc vào phương pháp khởi động X của bạn (thông qua DM hay không, DM nào, v.v.) cập nhật lên hệ thống ConsoleKit gần đây đã đưa ra các lỗi khác nhau .
maxschlepzig

@detly, đã cập nhật câu trả lời bằng cách giải quyết
maxschlepzig

0

Tôi đã có một vấn đề với phiên, ở đâu is-localactiveđược FALSE. /bin/loginđược sử dụng pam_ck_connectorđể thực hiện một phiên thích hợp. Sau đó, tôi thực hiện xinit với ck-launch-session openboxtrong ~/.xinitrc. Phiên thứ hai đã bị phá vỡ.

Giải pháp là KHÔNG sử dụng ck-launch-session, nhưng thực thi xinit ở trên cùng một thiết bị đầu cuối ảo và giữ cho phiên cục bộ đầu tiên hiện có hoạt động:XINITRC=/path_to_custom/xinitrc xinit -- :1 vt1

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.