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


-- 
To UNSUBSCRIBE, email to [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]

Ответить