Salut, j'ai un nouveau problème :
Voila donc je suis en train de créer un live CD qui inclut VMware Free Player, à l'aide du programme Bootcdwrite + un script pour la détection de la carte graphique (pour plus de détails il y a déjà un post la dessus).
Tout marche parfaitement; enfin presque !
Mon problème, est que lorsque j'éteint mon PC en quittant linux qui est chargé depuis mon cd live donc, l'ordinateur s'éteint mais le CD reste dans le lecteur :( .
Je cherche donc un script ou une autre solution qui permettrai l'éjection de mon CD avant l'extinction finale de ma machine, comme sur Knoppix ou Kaella..., j'ai essayé de chercher le script ou programme qui fait ça, dans une Kaella mais je ne le trouve pas.
Si quelqu'un pouvait avoir la solution à mon problème, et nous la faire partager, cela serait plutôt pas mal.
Merci
# Je crois que j'ai trouvé mais c'est du chinois pour moi là
Posté par julien pooloots . Évalué à 1.
vi /etc/rc0.d/S90knoppix-halt
A partir de la ligne 180, le script s'attaque à l'éjection du cd-rom, mais bon avant il y a toute une séquence de démontage tout bien triée.
En attendant une réponse je vais tester :
A - Copier ces fameuses lignes d'éjection du CD-ROM dans le fichier "halt" de mon live cd.
B - Copier tout le script et remplacer celui de mon live-cd par celui-la.
Je sais c'est un peu des methodes de goret là, mais je c'est pas trop comment faire.
Merci.
# meuh
Posté par gc (site web personnel) . Évalué à 2.
fd = open("/dev/cdrom", O_RDONLY|O_NONBLOCK, 0);
if (fd > 0) {
ioctl(fd, CDROM_LOCKDOOR, 0);
close(fd);
}
fd = open("/dev/cdrom", O_RDONLY|O_NONBLOCK, 0);
if (fd > 0) {
ioctl(fd, CDROMEJECT, 0);
close(fd);
}
http://cvs.mandriva.com/cgi-bin/cvsweb.cgi/~checkout~/gi/mdk(...)
[^] # Merci, mais je que doit-je faire
Posté par julien pooloots . Évalué à 1.
ou il faut faire autre chose ?
Merci
PS: je débute sous Linux :)
[^] # Re: Merci, mais je que doit-je faire
Posté par tontonflingueur . Évalué à 1.
[^] # Re: Merci, mais je que doit-je faire
Posté par tontonflingueur . Évalué à 1.
int fd = -1;
juste après le main.
[^] # Oulala les gars moi je sais pas programmer
Posté par julien pooloots . Évalué à 1.
Si quelqu'un a une autre solution, elle est la bienvenue !!!
PS: Dans le pire des cas si je n'arrive pas a "créer" ce petit programme, serait-il possible de me l'envoyer par mail ?
Merci
[^] # Comme prevu, je ne sais pas compiler
Posté par julien pooloots . Évalué à 1.
vi /home/debuser/force_eject.cc
j'ai collé ca dedans :
#include <sys/ioctl.h>
int main(void){
int fd = -1;
fd = open("/dev/cdrom", O_RDONLY|O_NONBLOCK, 0);
if (fd > 0) {
ioctl(fd, CDROM_LOCKDOOR, 0);
close(fd);
}
fd = open("/dev/cdrom", O_RDONLY|O_NONBLOCK, 0);
if (fd > 0) {
ioctl(fd, CDROMEJECT, 0);
close(fd);
}
}
Je quitte et je sauve
:wq
Et je lance la compilation :
cc /home/debuser/force_eject.cc -o /home/debuser/force_eject
Et la mon PC me rote au visage :
/home/debuser/force_eject.cc: Dans function « int main() »:
/home/debuser/force_eject.cc:5: error: `O_RDONLY' undeclared (first use this
function)
/home/debuser/force_eject.cc:5: error: (Each undeclared identifier is reported
only once for each function it appears in.)
/home/debuser/force_eject.cc:5: error: `O_NONBLOCK' undeclared (first use this
function)
/home/debuser/force_eject.cc:5: error: `open' undeclared (first use this
function)
/home/debuser/force_eject.cc:7: error: `CDROM_LOCKDOOR' undeclared (first use
this function)
/home/debuser/force_eject.cc:8: error: `close' undeclared (first use this
function)
/home/debuser/force_eject.cc:12: error: `CDROMEJECT' undeclared (first use this
function)
Si vous pouviez me détailler en détails ce que je dois faire. svp
Merci encore
[^] # Re: Comme prevu, je ne sais pas compiler
Posté par tontonflingueur . Évalué à 1.
Ajoute
#include <linux/cdrom.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
Bonne chance.
[^] # Fantastique, sa marche !!!!
Posté par julien pooloots . Évalué à 1.
Oh cas ou ca intéresse quelqu'un, voici la démarche exact :
vi /home/force_eject.c
collez ca dans vi :
#include <sys/ioctl.h>
#include <linux/cdrom.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main(void){
int fd = -1;
fd = open("/dev/cdrom", O_RDONLY|O_NONBLOCK, 0);
if (fd > 0) {
ioctl(fd, CDROM_LOCKDOOR, 0);
close(fd);
}
fd = open("/dev/cdrom", O_RDONLY|O_NONBLOCK, 0);
if (fd > 0) {
ioctl(fd, CDROMEJECT, 0);
close(fd);
}
}
Sauvez et quittez; ("echap", ":", "wq")
Entrez la commande suivante dans votre console :
cc /home/force_eject.c -o /home/force_eject
Allez dans le repertoire home et lancez force_eject, votre lecteur cd devrait réagir !!!
Encore bien merci
Par contre j'aimerai que ce programme s'éxecute à la fermeture de linux juste avant le shutdown final. Que le cd s'éjecte et que l'ordinateur me demande d'appuyer sur une touche avant de s'éteindre.
Je penssais rajouter quelques lignes dans le fichier "halt"
vers la fin (en ayant bien sure copier le fichier force_eject dans le repertoire /usr/bin), du genre :
/usr/bin/force_eject
echo "APPUYER SUR ENTREE POUR CONTINUER"
read off
Bah, en fait je vais tester et je verrais bien !
Sinon apres sa serait bien que le lecteur se referme une fois que j'ai appuyer sur entrée, faudrait faire un autre petit prog comme ca, je suppose qu'il n'y a pas grand chose à modifier dedans, si vous pouviez me donner le bout de code à taper sa serait fort sympathique de votre part. :)
Encore merci à vous !!!
[^] # Et je continue :) (une fois que j'aurais fini mon cd je ferai un tuto)
Posté par julien pooloots . Évalué à 1.
vi /etc/rc0.d/S90halt
après la ligne :
PATH=/sbin:/bin:/usr/sbin:/usr/bin
j'insère
/usr/bin/force_eject
echo "APPUYER SUR ENTREE POUR CONTINUER"
read off
je sauve et je quitte :)
mais je suis sur le disque dur. Je vais recréer mon cd live avec ces nouvelles modifications et on va bien voire ce que sa dit.
PS: j'ai essayer de faire le bourrins en créant un "force_close" pour refermmer le lecteur, evidemment, sa ne marche pas.
Sur les 2 lignes fd = eject, j'ai remplacé par close
fd = close("/dev/cdrom", O_RDONLY|O_NONBLOCK, 0);
[^] # Je pense avoir trouver !!!
Posté par julien pooloots . Évalué à 1.
/usr/bin/force_eject
echo "APPUYER SUR ENTREE POUR CONTINUER"
read off
mount /dev/cdrom
Bon, je refait encore une nouvelle iso avec les nouvelles modification pour tester.
[^] # Arf sa ne marche pas !!! :(
Posté par julien pooloots . Évalué à 1.
Le programme parle directement aux périphériques de la machine, il se fiche que le système d'exploitation voit le lecteur cd comme un disque dur, il éjecte le cd-rom (enfin je pense).
Alors que le script lui passe par l'os, et du coup celui-ci me dit qu'il ne s'agit pas de /dev/cdrom mais de /ram1/dev/hdc, ce qui risque certainement de changer d'une configuration à l'autre.
Il me faut absolument un bout de programme pour refermmer ce #*@|#& de lecteur cd !!!
Sinon tout le reste fonctionne à merveille ! ;)
[^] # Snifff :( sa ne marche pas en live cd
Posté par julien pooloots . Évalué à 0.
Alors, j'ai eu une nouvelle idée !!!
j'ai re-modifié le script /etc/rc0.d/S90halt
j'ai enlevé la commande qui était censé refermer le lecteur
enfin voila ce que sa donne :
/usr/bin/force_eject
clear
echo -e '\E[31m'"REFERMEZ LE LECTEUR CD"
echo -e '\E[32m'"APPUYEZ SUR ENTREE POUR CONTINUER"
read off
...
...
..
.
(suite du script d'origine)
Alors là, pour peu que l'on ait un doigt pour appuyer sur le boutton du lecteur cd et un oeil pour lire à l'écran, sa marche du tonnerre !!!
Y'a des fois où sa sert à rien de se casser la tête; bon ok sa fait moins pro mais sa marche ! :)
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.