Điều gì xảy ra khi tôi nhấn vào Shut Shut Down từ GUI?


15

Tôi đã đập đầu vào điều này khá lâu rồi. Nó liên quan đến câu hỏi này . Tôi muốn tìm hiểu chính xác điều gì xảy ra khi tôi chọn tắt hộp Linux của mình khỏi GUI. Điều này dường như là kém (nếu có) tài liệu.

Lý tưởng nhất, tôi hy vọng cho một câu trả lời bất khả tri và hệ điều hành. Chặn rằng, tôi quan tâm đến trường hợp cụ thể của Mandriva 2010.1 và Debian 6.x (Bóp) và 7.0 (Wheezy) đều đang chạy Gnome. (Nếu bạn đang chú ý, có, đó là Gnome 2 và Gnome 3)

Về cơ bản, tôi muốn biết lệnh / script / chuỗi script nào được bắt đầu khi tôi nhấn "Shutdown" hoặc "Restart" để tôi có thể sửa đổi hành vi của chúng. Một số bài viết trên diễn đàn tôi đã xem xét đề xuất hack/etc/polkit-1/* nhưng cấu trúc thư mục này chỉ là một bộ xương trên hộp Debian (Squeeze) của tôi, ví dụ.

Có ai giúp được không?


BIÊN TẬP

Những gì tôi đã cố gắng cho đến nay

  • Thay thế tập shutdowntin thực thi bằng một tập lệnh của riêng tôi. Điều này không hoạt động: khi tôi nhấnshutdown Gnome đăng xuất mà không thực thi tập lệnh của mình.
  • Đã thử chỉnh sửa menu Gnome 2. Không có niềm vui: các tùy chọn "Tắt máy", "Đăng xuất" và "Màn hình khóa" không xuất hiện trong trình chỉnh sửa menu.
  • Nhìn vào /usr/share/menu, không có gì hữu ích ở đó.

Con đường có thể cho giải pháp

  • straceing các tùy chọn GUI (điều này thậm chí có thể?)
  • Nhìn shutdownmã nguồn của
  • Nhìn vào gnome-sessionmã nguồn của

Cập nhật

Theo nhận xét của tôi về câu trả lời dưới đây, tôi đã xem xét polkitcác hành động bên dưới /usr/share/polkit-1/actions/và tìm thấy (trong tệp org.freedesktop.consolekit.policy) một hành động được gọi là org.freedesktop.consolekit.system.stop-multiple-usersném thông điệp

System policy prevents stopping the system when other users are logged in

Tôi đang nghĩ (do org.freedesktop.*quy ước đặt tên) rằng đây là một loại tín hiệu được gửi đến DM thông qua D-BUS. Hơn nữa, thông báo này xuất hiện khi cố gắng tắt đồ họa trong khi người dùng khác đăng nhập, vì vậy cơ chế kích hoạt nó phải là cùng một cơ chế được kích hoạt khi "Tắt máy" hoặc "Tắt nguồn" được chọn từ GUI.

Bất cứ ai có thể xác nhận / bác bỏ? Có khả năng bằng cách nào đó chặn tín hiệu này hoặc sửa đổi nó?


Bạn đang cố gắng để thực hiện? Bạn có thể thêm một chỉnh sửa /etc/init.d/rc.localđể gọi một tập lệnh khi bị dừng .
tước

@depquid Điều tôi đang cố gắng thực hiện là trong câu hỏi cũ hơn mà tôi đã liên kết đến: Tôi đang cố gắng ngăn người dùng đăng nhập cục bộ chặn lại phiên SSH của người dùng khác.
Joseph R.

Câu trả lời:


9

Nó phụ thuộc vào Trình quản lý hiển thị của bạn! (tức là KDM, GDM)

Hãy nhớ rằng DM của bạn chạy như root! (nó cần đặc quyền root để chạy quy trình phiên của bạn với tư cách là người dùng bạn đăng nhập)

Khi bạn bấm tắt máy trong KDE hoặc Gnome, DE của bạn sẽ gửi tín hiệu đến DM để tắt nguồn hoặc khởi động lại sau khi phiên kết thúc. Sau đó, DE của bạn báo cho mọi chương trình kết thúc và khi tất cả quá trình khác đã kết thúc (hoặc hết thời gian chờ), quy trình cuối cùng của DE - quy trình phiên - sẽ chấm dứt.

Quá trình phiên là quá trình đầu tiên bắt đầu trong phiên X11. Khi nó bị giết hoặc nó kết thúc, phiên kết thúc. Bạn đã bao giờ thấy xterm đó khi chạy X mà không có DE chưa? Đó là một quá trình phiên. Quá trình này được gọi kdeinittrong KDE và gnome-sessiontrong Gnome.

Khi phiên kết thúc, quyền kiểm soát được trả về DM của bạn (đang chờ quá trình X kết thúc) và nó sẽ kiểm tra xem DE đã bảo anh ta làm gì. Nếu nó bảo nó tắt nguồn hoặc khởi động lại, nó sẽ làm điều đó. Trong trường hợp khác, nó sẽ chỉ bắt đầu một màn hình đăng nhập mới trong X.

Điều này cũng liên quan đến các vấn đề bạn có thể gặp phải trong quá khứ, với một số DE không thể tắt hoặc khởi động lại, chỉ để đăng xuất, khi được sử dụng kết hợp với một số DM khác.

Trong mọi trường hợp, đây không phải là tài liệu quá tệ. GDM có một trang thủ công của một lệnh cho phép bạn yêu cầu tắt nó giống như tôi đã nói trước đó ( gdm-control). KDM cũng có tài liệu tuyệt vời và có một tiện ích tương tự (phức tạp hơn một chút) có tên kdmctl.


Có thể tắt máy và khởi động lại mà không cần Chính sách, nhưng Chính sách phục vụ nhiều mục đích cần thiết trên các hệ thống hiện nay như lắp đĩa mà không cần root, tạm dừng hoặc ngủ đông máy tính. Và nó cũng không phải là tài liệu xấu!

Kiểm tra điều này nếu bạn muốn biết thêm về PolicyKit là gì và nó hoạt động như thế nào: http://www.freedesktop.org/software/polkit/docs/latest/polkit.8.html


Âm thanh đầy hứa hẹn. Cảm ơn các liên kết đến các tài liệu. Tôi không có nghi ngờ những hướng dẫn này là toàn diện và rõ ràng nhưng chúng có thể không tồn tại. Câu trả lời của bạn là lần đầu tiên tôi thấy trình quản lý hiển thị được đề cập cùng với vấn đề này, vì vậy đây không phải là kiến ​​thức phổ biến. Tôi sẽ thử điều này và cho bạn biết ...
Joseph R.

ĐỒNG Ý. gdm-controlkhông giúp được gì Tài liệu mà bạn cung cấp trên PolicyKit có vẻ hứa hẹn hơn. Tôi sẽ nghiên cứu kỹ về điều đó và xem liệu tôi có thể thực hiện quy tắc tùy chỉnh không. Sẽ được tiếp tục ...
Joseph R.

1
Tôi đã đọc một số (đọc lướt, giống như nhiều hơn) và vui lòng sửa cho tôi nếu tôi sai: DE, khi được yêu cầu tắt máy, sẽ gửi tin nhắn đến DM thông qua bộ công cụ trên D-BUS. Trong khi chờ xác thực, phiên có thể bị chấm dứt hoặc yêu cầu bị thu hồi. Điều này được xác định trong một polkithành động được gọi org.freedesktop.consolekit.system.stop-multiple-userstrong /usr/share/polkit-1/actionsNó được đặt để thu hồi yêu cầu cho người dùng không hoạt động và auth_admin_keepcho người dùng đang hoạt động. Câu hỏi là, những gì định nghĩa hành động này? Chính xác thì nó thực thi cái gì?
Joseph R.

@don_crissti Điều đó giờ tôi đã hiểu. Điều tôi quan tâm chính là "tín hiệu" này. Khách hàng gửi nó là gì?
Joseph R.

@don_crissti Muốn chuyển bình luận này sang câu hỏi khác của tôi để theo dõi?
Joseph R.
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.