Как проигнорировать присвоение/dev/cdrom к определенному устройству?

У меня есть карта с интерфейсом USB HDSPA из Vodafone для мобильной широкополосной связи, модель K3520 HUAWEI (в некоторых местах также определял E169, я думаю), который работает просто великолепно в Ubuntu 10.04, "Ясной" (amd64). Это устройство автоматически смонтировано как устройство CD-ROM Ubuntu - предположительно, демоном HAL, тащившим - а именно, "раздел", содержащий определенное для устройства программное обеспечение.

Содержание автосмонтированного раздела (после вставки палки в USB-порту):

ubuntu@lucid:~$ ls -lh /media/VMC\ LITE*/
total 37M
-r-------- 1 ubuntu ubuntu   70 2008-03-13 19:39 Autorun.inf
-r-------- 1 ubuntu ubuntu  36M 2008-04-14 19:28 helper.exe
-r-------- 1 ubuntu ubuntu 316K 2008-03-13 17:33 setup.exe
ubuntu@lucid:~$ 

Символьная ссылка /dev/cdrom присвоен от устройства CD-ROM в /dev/sr0 к устройству /dev/sr1 после обнаружения карты с интерфейсом USB,

ubuntu@lucid:~$ ls -lh /dev/cdrom
lrwxrwxrwx 1 root root 3 2011-04-27 22:48 /dev/cdrom -> sr1
ubuntu@lucid:~$ ls -lh /dev/sr*
brw-rw----+ 1 root cdrom 11, 0 2011-04-27 22:34 /dev/sr0
brw-rw----+ 1 root cdrom 11, 1 2011-04-27 22:48 /dev/sr1
ubuntu@lucid:~$ 

который, хотя не серьезное препятствие это - тем не менее, раздражение. Например, в консоли это вызывает определение eject -d /dev/sr0 открыть лоток CD-ROM, вместо простого eject; предположительно, другие программы, желающие использовать подлинный дисковод для компакт-дисков, потребуют определения явно устройство вместо того, чтобы "принять" символьную ссылку /dev/cdrom указать на "корректное" устройство.

Я попытался следовать инструкциям от Дуги поток Linux о тащившем путем создания моей собственной конфигурации как /etc/hal/fdi/policy/cdrom.fdi со следующим содержанием:

<?xml version="1.0" encoding="UTF-8"?>
<deviceinfo version="0.2">
  <device>
    <match key="block.storage_device" string="/org/freedesktop/Hal/devices/storage_model_CDDVDW_SH_S223C">
      <merge key="volume.policy.should_mount" type="bool">true</merge>
      <merge key="volume.policy.desired_mount_point" type="string">cdrom</merge>
    </match>
  </device>
  <device>
    <match key="storage.vendor" string="HUAWEI">
      <match key="storage.model" string="Mass Storage">
        <match key="storage.bus" string="usb">
          <match key="storage.drive_type" string="cdrom">
            <merge key="volume.policy.should_mount" type="bool">false</merge>
          </match>
        </match>
      </match>
    </match>
  </device>
</deviceinfo>

в неудачной попытке к "coherce", тащившему во всегда присвоение /dev/sr0 кому: /dev/cdrom вместо того, чтобы автомонтировать карту с интерфейсом USB на вставке.

Я понимаю, что мог использовать gconf-editor переключить ключ /apps/nautilus/preferences/media_automount, но это влияло бы на все носители - который является не совсем, что я ищу, хотя дали низкое влияние этого "раздражения", это мог бы быть приемлемый компромисс.

Однако я смотрю на некоторое понимание, какая тащившая конфигурация могла бы привести к желаемым результатам - игнорирующий присвоение /dev/sr1 (карта с интерфейсом USB) к /dev/cdrom и таким образом поддерживая символьную ссылку /dev/cdrom кому: /dev/sr0 (дисковод для компакт-дисков).

1
задан 28 April 2011 в 02:32

2 ответа

Имена устройств cdrom настраиваются в /etc/udev/rules.d/70-persistent-cd.rules. В моей версии файла есть четыре строки, которые создают символические ссылки cdrom, cdrw, dvd и dvdrw, все они указывают на один и тот же диск:

SUBSYSTEM=="block", ENV{ID_CDROM}=="?*", ENV{ID_PATH}=="pci-0000:00:1f.2-scsi-2:0:0:0", SYMLINK+="cdrom", ENV{GENERATED}="1"
SUBSYSTEM=="block", ENV{ID_CDROM}=="?*", ENV{ID_PATH}=="pci-0000:00:1f.2-scsi-2:0:0:0", SYMLINK+="cdrw", ENV{GENERATED}="1"
SUBSYSTEM=="block", ENV{ID_CDROM}=="?*", ENV{ID_PATH}=="pci-0000:00:1f.2-scsi-2:0:0:0", SYMLINK+="dvd", ENV{GENERATED}="1"
SUBSYSTEM=="block", ENV{ID_CDROM}=="?*", ENV{ID_PATH}=="pci-0000:00:1f.2-scsi-2:0:0:0", SYMLINK+="dvdrw", ENV{GENERATED}="1"

Что делают эти строки? Они проверяют некоторые вещи с помощью оператора ==, а затем добавляют (+=) символическую ссылку или устанавливают (=) переменную окружения GENERATED.

Вы хотите вставить новый тест туда, чтобы ваша палочка HSDPA игнорировалась.

Так что вам нужно найти уникальный атрибут вашего устройства. Вы можете запустить lsusb в терминале и посмотреть, не нашли ли вы там свою карту HSDPA. И вы также можете спросить сам Udev, например, с помощью

udevadm info --export-db | less

(В «меньше» вы можете искать с помощью клавиши / и выйти с помощью q.) Попробуйте найти уникальный атрибут, такой как ID_SERIAL, ID_VENDOR_ID или ID_MODEL_ID. Шестнадцатеричные числа в ID_VENDOR_ID и ID_MODEL_ID - это те же числа, что и в выходных данных lsusb.

Если вы нашли что-то уникальное, вставьте новый тест в строки udev, сравнивая неравенство с оператором !=:

SUBSYSTEM=="block", ENV{ID_CDROM}=="?*", ENV{ID_SERIAL}!="_USB_DISK_Pro_075A06420103-0:1", ENV{ID_PATH}=="pci-0000:00:1f.2-scsi-2:0:0:0", SYMLINK+="cdrom", ENV{GENERATED}="1"

Сохраните файл, извлеките USB-накопитель, подключите его снова и надеюсь, что это работает.

0
ответ дан 28 April 2011 в 02:32

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

Это все, что я знаю. Надеюсь, это поможет.

0
ответ дан 28 April 2011 в 02:32

Другие вопросы по тегам:

Похожие вопросы: