Wysuń dysk CD po wyłączeniu


12

OK, więc mam prosty problem: mam CD na żywo i chcę, aby CD wysunął się, gdy komputer zostanie ponownie uruchomiony lub zatrzymany.

Wykonywanie /usr/bin/eject -msprawia, że ​​CD wysuwa się dobrze ... kłopot polega na tym, jak można się spodziewać, powoduje to awarię systemu operacyjnego, ponieważ nie można teraz odczytać żadnych plików. Ponowne uruchomienie nigdy się nie dzieje, ponieważ /sbin/rebootjest niedostępne. (Próbowałem uruchomić reboot --help > /dev/nulltuż przed ponownym uruchomieniem komputera, ale nadal istnieją inne pliki, których nadal nie można odczytać ...)

Podsumowując, wydaje się, że muszę sprawić, aby wysunięcie było ostatnią rzeczą, która się wydarzy. Wygląda na to, że systemdto szczeniak, z którym muszę się bawić ... Ale zmarnowałem dosłownie godziny życia na szturchanie go i szturchanie go, i bez względu na to, co robię, nigdy, nigdy, w żadnym wypadku, nie wyrzuca CD. I nie mam pojęcia dlaczego. Wypróbowałem kilkanaście różnych sposobów wywoływania eject, ale nic się nigdy nie dzieje.

Czy ktoś może mi powiedzieć najprostszy sposób na bieganie eject? (Wyobrażam sobie, że zaraz potem umount.targetbyłoby rozsądne ...)


Rozumiem, że masz inny system operacyjny na komputerze lub dlaczego chcesz wysunąć płytę CD podczas ponownego uruchamiania? Jeśli to jest powód, prawdopodobnie możesz zrobić lepiej, jeśli skonfigurujesz menu rozruchu, w którym możesz wybrać, czy chcesz uruchomić z dysku CD, czy z dysku.
Emanuel Berg,

Czy po zmontowaniu płyty CD nadal nie masz zawartości swoich initramfs? Jeśli tam jest eject, wszystko będzie dobrze?
Ulrich Schwarz,

Czekaj. To dziwne. Linux Mint i myślę, że Ubuntu robi to domyślnie.
Linuxios,

Odpowiedzi:


4

W końcu mój kolega znalazł następujący artykuł:

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

Podsumowując, stworzyłem plik o nazwie, /lib/systemd/system/eject.servicektóry zawiera

[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

Miałem również uruchomić systemctl enable eject.service, aby to rzeczywiście zrobić cokolwiek. Ale teraz systemdwysuwa CD tuż przed wyłączeniem, dokładnie tak, jak chciałem.

... niestety system operacyjny nadal działa nieprawidłowo, gdy nie może znaleźć pozostałych plików z wysuniętą płytą CD. Próbowałem dopasować powyższy plik, abyśmy mieli After=unmount.target, co według ciebie uruchamia skrypt po odmontowaniu systemów plików. Ale nie, nadal działa nieprawidłowo.

Wygląda na to, że będę musiał wymyślić, jak skopiować obraz Live CD do pamięci RAM podczas uruchamiania - ale to jest zupełnie inne pytanie ...


1

Poniższe informacje mogą ci pomóc:

  • Dodaj swoje polecenie wysuwania na /etc/init.d/halt.local

  • Możesz także spojrzeć na szablon /etc/init.d/skeleton i dostosować go, aby dodać jakieś wyjście, np. Wyłączenie systemu, nacisnąć dowolny klawisz, aby wysunąć cdrom itp.

  • Sprawdź skrypty w /etc/init.d, do których prowadzą linki w katalogach poziomu uruchamiania /etc/rc0.d (halt).


0

Sprawdź skrypty, /etc/init.dktóre są powiązane z katalogami poziomu uruchamiania /etc/rc0.d(zatrzymanie) i /etc/rc6.d(ponowne uruchomienie). Na przykład wstawiłem polecenie wysuwania /etc/init.d/rebooti działało dobrze.

Ale nie jestem na Live CD, więc nie mogę przetestować, co by działało.

Jeśli się nad tym zastanowić, trudno to sobie wyobrazić, umieszczając skrypt lub nawet skompilowany plik binarny. Nawet plik binarny wymaga narzutu związanego z alokacją / dezalokacją, a gdy tylko wyjmiesz dysk CD, gotowe. Powinien raczej przypominać flagę i wskaźnik do instrukcji maszynowej, przechowywany w jakiejś bardzo trwałej pamięci ...

Może łatwiej jest po prostu uruchomić polecenie i celowo zawiesić system operacyjny, ale zrobić to, gdy prawie wszystkie rzeczy są w trybie offline, więc nie będzie miało znaczenia, że ​​zawiesisz pozostały system.

(Edytuj) Inna myśl: czy możesz jakoś podzielić system plików na partycje, tworząc partycję dla samego polecenia wysuwania i restartu, odmontuj wszystkie pozostałe, a następnie uruchom polecenie? (Ale prawdopodobnie fsck musiałby być za każdym razem proszony, aby nie narzekał, że partycja wysuwania nie została odmontowana poprawnie). Czy możesz umieścić ją na pamięci USB? (To bardzo interesujący problem; jeśli go rozwiążesz, powiedz nam!)

(Edycja 2) Co z połączeniem wysuwania i ponownego uruchamiania, więc dostajesz jeden plik binarny, jest on ładowany do pamięci, wysuwa wysuwa CD, ale nie musi ładować ponownego uruchomienia z dowolnego systemu plików, jest już w pamięci głównej?


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.