udev - динамическое управление устройствами
udev предоставляет каталог динамических устройств, содержащий только файлы для устройств, имеющихся на самом деле. Он создаёт или удаляет файлы устройств в каталоге /dev, или переименовывает из сетевые интерфейсы.
Обычно udev запускается как udevd(8) и принимает события прямо от ядра, если устройство добавлено или удалено из системы.
Если udev принимает событие об устройстве, подходящее к правилам, имеющимся в его настройках, то атрибуты устройства, имеющиеся в sysfs, используются для его идентификации. Подходящие правила, могут предоставлять дополнительную информацию об устройстве или указывать имя файла устройства, несколько ссылок, предписание udev запустить дополнительные программы для обработки события устройства.
Все файлы настройки udev находятся в /etc/udev/ и /lib/udev/. Все пустые строки или строки, начинающиеся с '#', игнорируются.
udev ожидает главный файл конфигурации в /etc/udev/udev.conf. Он состоит из набора переменных, позволяющих пользователю заменять значения по умолчанию. Могут быть заданы следующие переменные:
udev_root
Указывает место расположения файлов устройств в файловой системе. Значение по умолчанию - /dev.udev_log
Приоритет журналирования. Правильными значениями являются числовые приоритеты syslog или их текстовые представления: err, info и debug.
Правила udev читаются из файлов, находящихся в каталоге /lib/udev/rules.d/, из особого каталога праивл /lib/udev/rules.d/ и из временного каталога правил /dev/.udev/rules.d/. Все файлы правил сортируются и обрабатываются в алфавитном порядке, вне зависимости от каталога, из которого они взяты. Каждая строка файла правил состоит из по меньшей мере одной пары ключ-значение. Существует два типа ключей - шаблоны и назначения. Если все ключи-шаблоны совпадут с их значениями, применится правило и ключи-назначения зададут назначаемые значения.
Подходящие правила могут задавать имя файла устройства, добавлять ссылки, указывающие на файл устройства, или запускать указанные команды в составе обработки события. Если подходящее правило не найдено, используется имя файла по умолчанию.
Правило может состоять из списка пар ключ-значение, разделённых запятыми. Каждый ключ отдельные операции, зависящие от используемого оператора. Правильными значениями являются:
==
Сравнить на равенство.!=
Сравнить на не-равенство.=
Назначить значение ключу. Ключи, которые представляются списком, сбрасываются, их значением становится единственное указанное значение.+=
Добавляет значение к ключу, который содержит список элементов.:=
Назначает ключу окончательное значение; отключает любые более поздние изменения, что может быть использовано для предотвращения изменений другими более поздними правилами.Следующие имена ключей могут использоваться для совпадения со свойствами устройства. Некоторые из ключей также совпадают со свойствами родительских устройств в sysfs, не только с устройством, которое произвело событие. Если в одном правиле указано несколько ключей, которые совпадают с родительским устройством, все эти ключи должны совпадать с ним или с родительским устройством.
ACTION
Совпадает с именем произошедшего события.DEVPATH
Совпадает с путём к файлу устройства для данного события.KERNEL
Совпадает с названием устройства в событии.NAME
Совпадает с именем узла или сетевого интерфейса. Ключ NAME может использоваться сразу после того, как он будет установлен в одном из предыдущих правил.SUBSYSTEM
Совпадает с подсистемой, в которой произошло событие на устройстве.DRIVER
Совпадает с именем дрйвера, на котором произошло событие. Совпадают только те устройства, которые были подключены к драйверу в момент генерации события.ATTR{имя_файла}
Совпадает со значениями атрибутов sysfs устройства, на котором произошло событие. В одном правиле можно указать до пяти ключей ATTR. Обрамляющие пробелы в значении атрибута игнорируются, если само значение для совпадения не содержит обрамляющих пробелов. В зависимости от типа оператора, этот ключ также используется для установки значеня атрибута sysfs.KERNELS
Восходящий поиск подходящего имени устройства в пути к устройству.SUBSYSTEMS
Восходящий поиск подходящего имени подсистемы в пути к устройству.DRIVERS
Восходящий поиск подходящего названия драйвера в пути к устройству.ATTRS{имя_файла}
Восходящий поиск значений атрибутов в sysfs в пути к устройству. В одном правиле может быть указано дл пяти ключей ATTR, но все они должны совпадать с одним и тем же устройством. Обрамляющие пробельные символы в значениях атрибутов игнорируются, если указанное подходящее значение само не содержит пробельный символ.ENV{ключ}
Подходящее значение переменной окружения. В одном правиле может быть указано до пяти ключей ENV. В зависимости от типа оператора, этот ключ также используется для экспорта переменной в окружение.TEST{восьмеричная_маска_доступа}
Проверить существование файла. Если необходимо, может быть указана восьмеричная маска доступа.PROGRAM
Выполнить внешнюю программу. Ключ - истина, если программа завершается с нулевым кодом возврата. Всё событие доступно выполняемой программе в переменных окружения. Вывод программы направляется на стандартный поток вывода, который доступен в ключе RESULT.RESULT
Совпадение со строкой, выведенной последним вызовом PROGRAM. Этот ключ может использоваться в том же или в любом более позднем правиле после вызова PROGRAM.Большинство полей поддерживают совпадение с шаблонами в стиле shell. Поддерживаются следующие символы шаблонов:
*
Совпадает с нулём или любым количеством символов.?
Совпадает с любым единственным символом.[]
Совпадает с любым из символов, указанным внутри квадратных скобок. Например, строка с шаблоном 'tty[SR]' будет совпадать с 'ttyS' или 'ttyR'. Также шаблоном поддерживаются диапазоны, которые задаются символом '-'. Например, для совпадения с любой цифрой можно использовать шаблон [0-9]. Если первый символ, следующий за '[' - это '!', совпадают любые символы вне диапазона.Следующие ключи могут принимать назначаемые значения:
NAME
Имя создаваемого файла устройства или имя сетевого интерфейса, в которое он должен быть переименован. Только одно правило может задать имя файла устройства, все последующие правила с ключом NAME будут проигнорированы.SYMLINK
Имя символической ссылки, указывающей на файл устройства. Каждое подходящее правило может добавлять значение ко списку создаваемых символических ссылок, которые будут указывать на файл устройства. Можно указать несколько символических ссылок, азделённых пробелами.OWNER, GROUP, MODE
Права доступа к файлу устройства. Каждое из указанных значений заменяет значения по-умолчанию, заданные в процессе компиляции.ATTR{ключ}
Значение, которое нужно записать в атрибут sysfs для данного устройства. В зависимости от типа оператора, этот ключ может использоваться для совпадения со значением атрибута sysfs.ENV{ключ}
Экспортировать переменную в окружение. В зависимости от типа оператора, этот ключ может использоваться для совпадения со значением переменной окружения.RUN
Добавить программу в список программ, выполняемых для данного устройства. Этот ключ может использоваться только для запуска коротких задач. Запуск долгой обработки события может привести к блокированию всех будущих событий для этого или подчинённых устройств. Долго работающие задачи должны немедленно отсоединяться от процесса обработки события.Если указана строка, начинающаяся с socket:путь, все текущие значения событий будут переданы в указанный сокет, в виде такого же сообщения, которое ядро отправляет в uevent. Если первый символ указанного пути является символом @, вместо существующего файла сокета будет использован сокет абстрактного пространства имён.
LABEL
Именованная метка, на которую можно перейти из GOTO.GOTO
Переход к следующей метке, указанной в LABEL, при совпадении имени.IMPORT{тип}
Импорт множества переменных в окружение для обработки события, в зависимости от типа:program
Выполнить внешнюю программу, указанную в назначении, и импортировать вывод, который должен иметь формат переменных окружения.file
Импортировать текстовый файл, указанный в назначении, который должен соответствовать формату переменных окружения.parent
Импортировать сохранённые ключи из родительского устройства, прочитав базу данных родительского устройства. Значение, присваиваемое IMPORT{parent}, используется в качестве фильтра имён импортируемых ключей (в том же стиле, в котором происходит сравнение в shell).Если опции не заданы, осуществит выбор между программой или файлом, основываясь на бите исполнимости в правах доступа.
WAIT_FOR
Ожидать доступности файла.OPTIONS
Правило и опции устройства:last_rule
Прекратить применять последующие правила. Последующие правила не будут оказывать какого-либо эффекта.ignore_device
Полностью проигнорировать данное событие.ignore_remove
Проигнорировать, а затем - удалить событие для данного устройства. Это можно использовать как временное решение проблем с неработающими драйверами устройств.link_priority=значение
Указывает приоритет созданных символических ссылок. Устройства с более высоким приоритетом заменяют существующие символические ссылки других устройств. По умолчанию 0.all_partitions
Создать файлы устройства для всех доступных разделов блочного устройства. Это может быть полезно для устройств со сменными носителями информации, которые не обнаруживают замену.event_timeout=
Количество секунд ожидания завершения действий по обработке события, до собственного завершения.string_escape=none|replace
Указывает, нужно ли заменять небезопасные символы в имени устройства. Режим замены можно указать с помощью данной опции.Поля NAME, SYMLINK, PROGRAM, OWNER, GROUP и RUN поддерживают простую подстановку, похожую на ту, которую выполняет printf. Формат символов RUN будет применён после того, как все правила были обработаны, но перед запуском программы. Это позволяет использовать полный набор переменных окружения, совпавших с более ранними правилами. Для всех других полей, подстановка выполняется в процессе обработки правила. Доступны следующие подстановки:
$kernel, %k
Имя, выданное ядром данному устройству.$number, %n
Номер, выданный ядром данному устройству. Например, 'sda3' имеет номер '3'.$devpath, %p
Путь к устройству.$id, %b
Имя устройства, совпавшее в процессе восходящего поиска в пути к устройству с атрибутами SUBSYSTEMS, KERNELS, DRIVERS и ATTRS.$driver
Имя драйвера устройства, совпавшего в процессе восходящего поиска в пути к устройству с атрибутами SUBSYSTEMS, KERNELS, DRIVERS и ATTRS.$attr{файл}, %s{файл}
Значение атрибута устройства, найденное в sysfs, где все ключи в правиле совпали. Если все совпадающие устройства не имеют такого атрибута, будет произведён поиск аттрибута у всех родительских устройств в цепочке. Если атрибут - это символическая ссылка, в качестве значения будет возвращён последний элемент цели символической ссылки.$env{ключ}, %E{ключ}
Значение переменной окружения.$major, %M
Старший номер, выданный устройству ядром.$minor, %m
Младший номер, выданный устройству ядром.$result, %c
Строка, возвращённая внешней программой, вызванной из PROGRAM. Одна часть строки, отделённая пробелом, может быть выбрана указанием номера части в виде атрибута: %c{N+}. Если за числом следует символ '+', в результирующую строку будут подставлены эта часть и все, следующие за ней: %c{N+}$parent, %P
Имя файла родительского устройства.$name
Текущее имя файла устройства. Если имя не было изменено правилом, то это имя устройства, данное ядром.$links
Список текущих символических ссылок, разделённых пробелами. Имеет значение только в том случае, если оно было назначено предыдущим праивлом или при событии удаления.$root, %r
Значение udev_root.$sys, %S
Точка монтирования sysfs.$tempnode, %N
Имя временно созданного файла устройства, для предоставления доступа к устройству из внешней программы, перед тем как будет создан настоящий файл устройства.%%
Символ процента - '%'.$$
Символ доллара - '$'.Количество символов, подлежащих замене, можно ограничить, указав значение длины формата. Например, '%3s{файл}' вставит только первые три символа атрибута sysfs.
Написано Грегом Кроа-Хартманом (Greg Kroah-Hartman) <greg@kroah.com> и Кеем Сиверсом (Kay Sievers) <kay.sievers@vrfy.org> при существенной помощи от Дэна Стеклоффа (Dan Stekloff) и многих других.
Перевод на русский язык выполнил Владимир Ступин <wheelof@gmail.com>.
udevd(8), udevadm(8)
udev | UDEV (7) | Август 2005 |