Существуют, намного больше изменяют размер опций в imagemagick. -scale
похож на то, в чем Вы нуждаетесь.
Кроме того, не используйте JPEG для идеальных для пикселя "миниатюр"; используйте PNG вместо этого (или, если невозможный, GIF). JPEG разработан для фотографий и использует сжатие с потерями, приводящее к искажению, явно примечательному после масштабирования Вашего обеспеченного образца JPEG.
Эта статья о масштабировании изображения могла бы быть интересной.
Как предложено, можно добавить некоторые правила udev. Я отредактировал /etc/udev/rules.d/10-local.rules
содержать:
ACTION=="add", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", SYMLINK+="my_uart"
Можно проверить на переменные устройства путем выполнения
udevadm info -a -p $(udevadm info -q path -n /dev/ttyUSB0)
Существует больше подробно руководство, которое можно прочитать на http://www.reactivated.net/writing_udev_rules.html
Синтаксис правил, приведенный выше, может работать на некоторых дистрибутивах, но не работает на моих (Raspbian). Так как я никогда не находил ни одного документа, который бы объяснял все входы и выходы, я написал свой собственный, который можно найти здесь . Вот до чего он сводится.
1. Узнай, что на TtyUSB:
dmesg | grep ttyUSB
2. перечислите все атрибуты устройства:
udevadm info --name=/dev/ttyUSBx --attribute-walk
(с номером(ами) вашего устройства вместо x, конечно). Выберите набор уникальных идентификаторов, например idVendor + idProduct. Вам также может понадобиться SerialNumber, если у вас более одного устройства с одним и тем же idVendor и idProduct. SerialNumbers должен быть уникальным для каждого устройства.
3. Создайте файл /etc/udev/rules.d/99-usb-serial.rules
с чем-то вроде этой строки:
SUBSYSTEM=="tty", ATTRS{idVendor}=="1234", ATTRS{idProduct}=="5678", SYMLINK+="your_device_name"
(предполагая, что вам не нужен серийный номер там, и конечно же с номерами для idVendor и idProduct, которые вы нашли в шаге 2.
4. Загрузите новое правило:
sudo udevadm trigger
5. Проверьте, что произошло:
ls -l /dev/your_device_name
покажет, к какому номеру ttyUSB пришла сим-ссылка. Если это /dev/ttyUSB1
, то проверьте, кто владеет этим номером и к какой группе он принадлежит:
ls -l /dev/ttyUSB1
Тогда просто ради забавы:
udevadm test -a -p $(udevadm info -q path -n /dev/your_device_name)
Мне также удалось найти уникальное устройство в / dev / serial / by-id
. Я еще не пробовал перезагрузку, но файлы в этом каталоге были просто ссылками на соответствующий файл устройства ( ttyACM [0-9]
). «
Я использую Arch Linux на Raspberry Pi , но я наткнулся на них, просто выполнив find
для имен файлов, содержащих "Arduino". Мои программы на Python отлично работают, используя эти файлы в качестве устройств для чтения / записи данных в / из моих Arduinos (пока что два на одном Pi).
У меня Rasperry Pi с четырьмя камерами. Я беру пиксель с помощью fswebcam
, который идентифицирует камеры как / dev / video0
.. video3
. Иногда камера video0
, vide02
, video4
и video6
, но пока об этом можно забыть.
Мне нужен постоянный идентификатор для идентификации номера камеры, например, video0
всегда одна и та же камера, потому что я подписываю изображения. К сожалению, это происходит ненадежно - при загрузке камеры нумеруются как video0
.. video3
, но не всегда одинаково.
Все камеры имеют одинаковый идентификатор и серийный номер.
Решение этой проблемы связано с правилами udev, но там также есть много рыболовных крючков.
Если вы введете команду
udevadm info –attribute-walk –path=/dev/video0
, вы получите готовый результат, но основные биты будут
KERNEL=”video0”, SUBSYSTEM=”video4linux” and KERNELS=”1:1.2.4:1.0”.
. Бит KERNELS - это порт концентратора USB. С четырьмя камерами их четыре - они не меняются при перезагрузке, но видео {x}
, связанное с портом , может измениться.
Итак, нам нужно правило udev, чтобы привязать номер видео к порту USB-концентратора - что-то вроде:
KERNEL==”video0”,SUBSYSTEM=”video4linux”,KERNELS==”1:1.2.4:1.0”,SYMLINK+=”camera0”
Выглядит просто - доступ к камере с помощью
fswebcam –d $realpath /dev/camera0
За исключением того, что это не работает - если вы поместите это в udev правило, и система выделила video0 (при загрузке) на другой порт, правило udev игнорируется.Символьная ссылка на / dev / camera0
в основном говорит об отсутствии такого устройства
. Квадратная.
Мы хотим привязать символическую ссылку к адресу USB-концентратора, а не к номеру видео {x}
. Потребовалась программа на Python.
Первым шагом было выполнение
fswebcam –d /dev/video${x} tst.jpg
для x
между 1 и 8. Наличие tst.jpg
после каждого вызова определяет, есть ли камера на этом номере видео. Из этого составьте список активных номеров видео. По моему опыту, это либо 0,1,2,3
, либо 0,2,4,6
для камер, которые я использовал.
Другие, конечно, могут составить этот список, используя другой процесс.
Затем для каждого номера видео в списке запустите
udevadm info –attribute-walk –path=/dev/videox > dd
и извлеките KERNELS = строку
из dd
. В результате вы получите список адресов USB-портов для камер. Отсортируйте этот список так, чтобы на следующем шаге вы всегда обрабатывали его в том же порядке. Назовите это «список адресов».
Запустите команду udevadm…> dd
еще раз и создайте список, который выглядит как
KERNEL==”video0”, SUBSYSTEM=”video4linux”,KERNELS==”1:1.2.4:1.0 ”,SYMLINK+=”camerax”. Call this the “video list”.
Теперь просмотрите список адресов - для каждой записи найдите соответствующую запись в списке видео. Создайте новый список, который выглядит как набор строк, например
KERNEL==”video0”, SUBSYSTEM=”video4linux”,KERNELS==”1:1.2.4:1.0 ”,SYMLINK+=”camera2”
. X (номер символической ссылки) заменяется порядковым номером в списке адресов.
Теперь у вас есть работающее правило udev. Символьная ссылка, привязанная к адресу USB-концентратора, независимо от того, какой номер видео назначен этому порту при загрузке.
Запишите окончательный список в файл /etc/udev/rules.d/cam.rules
. Запустите триггер udevadm
, чтобы активировать его, и работа будет выполнена. / dev / camera2
будет той же камерой (USB-порт) независимо от ее номера видео.
Просто хочу сказать, что описанное выше сработало для меня, а также автоматически монтировало устройство после того, как я поместил запись в /etc/fstab (, а также вызывает umount после извлечения флешки)
т.е.
/etc/fstab
# See /etc/udev/rules.d/5-usb-disk.rules
/dev/backup /vol/backup ext4 defaults,errors=remount-ro 0 1
cat /etc/udev/rules.d/5 -usb -stick.rules
#
# the next line creates a symlink to this disk drive called /dev/backup
# i.e.
# root:# ls -la /dev/backup
# lrwxrwxrwx 1 root root 3 Jul 22 19:33 /dev/backup -> sg0
# Backup usb stick - create /dev/backup
# ATTRS{model}=="Cruzer Blade "
ACTION=="add", ATTRS{model}=="Cruzer Blade ", SYMLINK+="backup"
# Clean up after removal
ACTION=="remove", ATTRS{model}=="Cruzer Blade ", RUN+="/bin/umount /vol/backup"
Таким образом, после вставки USB-накопителя я получаю:
root:# mount | grep sd
/dev/sda1 on /vol/backup type ext4 (rw,relatime,errors=remount-ro,data=ordered)
Здесь есть много хороших ответов, но все они подходят для определенного VID :PID. После долгих экспериментов с правилами udev для последовательных адаптеров разных марок я обнаружил, что это простое правило udev работает лучше всего для меня:
ACTION=="add", SUBSYSTEM=="tty", SUBSYSTEMS=="usb", DRIVERS=="usb", SYMLINK+="tty.usb-$attr{devpath}"
Он дает постоянные символические ссылки на основе пути к устройству на шине USB, например:
$ lsusb -t # output filtered for tty devices only
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/12p, 480M
|__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 1: Dev 5, If 0, Class=, Driver=, 480M
|__ Port 2: Dev 6, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 3: Dev 20, If 1, Class=CDC Data, Driver=cdc_acm, 12M
|__ Port 3: Dev 20, If 0, Class=Communications, Driver=cdc_acm, 12M
|__ Port 2: Dev 7, If 0, Class=Hub, Driver=hub/5p, 480M
|__ Port 3: Dev 17, If 0, Class=Vendor Specific Class, Driver=cp210x, 12M
|__ Port 4: Dev 16, If 0, Class=Vendor Specific Class, Driver=cp210x, 12M
|__ Port 5: Dev 10, If 0, Class=Hub, Driver=hub/5p, 480M
|__ Port 5: Dev 12, If 0, Class=Vendor Specific Class, Driver=cp210x, 12M
$ ls -alF /dev/tty.usb*
lrwxrwxrwx 1 root root 7 Aug 2 10:33 /dev/tty.usb-1.2.2.3 -> ttyUSB2
lrwxrwxrwx 1 root root 7 Aug 2 10:33 /dev/tty.usb-1.2.2.4 -> ttyUSB1
lrwxrwxrwx 1 root root 7 Aug 2 09:04 /dev/tty.usb-1.2.2.5.5 -> ttyUSB0
lrwxrwxrwx 1 root root 7 Aug 2 10:40 /dev/tty.usb-1.2.3 -> ttyACM0
udevam
? И важно отметить этоmy_uart
создает символьную ссылку под/dev/my_uart
. Я сначала записал/dev/arduino
первый раз и это перестали работать покаarduino
достаточно. – k0pernikus 07.03.2013, 21:11udevadm
должен выйти отдельно, когда это сделано. – Kotte 08.03.2013, 09:31