Udev (російський)

Ця сторінка потребує супровідник

За функціональністю udev замінює hotplug і hwdetect.

"Udev - менеджер пристроїв для нових версій ядра Linux, що є наступником devfs, hotplug і HAL. Його основне завдання - обслуговування файлів пристроїв в каталозі / dev і обробка всіх дій, які виконуються в просторі користувача при додаванні / відключенні зовнішніх пристроїв, включаючи завантаження firmware. "

З метою забезпечення кращої продуктивності udev завантажує модулі ядра асинхронно, тобто паралельно, а не послідовно. В цьому є свій недолік: udev не зберігається порядок завантаження модулів, він може відрізнятися від завантаження до завантаження. Якщо комп'ютер має кілька блокових пристроїв, це може привести до того, що при випадковому порядку завантаження їм будуть присвоюватися випадкові імена. Наприклад, якщо до комп'ютера підключено два жорсткі диски, / dev / sda може випадково ставати / dev / sdb. Додаткову інформацію про це дивіться далі.

На даний момент udev включений до складу пакета systemd і в системах Arch Linux встановлюється за умовчанням. Дивіться також systemd-udevd.service (8) для отримання додаткової інформації.

Про правила udev

Файли правил udev зберігаються в каталозі /etc/udev/rules.d/. їх імена повинні закінчуватися на .rules. Правила, що надаються іншими пакетами, поміщаються в каталог /usr/lib/udev/rules.d/. При цьому, якщо правила в цих каталогах мають однакові імена, пріоритет віддається файлів з /etc/udev/rules.d/.

Написання своїх правил

Важливо: Щоб змонтувати знімні пристрої, які не викликайте mount з правил udev. У разі використання файлових систем FUSE, ви отримаєте помилку "Transport endpoint not connected". Замість цього використовуйте udisks. який виконує автомонтірованіе правильно.

  • Щоб дізнатися, як створювати власні правила, дивіться сторінку в інтернеті Написання правил udev.
  • Приклад правила udev можна знайти в розділі Приклади на тій же сторінці.

Нижче наведено приклад правила, яке створює символічне посилання / dev / video-cam1. коли до комп'ютера підключається веб-камера. Наприклад, ми з'ясували, що для підключеної камери створений файл пристрою / dev / video2. Причина, по якій ми створюємо це правило, полягає в тому, що при наступному завантаженні веб-камері може бути присвоєно інше ім'я, наприклад, / dev / video0.

Примітка: Утиліта udevadm виводить інформацію про пристрої, починаючи з вказаного пристрою (/ dev / video2), і потім, слідуючи по ланцюжку батьківських пристроїв, виводить інформацію про них. Крім усього іншого, виводяться всі можливі атрибути пристроїв в форматі, сумісному з udev. Правило для зіставлення може бути створено на основі цих атрибутів самого пристрою або атрибутів батьківського пристрою.

Ми використовуємо параметри веб-камери KERNEL == "video2" і SUBSYSTEM == "video4linux". потім ми візьмемо ідентифікатори виробника і вироби батьківського USB-пристрої SUBSYSTEMS == "usb". ATTRS == "05a9" і ATTRS == "4519" для порівняння:

У прикладі ми створили символічне посилання, використовуючи параметр SYMLINK + = "video-cam1". Ми можемо також легко поставити власника (OWNER = "john"), групу (GROUP = "video"), або встановити права доступу до заслання (MODE = "0660"). Однак, якщо ви маєте намір створити правило, яке робить що-небудь при видаленні пристрою, майте на увазі, що атрибути пристрою можуть стати недоступними. В цьому випадку вам необхідно використовувати спеціальний набір змінних оточення. Щоб відобразити ці змінні, виконайте наступну команду при від'єднанні пристрою:

У висновку команди ви побачите значення параметрів пристрою, наприклад, ID_VENDOR_ID і ID_MODEL_ID. які відповідають використаним раніше ідентифікаторів виробника і вироби. Правило, яке використовує змінні оточення пристрої, може виглядати наступним чином:

Список атрибутів пристрою

Щоб вивести всі атрибути пристрою, які ви можете використовувати в написанні правил udev. виконайте:

Замініть ім'я_пристрою поточним ім'ям файлу пристрою, наприклад, / dev / sda або / dev / ttyUSB0.

Якщо ви не знаєте ім'я файлу пристрою, ви можете також вивести всі атрибути по конкретному системному шляху:

Перевірка правил перед завантаженням

Ви можете також вказати прямий сісметний шлях до пристрою:

Завантаження нових правил

