จะเกิดอะไรขึ้นเมื่อฉันกด“ ปิดเครื่อง” จาก GUI


15

ฉันต่อสู้กับสิ่งนี้มาระยะหนึ่งแล้ว มันเกี่ยวข้องกับคำถามนี้ ฉันอยากจะรู้ว่าเกิดอะไรขึ้นเมื่อฉันเลือกที่จะปิดกล่อง Linux ของฉันจาก GUI เอกสารนี้ดูเหมือนว่าจะไม่ดี (ถ้ามี)

เป็นการดีที่ฉันหวังว่าจะได้คำตอบ DE- และผู้ไม่เชื่อเรื่องพระเจ้า นอกจากนี้ฉันสนใจกรณีเฉพาะของ Mandriva 2010.1 และ Debian 6.x (Squeeze) และ 7.0 (Wheezy) ทั้งหมดที่ใช้ Gnome (หากคุณสนใจอย่างใกล้ชิดใช่ว่านั่นคือ Gnome 2 และ Gnome 3)

โดยทั่วไปฉันต้องการทราบว่าคำสั่ง / สคริปต์ / ลำดับของสคริปต์เริ่มต้นเมื่อฉันกด "ปิด" หรือ "เริ่มต้นใหม่" เพื่อให้ฉันสามารถปรับเปลี่ยนพฤติกรรมของพวกเขา บางกระทู้ในฟอรั่มที่ฉันดูแนะนำการแฮ็ก/etc/polkit-1/*แต่โครงสร้างไดเรกทอรีนี้เป็นเพียงโครงกระดูกในกล่อง Debian (Squeeze) ของฉัน

ใครช่วยได้บ้าง


แก้ไข

สิ่งที่ฉันได้ลองมาแล้ว

  • แทนที่shutdownไฟล์ปฏิบัติการด้วยสคริปต์ของฉันเอง สิ่งนี้ไม่ทำงาน: เมื่อฉันกดshutdownGnome ล็อกเอาต์โดยไม่ใช้สคริปต์ของฉัน
  • พยายามแก้ไขเมนู Gnome 2 ไม่มีความสุข: ตัวเลือก "ปิดเครื่อง", "ออกจากระบบ" และ "ล็อคหน้าจอ" ไม่ปรากฏในเครื่องมือแก้ไขเมนู
  • ดูสิ/usr/share/menuไม่มีประโยชน์อะไรที่นั่น

ลู่ทางที่เป็นไปได้สำหรับการแก้ปัญหา

  • straceเลือกตัวเลือก GUI (เป็นไปได้ไหม)
  • ดูshutdownซอร์สโค้ดของ
  • ดูgnome-sessionซอร์สโค้ดของ

ปรับปรุง

ตามความคิดเห็นของฉันเกี่ยวกับคำตอบด้านล่างฉันได้ดูpolkitการกระทำภายใต้/usr/share/polkit-1/actions/และพบ (ในไฟล์org.freedesktop.consolekit.policy) การกระทำที่เรียกorg.freedesktop.consolekit.system.stop-multiple-usersว่าพ่นข้อความ

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

ฉันกำลังคิด (เนื่องจากรูปorg.freedesktop.*แบบการตั้งชื่อ) ว่านี่เป็นสัญญาณบางชนิดที่ส่งไปยัง DM ผ่าน D-BUS นอกจากนี้ข้อความนี้จะปรากฏขึ้นเมื่อพยายามปิดกราฟิกในขณะที่ผู้ใช้รายอื่นเข้าสู่ระบบดังนั้นกลไกที่ทริกเกอร์จะต้องเป็นกลไกเดียวกันที่ถูกเรียกเมื่อเลือก "ปิดเครื่อง" หรือ "ปิดเครื่อง" จาก GUI

ใครสามารถยืนยัน / ปฏิเสธได้ มีความเป็นไปได้ที่จะสกัดสัญญาณนี้หรือดัดแปลงมันได้หรือไม่?


คุณพยายามทำอะไรให้สำเร็จ คุณอาจจะสามารถเพิ่มแก้ไข/etc/init.d/rc.localเพื่อเรียกสคริปต์เมื่อถูกหยุด
ทำให้หมดกำลังใจ

@depquid สิ่งที่ฉันพยายามทำให้สำเร็จคือคำถามเก่าที่ฉันเชื่อมโยงกับ: ฉันกำลังพยายามป้องกันไม่ให้ผู้ใช้ที่ลงชื่อเข้าใช้ในเครื่องจากการปิดกั้นเซสชัน SSH ของผู้ใช้รายอื่น
Joseph R.

คำตอบ:


9

ขึ้นอยู่กับเครื่องมือจัดการหน้าจอของคุณ! (เช่น KDM, GDM)

โปรดจำไว้ว่า DM ของคุณทำงานในระดับรากแล้ว! (ต้องใช้สิทธิ์รูทเพื่อที่จะเรียกใช้กระบวนการเซสชั่นของคุณในฐานะผู้ใช้ที่คุณเข้าสู่ระบบ)

เมื่อคุณคลิกปิดระบบใน KDE หรือ GNOME DE ของคุณจะส่งสัญญาณไปยัง DM ของคุณเพื่อปิดหรือรีสตาร์ทหลังจากเซสชันสิ้นสุดลง จากนั้น DE ของคุณจะบอกให้ทุกโปรแกรมสิ้นสุดและเมื่อกระบวนการอื่นทั้งหมดสิ้นสุดลง (หรือหมดเวลาที่หมดเวลา) กระบวนการสุดท้ายของ DE ของคุณ - กระบวนการเซสชัน - จะสิ้นสุดลง

กระบวนการเซสชันเป็นกระบวนการแรกที่เริ่มต้นในเซสชัน X11 เมื่อมันถูกฆ่าตายหรือมันสิ้นสุดลงเซสชั่นจะสิ้นสุดลง คุณเคยเห็น xterm นั้นเมื่อใช้ X ที่ไม่มี DE หรือไม่? นั่นคือกระบวนการเซสชั่น กระบวนการนี้เรียกว่าkdeinitใน KDE และgnome-sessionใน GNOME

เมื่อเซสชันสิ้นสุดลงการควบคุมจะถูกส่งกลับไปยัง DM ของคุณ (ซึ่งกำลังรอให้กระบวนการ X สิ้นสุด) และตรวจสอบสิ่งที่ DE บอกให้เขาทำ ถ้ามันบอกให้มันดับหรือรีสตาร์ทมันจะทำเช่นนั้น ในกรณีอื่นมันเพิ่งจะเริ่มหน้าจอเข้าสู่ระบบใหม่ใน X

สิ่งนี้เกี่ยวข้องกับปัญหาที่คุณเคยมีในอดีตด้วยบาง DE ไม่สามารถปิดหรือรีสตาร์ทเพียงเพื่อออกจากระบบเมื่อใช้ร่วมกับ DM อื่น ๆ

ไม่ว่าในกรณีใด ๆ เอกสารนี้ไม่ได้เลวร้ายนัก GDM มีหน้าคู่มือของคำสั่งที่อนุญาตให้คุณบอกให้ปิดเหมือนที่ฉันบอกไว้ก่อนหน้า ( gdm-control) KDM มีเอกสารที่ดีเกินไปและมีความคล้ายกัน (เล็ก ๆ น้อย ๆ ที่ซับซ้อนมากขึ้น) kdmctlยูทิลิตี้ชื่อ


การปิดและการรีสตาร์ทเป็นไปได้โดยไม่ต้อง PolicyKit แต่ PolicyKit มีจุดประสงค์มากมายในระบบทุกวันนี้เช่นการติดตั้งดิสก์โดยไม่ต้องรูทระงับหรือไฮเบอร์เนตคอมพิวเตอร์ และมันก็ไม่ได้เป็นเอกสารที่ไม่ดี!

ตรวจสอบสิ่งนี้หากคุณต้องการทราบเพิ่มเติมเกี่ยวกับ PolicyKit คืออะไรและทำงานอย่างไร: http://www.freedesktop.org/software/polkit/docs/latest/polkit.8.html


เสียงที่มีแนวโน้ม ขอบคุณสำหรับลิงก์ไปยังเอกสาร ฉันไม่สงสัยเลยว่าคู่มือเหล่านี้มีเนื้อหาครอบคลุมและชัดเจน แต่อาจไม่มีอยู่จริง คำตอบของคุณเป็นครั้งแรกที่ฉันได้เห็นตัวจัดการการแสดงผลที่กล่าวถึงร่วมกับปัญหานี้ดังนั้นจึงไม่ใช่ความรู้ทั่วไป ฉันจะลองและแจ้งให้คุณทราบ ...
Joseph R.

ตกลง. gdm-controlไม่มีความช่วยเหลือ เอกสารที่คุณให้ไว้ใน PolicyKit นั้นดูมีแนวโน้มมากกว่า ฉันจะขุดลงไปและดูว่าฉันสามารถใช้กฎที่กำหนดเองได้หรือไม่ จะยังคง ...
โจเซฟอาร์

1
ฉันได้อ่าน (อ่านเพิ่มเติม) และแก้ไขให้ถูกต้องถ้าฉันผิด: DE เมื่อถูกขอให้ปิดเครื่องจะส่งข้อความไปยัง DM ผ่าน polkit บน D-BUS รอการตรวจสอบสิทธิ์เซสชันอาจถูกยกเลิกหรือเพิกถอนคำขอ สิ่งนี้ถูกกำหนดในการpolkitดำเนินการที่เรียกว่าorg.freedesktop.consolekit.system.stop-multiple-usersใน/usr/share/polkit-1/actionsมันถูกตั้งค่าให้ยกเลิกการร้องขอสำหรับผู้ใช้ที่ไม่ได้ใช้งานและauth_admin_keepสำหรับผู้ใช้ที่ใช้งานอยู่ คำถามคืออะไรกำหนดการกระทำนี้ มันทำงานอะไรกันแน่?
โจเซฟอาร์

@don_crissti ตอนนี้ฉันเข้าใจแล้ว สิ่งที่ฉันสนใจคือ "สัญญาณ" นี้อย่างแม่นยำ ลูกค้าที่ส่งมันคืออะไร?
Joseph R.

@don_crissti สนใจที่จะย้ายความคิดเห็นนี้ไปยังคำถามอื่นของฉันสำหรับการติดตาม?
โจเซฟอาร์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.