Как отключить DVD (внешний USB) через кнопку извлечения на устройстве?

944
SimonA

У меня проблема с внешним USB-приводом DVD. Все работает нормально, монтирование работает, размонтирование или извлечение через оболочку работает. Но если я нажму кнопку извлечения на устройстве, он просто извлечет DVD, но не размонтирует его. Мое лучшее решение для этой проблемы - выполнить скрипт с сочетанием клавиш на клавиатуре. Но это не очень приятно. Есть ли какие-либо варианты решения этой проблемы с помощью обычной кнопки извлечения на DVD-приводе?

Спасибо за помощь.

РЕДАКТИРОВАТЬ: Выведите 'udevadm info --version'

175 

Вывод 'cat /lib/udev/rules.d/60-cdrom_id.rules | grep DISK_EJECT_REQUEST '

ENV=="?*", RUN+="cdrom_id --eject-media $tempnode", GOTO="cdrom_end" 

Выведите 'uname -a'

Linux raspberrypi 3.18.11-v7+ #781 SMP PREEMPT Tue Apr 21 18:07:59 BST 2015 armv7l GNU/Linux 

Выведите «udevadm monitor» путем вставки (все 4 записи) и удаления (без записи)

monitor will print the received events for: UDEV - the event which udev sends out after rule processing KERNEL - the kernel uevent  KERNEL[682164.008310] change /devices/platform/bcm2708_usb/usb1/1-1/1-1.5/1-1.5:1.0/host0/target0:0:0/0:0:0:0/block/sr0 (block) UDEV [682164.057144] change /devices/platform/bcm2708_usb/usb1/1-1/1-1.5/1-1.5:1.0/host0/target0:0:0/0:0:0:0/block/sr0 (block) KERNEL[682174.005812] change /devices/platform/bcm2708_usb/usb1/1-1/1-1.5/1-1.5:1.0/host0/target0:0:0/0:0:0:0/block/sr0 (block) UDEV [682174.655906] change /devices/platform/bcm2708_usb/usb1/1-1/1-1.5/1-1.5:1.0/host0/target0:0:0/0:0:0:0/block/sr0 (block) 
1

1 ответ на вопрос

0
Hygrinet

There's a long standing "bug" in udisks which causes this to happen. It's actually "normal" behaviour for udisks - optical drives are a bit of an edge case where, though the media is removed, the drive is still present. This was been reported in the ubuntu bugtracker some time ago and a workaround using udev was suggested:

https://bugs.launchpad.net/ubuntu/+source/systemd/+bug/1168742

You already have a script which will unmount the drive - to get this to run when the disc is ejected add the following to a udev rule, e.g. /etc/udev/rules.d/70-unmount-cd.rules

KERNEL=="sr0", ACTION=="change", RUN+="/path/to/your/unmount/script.sh" 

There's a load of good info in the above link, so check that out too.

HTH!

Спасибо, сделал точную информацию, которую я искал. В настоящее время я не могу попробовать ваш подход, но сообщу о результате позже. SimonA 8 лет назад 0
Удачи SimonA! Позвольте мне знать, как это получается. Hygrinet 8 лет назад 0
Итак ... после некоторых проблем я могу выполнить скрипт через /etc/udev/rules.d/70-unmount-cd.rules. Моя строка: "KERNEL ==" sr0 ", SUBSYSTEMS ==" scsi ", ATTRS ==" BD-MLT UJ240AS ", ACTION ==" change ", RUN + =" .. путь к сценарию ... $ ". Сначала я получил проблемы, выполнив скрипт" Ошибка формата Exec "в системном журнале. Для решения этой проблемы напишите" #! / Bin / sh "в первой строке скрипта. SimonA 8 лет назад 0
Теперь скрипт выполняется с помощью различных действий (например, монтирование), но он не запускает скрипт, если я нажимаю кнопку ... возможно, нужно изменить «ДЕЙСТВИЕ»? SimonA 8 лет назад 0
я также пытаюсь вызвать / увидеть некоторые события с помощью "udevadm monitor --environment --udev", но при нажатии кнопки ничего не происходит ... :(. SimonA 8 лет назад 0
Хм, странно, что вы не видите никаких событий udev, использующих udevadm monitor, это, безусловно, объясняет, почему правило не вызывается. Если вы просто запускаете «udevadm monitor», а затем вставляете / извлекаете компакт-диск, вы видите событие ядра, за которым вскоре следует событие udev? Hygrinet 8 лет назад 0
Кроме того, в каком дистрибутиве вы работаете? Raspbian? Не могли бы вы опубликовать результаты `cat /lib/udev/rules.d/60-cdrom_id.rules | grep DISK_EJECT_REQUEST`, `udevadm info --version` и` uname -a`, пожалуйста? Кроме того, когда вы запускаете эксперименты с `udevadm monitor`, убедитесь, что в дисководе есть какие-то носители! Hygrinet 8 лет назад 0
Это действительно странно. «udevadm monitor» вызывает «change», если я вставляю DVD. Но все равно ничего, если я удаляю его через аппаратную кнопку извлечения. SimonA 8 лет назад 0
Я редактирую свой первый пост для разных выводов. SimonA 8 лет назад 0
Сюжет сгущается, так как 60-cdrom_id.rules, кажется, в порядке, и вы изменили события udev! Чтобы убедиться, что ваш скрипт действительно запущен, вы можете изменить его, чтобы он делал что-то очевидное, например `touch / var / log / thisworks`? Кроме того, лучше всего опубликуйте содержание вашего скрипта - у меня заканчиваются идеи, поэтому возвращаюсь к старой пословице: «Возможно, где-то есть ошибка конфигурации! Hygrinet 8 лет назад 0
Кроме того, не могли бы вы добавить содержимое `udevadm info --name = / dev / sr0 --attribute-walk` к вашему сообщению? Я протестировал это решение, используя мой дисковод SATA DVD, а не USB, как вы используете, так что было бы хорошо увидеть цепочку вашего устройства. Hygrinet 8 лет назад 0