Retour sur la liste apr�s un �change en priv� et quelques recherches.

Bayrouni <[EMAIL PROTECTED]> writes:

> Leopold BAILLY wrote:
>> Bayrouni <[EMAIL PROTECTED]> writes:
>>
>>>Leopold BAILLY wrote:
>>>
>>>>Bayrouni <[EMAIL PROTECTED]> writes:
>>>>
>>>>
>>>>>Leopold BAILLY wrote:
>>>>>
>>>>>
>>>>>>Bayrouni <[EMAIL PROTECTED]> writes:
>>>>>>
>>>>>>
>>>>>>
>>>>>>>Jean-Michel OLTRA wrote:
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>>  bonjour,
>>>>>>>>Le jeudi 24 mars 2005, Astar0th a �crit...
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>>>./trig-alarm
>>>>>>>>>>Could not open /dev/console for writing.
>>>>>>>>>>open: Permission denied.
>>>>>>>>>>
>>>>>>>>>>Le programme s'exute pendant les 10 secondes de test mais sans aucun 
>>>>>>>>>>son.
>>>>>>>>>>
>>>>>>>>>>Je suis persiad� qu'il s'agit d'une question de droits mais sur quoi ?
>>>>>>>>
>>>>>>>>Essaye avec strace (man strace)
>>>>>>>>strace -e file ./trig-alarm
>>>>>>>
>>>>>>>
>>>>>>>Voici l'affichage de     
>>>>>>>
>>>>>>>strace -e file ./bin/trig-alarm:
>>>>>>>
>>>>>>>execve("./bin/trig-alarm", ["./bin/trig-alarm"], [/* 23 vars */]) = 0
>>>>>>>access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or 
>>>>>>>directory)
>>>>>>>open("/etc/ld.so.preload", O_RDONLY)    = -1 ENOENT (No such file or 
>>>>>>>directory)
>>>>>>>open("/etc/ld.so.cache", O_RDONLY)      = 3
>>>>>>>fstat64(3, {st_mode=S_IFREG|0644, st_size=24361, ...}) = 0
>>>>>>>access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or 
>>>>>>>directory)
>>>>>>>open("/lib/tls/libc.so.6", O_RDONLY)    = 3
>>>>>>>fstat64(3, {st_mode=S_IFREG|0644, st_size=1253924, ...}) = 0
>>>>>>>open("/dev/console", O_WRONLY)          = 3
>>>>>>
>>>>>>J'ai lanc� strace sur echo -e "\a", qui provoque un bip du haut-parleur, 
>>>>>>pour
>>>>>>voir dans quel p�riph�rque il �crit.
>>>>>>Il �crit dans /dev/pts/0, qui est le terminal associ� � mon shell comme 
>>>>>>je peux
>>>>>>le voir avec ps, sur lequel j'ai bien les droits d'�criture.
>>>>>>Je pense tout simplement que ton programme est bugg� car il �crit
>>>>>>syst�matiquement dans /dev/console (r�serv� � root) au lieu de rechercher 
>>>>>>(par
>>>>>>un moyen que j'ignore) le terminal attach� � son processus.
>>>>>>L�o.

Je retire ce que j'ai dit, il ne semble pas possible d'aller au del� du simple
bip (\a) sans �crire dans /dev/console.

>>>>>>
>>>>>
>>>>>Voici la ligne qui est mise en cause dans mon programme C.
>>>>>(Je ne suis pas du tout specialiste du C)
>>>>>
>>>>>console_fd = open("/dev/console", O_WRONLY)
>>>>
>>>>V�rifie que /dev/pts/0 t'appartient bien et remplace /dev/console par
>>>>/dev/pts/0
>>>>juste pour voir si �a marche.
>>>>L�o.
>>>>
>>>
>>>J'avais d�j� essay� de remplac� /dev/console par /dev/pts/0
>>>  ll /dev/pts/0
>>>crw--w----  1 moi tty 136, 0 2005-03-25 18:04 /dev/pts/0
>>>
>>>Le programme se compile et s'execute mais sans alarme (une boucle de beeps �
>>>differentes frequences).
>> Est-ce que tu peux m'envoyer le source du programme ?
>> L�o.
>>
> Oui bien s�r.
>
> C'est une reduction au strict minimum du programme  beep.c disponible sur le 
> net.
>
>
> voici le code source du miniscule programme alarm.c en pi�ce jointe:
>
> Je n'ai pas encore enlev� tout ce qui n'est pas necessaire pour son
> fonctionnement car je voulais d'abord voir son fonctionnement.

[...]

>       ioctl (console_fd, KIOCSOUND, (int) (CLOCK_TICK_RATE/freq));

[...]

D'apr�s ce document : http://www.linux.com/guides/lpg/lpg.shtml, /dev/console
est l'unique moyen standard de contr�ler le haut-parleur, exactement comme c'est
fait dans ton programme.

Il existe un autre moyen : http://www.geocities.com/stssppnn/pcsp.html, c'est un
module du noyau qui permet d'adresser le haut-parleur comme une carte son.

La solution la plus simple et la plus propre pour toi est sans doute d'ajouter
la permission "set uid root" � ton programme :

$ chown root:root alarm
$ chmod +s alarm

Tu peut aussi faire un script � base de echo -e "\a", c'est moins joli mais tout
aussi efficace.


L�o.

Répondre à