Я искал высоко и низко и не могу понять этого. У меня есть более старый Olympus Camera (приблизительно 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') ***
Какая команда размонтирует диск. Например, в Наутилусе, я могу щелкнуть правой кнопкой и выбрать, "Безопасно Удаляют Устройство". После выполнения этого удалены/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') ***
Поскольку грубая сила отключает всех активных устройств массового хранения:
rmmod usb_storage
Я нашел следующую ссылку, в основном задав тот же вопрос как это. Если Вы хотите препятствовать тому, чтобы ядро автомонтировало использование usb_storage
:
echo "blacklist usb_storage" | sudo tee /etc/modprobe.d/blacklist-usb-storage.conf
Вместо того, чтобы отключить все устройства, можно быть нацелены на определенное устройство для игнорирования использования udev правила. Здесь существует определенный пример.
Я провел много времени, пытаясь заставить это работать в Ubuntu 10.04, но похоже, что эта функциональность была отключена в более новых версиях udev.
Последнее сообщение на этом потоке работало как очарование.
#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
Во-первых, выполненный mount
как корень. Это должно перечислить все смонтированные файловые системы. Если /dev/sdg
и /dev/sg7
не находятся в списке, затем камера больше не монтируется.
Если камера все еще смонтирована, можно размонтировать ее с командой umount
(отметьте пропавших без вести 'n'). Пример был бы umount /dev/sg7
или umount /dev/sdg
.
Если камера смонтировала файловые системы, то можно, вероятно, просто просмотреть к фотографиям в Наутилусе. Вывод mount
скажет Вам, где устройства смонтированы к в файловой системе - просто просматривают к папке и начинают наводить справки о фотографиях.
Вы используете Ubuntu? Существует разговор об ошибке в 8,10, и в то время как я не уверен, фиксируется ли это в последней версии, существует обходное решение, которое могло бы позволить Вам сделать... независимо от того, что это, Вы пытаетесь сделать (так как Вы только загружаете изображения).:P
Я делаю это в сценарии:
# 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
списки смонтировали, что Остальная часть материала той строки чистит вывод для создания просто списка смонтированных камер (и передает ошибки по каналу к файлу журнала). Затем цикл размонтировал все камеры.