Keluarkan CD saat dimatikan

12

OK, jadi saya punya masalah sederhana: Saya punya CD langsung, dan saya ingin CD dikeluarkan ketika komputer di-boot ulang atau dihentikan.

Mengeksekusi /usr/bin/eject -mmembuat CD mengeluarkan ... masalah saja, seperti yang Anda perkirakan, ini akan merusak OS karena sekarang tidak dapat membaca file apa pun. Jadi reboot tidak pernah terjadi, karena /sbin/reboottidak dapat diakses. (Saya mencoba mengeksekusi reboot --help > /dev/nulltepat sebelum reboot, tetapi masih ada file lain yang masih belum dapat dibaca ...)

Singkatnya, tampaknya saya harus membuat eject menjadi hal terakhir yang terjadi. Jadi sepertinya itu systemdadalah anak anjing yang harus saya mainkan ... Tapi saya telah membuang-buang waktu hidup saya dengan menusuk dan mendorongnya, dan tidak peduli apa yang saya lakukan, tidak pernah, dalam keadaan apa pun, benar-benar mengeluarkan CD. Dan saya tidak tahu kenapa. Saya sudah mencoba berbagai cara memohon eject, tetapi tidak ada yang terjadi.

Adakah yang bisa memberitahuku cara paling sederhana untuk berlari eject? (Saya bayangkan setelah umount.targetitu masuk akal ...)

Matematika Matematika
sumber
Saya rasa Anda memiliki OS lain di komputer atau mengapa lagi Anda ingin mengeluarkan CD saat reboot? Jika ini alasannya, Anda mungkin bisa melakukan yang lebih baik jika Anda mengatur menu boot di mana Anda dapat memilih apakah akan boot dari CD atau dari disk.
Emanuel Berg
Setelah Anda menghitung CD, apakah Anda masih memiliki isi initramfs Anda? Jika ada di ejectsana, Anda akan baik-baik saja?
Ulrich Schwarz
Tahan. Itu aneh. Linux Mint, dan saya pikir Ubuntu melakukan ini secara default.
Linuxios

Jawaban:

4

Akhirnya kolega saya menemukan artikel berikut:

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

Singkatnya, saya membuat file bernama /lib/systemd/system/eject.serviceyang berisi

[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

Saya juga harus berlari systemctl enable eject.serviceuntuk membuat ini benar - benar melakukan apa pun. Tetapi sekarang systemdmengeluarkan CD tepat sebelum shutdown, persis seperti yang saya inginkan.

... sayangnya OS masih segfault ketika tidak dapat menemukan sisa file dengan CD yang dikeluarkan. Saya mencoba menyesuaikan file di atas sehingga kami miliki After=unmount.target, yang Anda pikir menjalankan skrip setelah filesystem telah di-unmount. Tapi tidak, tetap saja segfault.

Sepertinya saya harus mencari cara untuk menyalin gambar live CD ke dalam RAM saat boot - tetapi itu adalah pertanyaan lainnya ...

Matematika Matematika
sumber
1

Berikut ini dapat membantu Anda:

  • Tambahkan perintah eject Anda di /etc/init.d/halt.local

  • Anda juga dapat melihat /etc/init.d/skeleton template dan menyesuaikan ini untuk mungkin menambahkan beberapa output misalnya sistem mematikan, tekan tombol apa saja untuk mengeluarkan cdrom dll.

  • Lihat skrip di /etc/init.d yang ditautkan ke dalam direktori runlevel /etc/rc0.d (berhenti).

Md Mahbubur Rahman
sumber
0

Lihatlah skrip /etc/init.dyang terhubung ke dalam direktori runlevel /etc/rc0.d(berhenti) dan /etc/rc6.d(reboot). Sebagai contoh, saya memasukkan perintah eject /etc/init.d/rebootdan berfungsi dengan baik.

Tapi, saya tidak di CD Live jadi saya tidak bisa menguji apa yang akan berhasil.

Jika Anda memikirkannya, kira-kira seperti ini, sulit dibayangkan, memasukkan skrip atau bahkan biner yang dikompilasi. Bahkan sebuah biner membutuhkan beberapa alokasi / deallokasi overhead, dan segera setelah Anda mengeluarkan CD, Anda selesai. Sebaliknya, itu harus seperti bendera dan penunjuk ke instruksi mesin, disimpan dalam beberapa memori super-persisten ...

Mungkin lebih mudah untuk hanya menjalankan perintah dan sengaja crash OS, tetapi untuk melakukannya ketika hampir semua hal sedang offline, jadi tidak masalah bahwa Anda crash sistem yang tersisa.

(Sunting) Pikiran lain: Bisakah Anda mempartisi sistem file Anda, membuat partisi hanya untuk perintah eject dan reboot, unmount semua yang lain, kemudian jalankan perintah? (Tapi, mungkin kemudian fsck harus diberitahu untuk tidak mengeluh setiap waktu, bahwa partisi-eject tidak di-mount dengan benar.) Atau, bisakah Anda meletakkannya di USB stick? (Ini adalah masalah yang sangat menarik; jika Anda menyelesaikannya, beri tahu kami!)

(Sunting 2) Bagaimana dengan menggabungkan eject dan reboot, jadi Anda mendapatkan satu biner, ia dimuat ke dalam memori, mengeluarkan CD, tetapi tidak harus memuat reboot dari sistem file apa pun, ia sudah ada dalam memori utama?

Emanuel Berg
sumber
0

ubuntu bisa digunakan eject -m; reboot -f

jamlee
sumber