udev здатний визначати наявність змін в файлах правил автоматично, тому зміни відразу вступають в силу без необхідності перезапуску udev. Однак, нові правила не будуть застосовані відразу до вже підключеним пристроям. Пристрої з можливістю гарячої заміни, наприклад, пристрої USB, можуть бути просто перепідключитися для застосування до них нових правил. Також ви можете перезавантажити модулі ядра ohci-hcd і ehci-hcd. що автоматично призведе до перезавантаження всіх драйверів для кожного USB-пристрої.

Якщо правила не перезавантажуються автоматично, виконайте:

Щоб вручну змусити udev застосувати ваші правила, виконайте:

Поради та рекомендації

Доступ до програматорів і віртуальним COM-портів

Наступний набір правил дасть можливість звичайним користувачам (членам групи users) отримати доступ до USB-програматорів для мікроконтролерів AVR USBtinyISP (англ.). віртуальним COM-портів (перетворювачів інтерфейсу USB <-> UART) на основі популярної мікросхеми CP2102 (англ.). програматорів Atmel AVR Dragon (англ.) і Atmel AVR ISP mkII (англ.).

Виконання команд при підключенні USB-пристроїв

Виконання команд при підключенні VGA-монітора

Створіть правило /etc/udev/rules.d/95-monitor-hotplug.rules наступного змісту, щоб запустити arandr при підключенні VGA-монітора:

Визначення нових накопичувачів eSATA

Якщо ваш накопичувач eSATA не було визначено системою при підключенні, ви можете перезавантажити систему, не відключаючи кабель пристрою, або, якщо перезавантаження небажана, виконати:

Ще один варіант полягає у використанні утиліти scsiadd AUR з AUR.

Накопичувач повинен з'явитися в / dev. Якщо це не так, спробуйте виконати:

до і після вищенаведених команд і подивитися, чи відбувається щось.

Визначення внутрішніх портів SATA як зовнішніх

Якщо ви підключили eSATA-адаптер, система все ще буде распоздавать його як внутрішній SATA-накопичувач. GNOME і KDE будуть постійно запитувати пароль адміністратора. Наступне правило позначає всі зазначені SATA-порти як порти eSATA, завдяки чому звичайні користувачі зможуть підключати свій накопичувач eSATA до цього порту як USB-накопичувач без запиту пароля адміністратора:

Примітка: Дізнатися правильне значення параметра DEVPATH ви можете, використовуючи наступні команди (замість / dev / sdb вкажіть ім'я вашого пристрою):

Установка постійних імен пристроїв

Через асинхронного способу завантаження модулів, вони не започатковано в різному порядку від завантаження до завантаження. Це призводить до випадкового перейменування пристроїв при кожному запуску. Щоб задати постійні імена вашим пристроям, можна створити спеціальне правило udev.

Дивіться також статті Постійні імена для блокових пристроїв для отримання інформації по блоковим пристроям і Налаштування мережі # Імена пристроїв - для мережевих пристроїв.

Процедура установки веб-камери описана в статті Налаштування веб-камери.

Примітка: Використання імен, відмінних від / dev / video *. може перешкодити завантаженні v4l1compat.so. і, можливо, v4l2convert.so

Якщо у вас кілька принтерів, їм будуть випадковим чином присвоєні імена виду / dev / lp [0-9]. що, наприклад, може перешкодити сервера CUPS правильно налаштувати пристрої. Ви можете створити таке правило, яке буде створювати постійні символічні посилання в каталогах / dev / lp / by-id і / dev / lp / by-path подібно до схеми, наведеної в статті Постійні імена для блокових пристроїв.

USB флеш-накопичувачі

USB флеш-накопичувачі зазвичай містять розділи, і мітки розділів дозволяють отримати статичні імена пристроїв. Також цього можна досягти, створивши правило udev.

Насамперед дізнайтеся серійний номер і ідентифікатори USB вашого пристрою (якщо у вас кілька однакових пристроїв, переконайтеся, що серійні номери насправді унікальні):

Створіть правило udev для пристрою, додавши наступне в файл в /etc/udev/rules.d/. наприклад, 8-usbstick.rules.

Замініть, відповідно, серійний_номер. id_поставщіка. id_устройства на реальні значення, а ім'я - на бажане ім'я пристрою, наприклад, / dev / sdd. Спеціальна мітка% n позначає номер розділу, не видаляйте її. Наприклад, якщо у накопичувача два розділи, будуть створені дві символічні посилання.

Перевірте вміст / dev.

Ви повинні побачити одну або кілька створених символічних посилань для вашого пристрою.

Пробудження при активності USB-пристрої

Насамперед, визначте ідентифікатори виробника і вироби вашого пристрою:

Тепер змініть атрибут power / wakeup пристрої та USB-контролера, до якого він підключений. В даному прикладі це driver / usb7 / power / wakeup. Використовуйте наступне правило:

Примітка: Переконайтеся також, що контролер USB активований в / proc / acpi / wakeup.

генерування подій

This article or section is a candidate for merging with # Перевірка правил перед завантаженням.

Може бути корисно згенерувати різні події udev. Наприклад, ви хочете симулювати відключення USB-пристрою на віддаленій машині. У таких випадках, використовуйте udevadm trigger.

Ця команда симулює відключення всіх USB-пристроїв з зазначеним ідентифікатором постачальника id_поставщіка.

Вирішення проблем

Додавання модулів в чорний список

Іноді udev може помилково завантажувати неправильні модулі ядра. Щоб уникнути цього, ви можете додати такі модулі в чорний список. Якщо модуль доданий в цей список, udev стане ігнорувати його при завантаженні (в тому числі, якщо пристрій підключено вже після завантаження системи).

udevd вилітає при завантаженні

Після міграції на LDAP або поновлення системи, що використовує LDAP, udevd може почати аварійно завершуватися в момент завантаження системи з повідомленням "Starting UDev Daemon". Зазвичай це відбувається тому, що udevd намагається визначити ім'я через LDAP, але не може, так як в цей момент ще не встановлено підключення до мережі.

Необхідно, щоб всі використовувані в LDAP групи були продубльовані локально. Отримати імена груп, які використовуються в правилах udev. і імена груп, присутніх в системі, можна командами:

Висновок буде записаний в файли present_groups і udev_groups. Щоб побачити відмінності, виконайте порядкове порівняння командою diff.

В даному прикладі група pcscd з якоїсь причини відсутній в системі. Всі такі групи необхідно додати в систему. Також переконайтеся, що імена всіх локальних ресурсів дозволені, перш ніж повертатися до LDAP. Файл /etc/nsswitch.conf повинен містити наступну рядок:

Непрацездатні пристрої BusLogic можуть викликати зависання при завантаженні системи

Це баг в ядрі Linux, на даний момент не виправлений.

Пристрій є знімним, проте не визнається таким

Створіть правило udev для конкретного пристрою. Щоб отримати детальну інформацію про пристрій ви можете або використовувати ID_SERIAL. або ID_SERIAL_SHORT (не забудьте поміняти / dev / sdb якщо потрібно):

Тепер створіть файл правила в /etc/udev/rules.d/ і встановіть змінні або для udisks, або для udisks2.

Для udisks встановіть UDISKS_SYSTEM_INTERNAL = "0". яка позначить всі пристрої як знімні, і, таким чином, відповідні для автоматичного монтування. Дивіться подробиці на сторінці udisks (7).

Для udisks2 встановіть UDISKS_AUTO = "1". щоб позначити пристрій для автоматичного монтування та UDISKS_SYSTEM = "0". щоб позначити пристрій як знімний. Дивіться подробиці на сторінці udisks (8).

Перезавантажте правила udev командою udevadm control --reload. Тепер ваш пристрій буде розпізнаватися як знімний.

Проблеми з автоматичною завантаженням модулів аудіопристроїв

Деякі користувачі відчувають проблеми із завантаженням модулів звукових пристроїв, для яких залишилися старі записи в /etc/modprobe.d/sound.conf. Чистка файлу від таких записів може допомогти.

Примітка: Починаючи з версії udev 171, модулі емуляції OSS (snd_seq_oss. Snd_pcm_oss і snd_mixer_oss) більше не завантажуються автоматично.

Підтримка дисководів IDE

Починаючи з версії 170, udev не підтримує пристрої CD-ROM / DVD-ROM, що завантажуються як звичайні IDE дисководи модулем ide_cd_mod і відображаються в системі як / dev / hd *. Дисковод доступний тільки програмам, які звертаються до пристрою безпосередньо, таким як cdparanoia. але невидимий для більш високорівневих програм, таких як KDE.

Причина, по якій завантаження модуля ide_cd_mod має пріоритет перед іншими модулями, наприклад, sr_mod. може полягати в тому, що з якоїсь причини модуль piix завантажується в вашому initramfs. В цьому випадку ви можете просто замінити його у файлі /etc/mkinitcpio.conf на ata_piix.

Оптичні дисководи мають невірний group ID

Якщо значення group ID вашого дисковода встановлено як disk. але ви хочете, щоб воно було optical. вам слід створити таке правило:

Дивіться також

Схожі статті