1

Я искал высоко и низко, и не могу понять это. У меня есть старая камера Olympus (2001 года или около того). Когда я подключаю USB-соединение, я получаю следующий вывод журнала:

$ dmesg | grep sd
[20047.625076] sd 21:0:0:0: Attached scsi generic sg7 type 0
[20047.627922] sd 21:0:0:0: [sdg] Attached SCSI removable disk

Во-вторых, диск не установлен в FS, но когда я запускаю gphoto2, я получаю следующую ошибку:

$ gphoto2 --list-config

*** Error ***              
An error occurred in the io-library ('Could not lock the device'): Camera is already in use.
*** Error (-60: 'Could not lock the device') ***       

Какая команда будет размонтировать диск. Например, в Nautilus я могу щелкнуть правой кнопкой мыши и выбрать "Безопасное извлечение устройства". После этого устройства /dev /sg7 и /dev /sdg будут удалены.

Выходные данные gphoto2 тогда:

# gphoto2 --list-config
/Camera Configuration/Picture Settings/resolution                              
/Camera Configuration/Picture Settings/shutter
/Camera Configuration/Picture Settings/aperture
/Camera Configuration/Picture Settings/color
/Camera Configuration/Picture Settings/flash
/Camera Configuration/Picture Settings/whitebalance
/Camera Configuration/Picture Settings/focus-mode
/Camera Configuration/Picture Settings/focus-pos
/Camera Configuration/Picture Settings/exp
/Camera Configuration/Picture Settings/exp-meter
/Camera Configuration/Picture Settings/zoom
/Camera Configuration/Picture Settings/dzoom
/Camera Configuration/Picture Settings/iso
/Camera Configuration/Camera Settings/date-time
/Camera Configuration/Camera Settings/lcd-mode
/Camera Configuration/Camera Settings/lcd-brightness
/Camera Configuration/Camera Settings/lcd-auto-shutoff
/Camera Configuration/Camera Settings/camera-power-save
/Camera Configuration/Camera Settings/host-power-save
/Camera Configuration/Camera Settings/timefmt

Некоторые вещи, которые я уже пробовал, это sdparm и sg3_utils , однако я не знаком с ними, так что возможно я просто не нашел правильную команду.

Обновление 1:

# mount | grep sdg
# mount | grep sg7
# umount /dev/sg7
umount: /dev/sg7: not mounted
# umount /dev/sdg
umount: /dev/sdg: not mounted
# gphoto2 --list-config

*** Error ***              
An error occurred in the io-library ('Could not lock the device'): Camera is already in use.
*** Error (-60: 'Could not lock the device') ***       

4 ответа4

1

Быстрый и грязный метод

Для отключения перебора всех активных устройств хранения данных:

rmmod usb_storage

Запретить загрузку любого устройства usb_storage

Я нашел следующую ссылку, в основном задавая тот же вопрос, что и этот. Если вы хотите запретить автоматическое монтирование ядра с помощью usb_storage:

echo "blacklist usb_storage" | sudo tee /etc/modprobe.d/blacklist-usb-storage.conf

Запретить загрузку отдельного устройства usb_storage

Вместо того, чтобы отключать все устройства, вы можете настроить таргетинг на определенное устройство, чтобы игнорировать его с помощью правил udev. Существует конкретный пример здесь.

Я потратил много времени, пытаясь заставить это работать в Ubuntu 10.04, но похоже, что эта функция была отключена в более новых версиях udev.

"Безопасное извлечение диска" Unbind/Unclaim Source Code

Последний пост в этой теме работал как шарм.

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <linux/ioctl.h>
#include <linux/usbdevice_fs.h>

int main(int argc, char**argv)
{
   struct usbdevfs_ioctl command;
   int ret;
   int fd;
   int i;
   if (argc>1) {
      fd = open(argv[1],O_RDWR);
      if (fd<1){
         perror("unable to open file");
         return 1;
      }
      for (i=0;i<255;i++){ // hack: should fetch how many interface there is.
         command.ifno = i;
         command.ioctl_code = USBDEVFS_DISCONNECT;
         command.data = NULL;
         ret = ioctl(fd, USBDEVFS_IOCTL, &command);
         if(ret!=-1)
            printf("un claimed interface %d %d\n",i,ret);
      }
   }else {
      printf ("usage: %s /dev/bus/usb/BUS/DEVICE\n",argv[0]);
      printf("Release all interfaces of this usb device for usage in virtualisation\n");
   }
}

Простой скрипт для устройства привязки / отмены привязки

Предыдущий пример - интересный случай, но я также нашел гораздо упрощенный метод. Вы можете использовать интерфейс драйвера usb-хранилища для привязки и отмены привязки устройств.

Следующая команда сработала, как и исходный код сверху:

echo -n "1-2.4:1.0" | sudo tee unbind    
0

Я делаю это в сценарии:

# If camera is mounted we need to unmount it
export CAMERA_MOUNT_POINTS=`gvfs-mount -l | grep gphoto2 | sed 's/.*\(gphoto2.*\)$/\1/' | uniq 2> $LOG_FILE`
for CAMERA_MOUNT_POINT in $CAMERA_MOUNT_POINTS
do
    echo Unmounting mounted camera from $CAMERA_MOUNT_POINT.
    gvfs-mount -u $CAMERA_MOUNT_POINT &> $LOG_FILE
done

Я не уверен, что это то, что вам нужно, но это может быть, так как у меня были подобные проблемы.

РЕДАКТИРОВАТЬ: Чтобы объяснить немного: gvfs-mount -l перечисляет смонтированные вещи Остальная часть этой строки очищает вывод, чтобы создать только список смонтированных камер (и передает ошибки в файл журнала). Затем цикл отключает все камеры.

0

Сначала запустите mount как root. Это должно перечислить все смонтированные файловые системы. Если /dev/sdg и /dev/sg7 нет в списке, камера больше не монтируется.

Если камера все еще установлена, вы можете размонтировать ее с помощью команды umount (обратите внимание на отсутствующее 'n'). Примером может быть umount /dev/sg7 или umount /dev/sdg .

Если камера имеет смонтированные файловые системы, то вы можете просто просмотреть фотографии в Nautilus. Вывод mount скажет вам, куда монтируются устройства в файловой системе - просто перейдите в папку и начните искать фотографии.

0

Вы используете Ubuntu? Говорят об ошибке в 8.10, и хотя я не уверен, что это исправлено в последней версии, есть обходной путь, который может позволить вам сделать ... все, что вы пытаетесь сделать (так как вы не не просто загрузка картинок). :П

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .