Здравствуйте, уважаемые читатели!

Сегодня я расскажу об одном из вариантов подключения PTP фотоаппарата к компьютеру на базе операционной системы Astra Linux SE.

Разработанный мной скрипт тестировался на версиях операционной системы 1.6.12 и 1.7.5, хоть и писал я его применительно к версии 1.7.5.

Впервые с проблемой монтирования PTP фотоаппарата я столкнулся пару лет назад на Astra Linux SE 1.6 — подключил его к компьютеру, и ничего не произошло.

Иногда Linux способен нехорошо удивлять — ты просто хочешь скинуть фотографии на компьютер, а вместо этого на полдня погружаешься в вопрос с головой.

Пару лет назад я решил эту проблему, установив оригинальный gtkam, но работал он очень не стабильно. Кроме того, он не был подписан ключами ЗПС (хоть это на тот момент и не требовалось).

В этот раз, планируя переход на Astra Linux SE 1.7.5, я заблаговременно начал анализировать варианты решения типовых проблем и, когда добрался до камеры, удивился, что gtkam отсутствует в расширенном репозитории.

Немного поискав в яндексе, наткнулся на интересующую меня ссылку, но для ответа на вопрос мне предложили купить техническую поддержку.

Как Вы могли прочитать ранее, я работаю в большой бюджетной организации, где деньги легко тратятся на плакаты с листовками, очень тяжело на оргтехнику и никак на вещи, которые невозможно потрогать руками. Нет, ну правда, деньги тратятся реальные, а результат потрогать руками нельзя… Чушь какая-то.

Цель была следующая — на рабочем столе пользователя находится ярлык «Фотоаппарат» при нажатии на который открывается тот самый фотоаппарат.

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

Кроме того, это решение должно работать при активированных запретах консоли, интерпретаторов и исполняемого бита.

Создавать отдельный ярлык «Размонтирования» я не стал, так как понимаю, что нажимать на него будет один человек из десяти.

Приведу скрипт полностью, а потом прокомментирую его составляющие.

Содержание скрипта /opt/scripts/photo.sh:
#!/bin/bash
mount_point=/run/user/$UID/media/photo
pid_fly_term=$(ps aux | grep [p]hoto.sh | awk '{ print $2 }')
model_name="PowerShot"

close_term(){
  kill -3 $pid_fly_term
}

mount_check(){
  if mountpoint $mount_point &>/dev/null; then
    fusermount -u $mount_point
  else
    mkdir -p $mount_point
  fi
}

error_msg(){
  fly-dialog --title "Ошибка!" --error "$1"
  close_term
}

if [[ $(lsusb | grep "$model_name") ]]; then
  fly-dialog --title "Подключение" --msgbox "Подключение фотоаппарата. Ждите..." &
  mount_check
  if gphotofs $mount_point; then
    fly-fm $mount_point
    close_term
  else
    error_msg "Не могу подключить фотоаппарат. Обратитесь к системному администратору."
  fi
else
  error_msg "Фотоаппарат не подключён к компьютеру или выключен!\nПроверьте подключение, включите фотоаппарат и повторите попытку."
fi

А теперь разберём текст скрипта более подробно.

Первая переменная mount_point содержит путь к точке монтирования /run/user/$UID/media/photo. Расположена она в стандартном каталоге для монтирования носителей (каталог находится в tmpfs).

Вторая переменная pid_fly_term содержит PID терминала fly. Он нужен для того, чтобы автоматически закрыть чёрное окно терминала после появления директории с содержимым фотоаппарата (функция close_term выполняет закрытие с помощью команды kill).

Третья переменная model_name содержит часть имени фотоаппарата (можете посмотреть его с помощью команды lsusb). Она нужна для того, чтобы выполнить проверку — «подключена камера в настоящее время или нет». Такая камера у меня одна, поэтому переменная содержит одну модель. Если камер несколько и все они разных моделей, нужно будет доработать скрипт.

Функция mount_check проверяет, является ли каталог для монтирования точкой монтирования (иными словами, это проверка — монтирован ли фотоаппарат на момент запуска скрипта или нет). Перед каждым включением скрипта фотоаппарат размонтируется. Если каталог точки монтирования отсутствует, я создаю его заново (аргумент -p не даёт mkdir выдавать сообщение, если он уже существует).

Функция error_msg выдаёт сообщение об ошибке и закрывает окно терминала.

Далее условие if [[ $(lsusb | grep $model_name) ]] проверяет, подключена ли камера к компьютеру в настоящее время — если нет, выдаётся сообщение об ошибке с помощью функции error_msg.

Далее выдается сообщение о начале подключения. Все сообщения скрипта выдаются с помощью fly-dialog, так как работа в консоли пользователю запрещена соответствующим механизмом. Кроме того, с включенным антивирусом на слабых ПК загрузка занимает около 8 секунд и пользователь может решить, что странное чёрное окно лучше закрыть :-).

Далее вызывается функция mount_check, которую мы рассмотрели ранее.

После подготовки точки монтирования командой gphotofs происходит непосредственно само монтирование. Условие if проверяет результат работы данной команды и в случае ошибки выдаст сообщение об ошибке.

В случае успешного монтирования фотоаппарата fly-fm откроет каталог с фотографиями пользователя, а чёрное окно закроется автоматически.

Такая реализация меня устроила, и работает она лучше, чем gtkam на SE 1.6.

Кроме того, пользователю не нужно изучать новую программу — открытие производится стандартным файловым менеджером. Кому-то может показаться, что программа gtkam не такая и сложная, но для некоторых пользователей и она может стать настоящим испытанием.

А теперь подведём итог, где я изложу порядок действий по развёртыванию данного скрипта (все операции делайте под администратором):

1. Установите пакет gphotofs, если он не был установлен ранее:

sudo apt install gphotofs

2. Создайте каталог для скрипта:

sudo mkdir /opt/scripts

3. Подключите камеру, включите её, выполните команду ниже, чтобы узнать модель камеры для работы скрипта.

lsusb

Вывод команды будет примерно следующим:

Bus 005 Device 002: ID 0a12:0001 Canon PowerShot M331
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 007 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Для работы скрипта скопируем часть (или всё) название фотоаппарата (например, это может быть PowerShot M331 или просто PowerShot), только Canon указывать нельзя, так как данная фирма делает ещё и принтеры :-).

4. Создайте файл скрипта командой ниже, скопируйте и вставьте скрипт с сайта в данный файл:

sudo mcedit /opt/scripts/photo.sh

Замените в строке model_name=»PowerShot» слово PowerShot на свою модель камеры. Далее нажмите F2 и F10, чтобы сохранить и выйти из mcedit.

5. Сделайте скрипт исполняемым:

sudo chmod 755 /opt/scripts/photo.sh

6. Создайте ярлык на рабочем столе, как на рисунке ниже и наконец воспользуйтесь своим фотоаппаратом.

А лучше — покупайте нормальные фотоаппараты с поддержкой massstorage (которые определяются, как флешка) :-).

Всем хорошего дня!

Добавить комментарий

Ваш e-mail не будет опубликован.