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/.
Написання своїх правил
- Щоб дізнатися, як створювати власні правила, дивіться сторінку в інтернеті. Написання правил udev.
- Приклад правилаudevможна знайти в розділі Приклади на тій жесторінці.
Нижче наведено приклад правила, яке створює символічне посилання /dev/video-cam1 , коли до комп'ютера підключається веб-камера. Наприклад, ми з'ясували, що для підключеної камери створено файл пристрою /dev/video2 . Причина, через яку ми створюємо це правило, полягає в тому, що при наступному завантаженні веб-камері може бути присвоєно інше ім'я, наприклад /dev/video0 .
Ми використовуємо параметри веб-камери 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-накопичувач без запиту пароля адміністратора:
Встановлення постійних імен пристроїв
Через асинхронний спосіб завантаження модулів, вони ініціалізуються в різному порядку від завантаження до завантаження. Це призводить до випадкового перейменування пристроїв під час кожного запуску. Щоб встановити імена ваших пристроїв, можна створити спеціальне правилоudev.
Дивіться також статті Постійні імена для блокових пристроїв для отримання інформації про блокові пристрої та Налаштування мережі#Імена пристроїв — для мережних пристроїв.
Відеопристрою
Процедуру встановлення веб-камери описано у статті Налаштування веб-камери [broken link: invalid section] .
Використання декількох веб-камер може бути корисним, наприклад, спільно з motion AUR (програмний детектор руху, який отримує зображення з пристроївvideo4linuxта/або веб-камер). Під час завантаження веб-камер їм випадково надаються імена виду /dev/video[0..n] . Рекомендоване рішення полягає у створенні символічних посилань з використанням правилаudev(як у прикладі #Написання своїх правил):
Якщоу вас кілька принтерів, їм будуть випадково надані імена виду /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 . Використовуйте таке правило:
Генерування подій
Цей матеріал або розділ є 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 . Чищення файлу з таких записів може допомогти.
Підтримка дисководів 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, вам слід створити таке правило: