[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: beep, question de permissions?



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

Bayrouni <bayrouni@brutele.be> writes:

> Leopold BAILLY wrote:
>> Bayrouni <bayrouni@brutele.be> writes:
>>
>>>Leopold BAILLY wrote:
>>>
>>>>Bayrouni <bayrouni@brutele.be> writes:
>>>>
>>>>
>>>>>Leopold BAILLY wrote:
>>>>>
>>>>>
>>>>>>Bayrouni <bayrouni@brutele.be> 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.



Reply to: