У меня есть карта с интерфейсом 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
(дисковод для компакт-дисков).
Имена устройств 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-накопитель, подключите его снова и надеюсь, что это работает.
Это как-то связано с написанием некоторых правил udev для вашего устройства. Я не эксперт по этой теме, но вы можете изучить следующие ссылки:
Это все, что я знаю. Надеюсь, это поможет.