Re: Чудеса с DVD-приводом
On Thu, Jan 08, 2009 at 11:05:05AM +0500, Sentinel wrote:
> Коллеги, подскажите куда копнуть в такой ситуации. Стандартный etch на
> десктопе, Gnome, год - полёт нормальный, но возникла нужда заменить DVD-привод.
> Купил привод той же фирмы, той же серии, только модель посвежее. Старый
> вытащил, новый на его место поставил. После чего пропало автоматическое
> монтирование диска. Приходится открывать консоль, идти в /media и делать mount
> cdrom.
>
> Если быть точным, симптомы следующие. Вставляю любой диск в привод, на рабочем
> столе появляется иконка ЧИСТОГО диска и Гном сообщает - мол, вставлен чистый
> диск, что вы хотите сделать.. В меню, выпадающем по правому клику на иконке,
> есть пункты "Открыть" и "Просмотреть папку", но их выбор ничего не даёт - для
> Гнома диск виден как "чистый CD-RW".
>
> Порылся в графических настройках Гнома - не помогло. Собственно мне не лень
> открыть консольку и дать команду вручную, но за машиной работает ещё один
> человек, которому крайне желательно, чтобы диск открывался автоматически, без
> "магических" пассов.. Потому прошу совета: где искать причину? Заранее спасибо.
Проблема или в кривом приводе или в HAL. Среди ioctl для CD привода есть
CDROM_DISC_STATUS, который возвращает тип диска. Поскольку я немного
этой тематикой занимался, вот простая тестовая программа. Что она в
твоем случае выдает?
============================ 8< ============================
/* cdtest.c: determines a type of disc in a CD-drive.
* Written by Stanislav Maslovski.
* This software is in public domain. Use freely.
*/
#include <stdio.h>
#include <fcntl.h>
#include <errno.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <linux/cdrom.h>
#define die(msg) (perror(msg), exit(1))
int main(int argc, char **argv)
{
int fd, ret;
if (argc < 2)
{
printf("Usage: %s <path_to_device_file>\n", argv[0]);
exit(1);
}
fd = open(argv[1], O_NONBLOCK);
if (fd == -1) die("Error opening device");
ret = ioctl(fd, CDROM_DRIVE_STATUS, 0);
if (ret == -1) die("Error in ioctl");
switch (ret)
{
case CDS_NO_INFO:
die("Drive does not support status queries");
case CDS_NO_DISC:
die("No disc in the drive");
case CDS_TRAY_OPEN:
die("Tray open");
case CDS_DRIVE_NOT_READY:
die("Drive not ready");
case CDS_DISC_OK:
ret = ioctl(fd, CDROM_DISC_STATUS, 0);
if (ret == -1) die("Error in ioctl");
switch (ret)
{
case CDS_NO_INFO:
die("Empty CD or unknown");
case CDS_AUDIO:
die("Audio CD");
case CDS_MIXED:
case CDS_XA_2_2:
case CDS_XA_2_1:
die("Mixed audio/data CD");
case CDS_DATA_1:
die("Data CD");
default:
printf("Unknown disk type %d\n", ret);
exit(1);
}
default:
printf("Unknown drive status %d\n", ret);
exit(1);
}
exit(0);
}
============================ 8< ============================
--
Stanislav
Reply to: