นำแผ่นซีดีออกเมื่อปิดเครื่อง


12

ตกลงดังนั้นฉันมีปัญหาง่าย ๆ : ฉันมีซีดีสดและฉันต้องการให้ซีดีขับออกเมื่อคอมพิวเตอร์รีบูทหรือหยุด

การดำเนินการ/usr/bin/eject -mทำให้ซีดีนำออกได้ดี ... ปัญหาคือตามที่คุณคาดหวังสิ่งนี้จะทำให้ระบบปฏิบัติการล่มเพราะตอนนี้ไม่สามารถอ่านไฟล์ใด ๆ ได้ ดังนั้นการรีบูตจะไม่เกิดขึ้นเพราะ/sbin/rebootไม่สามารถเข้าถึงได้ (ฉันพยายามเรียกใช้งานreboot --help > /dev/nullก่อนรีบูต แต่ยังมีไฟล์อื่นที่ยังอ่านไม่ได้ ... )

โดยสรุปปรากฏว่าฉันต้องทำให้ดีดออกเป็นสิ่งสุดท้ายที่เกิดขึ้น ดูเหมือนว่ามันจะsystemdเป็นลูกสุนัขที่ฉันต้องเล่นด้วย ... แต่ฉันเสียเวลาหลายชั่วโมงในชีวิตของฉันที่จะกระตุ้นและแหย่มันและไม่ว่าฉันจะทำอะไรมันไม่เคยไม่ว่าภายใต้สถานการณ์ใด ๆ และฉันก็ไม่รู้ว่าทำไม ฉันลองใช้วิธีการที่แตกต่างกันหลายวิธีejectแต่ก็ไม่มีอะไรเกิดขึ้น

ใครช่วยบอกวิธีที่ง่ายที่สุดในการวิ่งได้ejectไหม (ฉันจินตนาการหลังจากนั้นumount.targetจะมีเหตุผล ... )


ฉันคิดว่าคุณมีระบบปฏิบัติการอื่นบนคอมพิวเตอร์หรือทำไมคุณต้องการที่จะเปิดแผ่นซีดีเมื่อรีบูต? หากนี่คือเหตุผลคุณอาจทำได้ดีกว่านี้หากคุณตั้งค่าเมนูการบู๊ตซึ่งคุณสามารถเลือกได้ว่าจะให้บูตจากซีดีหรือจากดิสก์
Emanuel Berg

หลังจากที่คุณขยายซีดีคุณจะยังคงมีเนื้อหาของ initramfs อยู่หรือไม่ หากมีที่ejectนั่นคุณจะสบายดีไหม
Ulrich Schwarz

ยึดมั่นใน มันแปลกมาก Linux Mint และฉันคิดว่า Ubuntu ทำตามค่าเริ่มต้น
Linuxios

คำตอบ:


4

ในที่สุดเพื่อนร่วมงานของฉันพบบทความต่อไปนี้:

http://lists.freedesktop.org/archives/systemd-devel/2012-September/006573.html

โดยสรุปฉันสร้างไฟล์ชื่อ/lib/systemd/system/eject.serviceที่มี

[Unit]
Description=Eject the DVD
Before=final.target
After=shutdown.target
DefaultDependencies=no

[Service]
Type=oneshot
ExecStart=/usr/bin/eject -m
StandardInput=tty-force
StandardOutput=inherit
StandardError=inherit

[Install]
WantedBy=shutdown.target

ฉันยังต้องวิ่งsystemctl enable eject.serviceเพื่อทำสิ่งนี้จริง ๆ แล้วทำอะไร แต่ตอนนี้ดีsystemdดแผ่นซีดีออกก่อนปิดเครื่องตามที่ฉันต้องการ

... น่าเสียดายที่ระบบปฏิบัติการยังคงแยกส่วนเมื่อไม่สามารถหาไฟล์ที่เหลือด้วยการเปิดซีดี ฉันพยายามปรับไฟล์ด้านบนดังนั้นเราจึงมีAfter=unmount.targetซึ่งคุณคิดว่าจะรันสคริปต์หลังจากที่ระบบไฟล์ถูก unmount แต่ไม่มันยังแยกออกมา

ดูเหมือนว่าฉันจะต้องหาวิธีคัดลอกอิมเมจซีดีสดไปที่ RAM ในการบู๊ต - แต่นั่นเป็นคำถามอื่นทั้งหมด ...


1

ข้อมูลต่อไปนี้อาจช่วยคุณได้:

  • เพิ่มคำสั่ง eject ของคุณที่ /etc/init.d/halt.local

  • คุณสามารถดูเทมเพลต /etc/init.d/skeleton และปรับแต่งสิ่งนี้เพื่อเพิ่มเอาท์พุตบางส่วนเช่นการปิดระบบกดปุ่มใด ๆ เพื่อดีดซีดีรอม ฯลฯ

  • ตรวจสอบสคริปต์ใน /etc/init.d ที่เชื่อมโยงกับในไดเร็กทอรี runlevel /etc/rc0.d (หยุดชั่วคราว)


0

ตรวจสอบสคริปต์ใน/etc/init.dที่เชื่อมโยงกับในไดเรกทอรี runlevel /etc/rc0.d(หยุด) และ/etc/rc6.d(รีบูต) ตัวอย่างเช่นฉันใส่คำสั่ง eject เข้าไป/etc/init.d/rebootและมันก็ใช้ได้ดี

แต่ฉันไม่ได้อยู่ใน Live CD ดังนั้นฉันจึงไม่สามารถทดสอบสิ่งที่จะได้ผล

หากคุณคิดเกี่ยวกับมันบางอย่างเช่นนี้มันยากที่จะจินตนาการวางสคริปต์หรือแม้แต่ไบนารีที่คอมไพล์ แม้แต่ไบนารียังต้องการค่าใช้จ่ายในการจัดสรร / การจัดสรรคืนและทันทีที่คุณนำซีดีออกมา แต่ควรเป็นเหมือนแฟล็กและตัวชี้ไปยังคำสั่งเครื่องที่เก็บไว้ในหน่วยความจำถาวรบางอย่าง ...

อาจจะง่ายกว่าในการรันคำสั่งและจงใจทำให้ระบบปฏิบัติการพัง แต่จงทำเมื่อเกือบทุกอย่างออฟไลน์อยู่ดังนั้นจึงไม่สำคัญว่าคุณจะผิดพลาดระบบที่เหลืออยู่ของคุณ

(แก้ไข)ความคิดอื่น: คุณสามารถแบ่งพาร์ติชั่นระบบแฟ้มของคุณสร้างพาร์ติชั่นสำหรับคำสั่ง eject และรีบูตโดยไม่ต้องต่อเชื่อมกับอุปกรณ์อื่นแล้วรันคำสั่งได้หรือไม่ (แต่อาจจะต้องบอกให้ fsck บอกว่าอย่าบ่นทุกครั้งว่า eject-partition ไม่ได้ถูก unmount อย่างถูกต้อง) หรือคุณจะเอามันใส่ USB Stick? (นี่เป็นปัญหาที่น่าสนใจมากหากคุณแก้ปัญหาได้โปรดบอกเรา!)

(แก้ไข 2)แล้วการรวม eject และ reboot เข้าด้วยกันคุณจะได้ไบนารี่หนึ่งอันมันถูกโหลดเข้าไปในหน่วยความจำ eject ejects CD แต่ไม่ต้องทำการรีบูตจากระบบไฟล์ใด ๆ มันมีอยู่แล้วในหน่วยความจำหลัก?


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