Сайт | Скачать | Видео | Wiki

Автор Тема: Автоматическая настройка xorg через udev  (Прочитано 14431 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Pro

  • Модератор
  • Ветеран
  • ****
  • Сообщений: 10737
  • Репутация: +113/-2
  • Автор темы
Данный вопрос важен т.к. xorg со всем зоопарком видеокарт не может разбираться автоматически.
вопросами "подсовывания" xorg нужных параметров для работы должна заниматься система которая как раз для этого и создана, т.е. udev.
В нашей системе уже имеется заготовка правила udev которая ранее была взята мной из дистрибутива TinyCore linux. Однако мне так и не удалось заставить xorg воспринимать переменную ENV{xorg_driver}=

В свете новых данных полученных в ходе устранения проблемы с /dev/bus/usb я предполагаю что возможно потребуется сделать после запуска udev еще раз udevadm triggers для видеокарты.
Наглядным примером для отработки правильности действий я предлагаю выбрать видеокарту gma500. Модифицированное правило я выложил ниже. Задача для правила - при использовании модуля ядра gma500_gfx передаем перменную для xorg (это оставлено от старого правила) и переименовываем файл 20-poulsbo.conf.disabled в файл 20-poulsbo.conf (естественно файл надо будет иметь правильный, но мы его вложим потом в пакет xorg-meta)

Код
# udev rules for all video cards
# правило udev для видеокарт
#
#

ACTION!="add|change", GOTO="end_video"

# xorg_start only does something for subsystem "pci" and "video" class.
SUBSYSTEM=="pci", ATTR{class}=="0x030000", GOTO="subsystem_pci"
SUBSYSTEM=="drivers", GOTO="subsystem_drivers"
GOTO="end_video"

# check for drivers dont use the pci substem
LABEL="subsystem_drivers"
KERNEL=="fglrx_pci", ENV{xorg_driver}="fglrx",   GOTO="start_xorg"
KERNEL=="nvidia",    ENV{xorg_driver}="nvidia",  GOTO="start_xorg"
GOTO="end_video"

# check for drivers using the pci substem
LABEL="subsystem_pci"
DRIVER=="i915",      ENV{xorg_driver}="i915",    GOTO="start_xorg"
DRIVER=="gma500_gfx",   ENV{xorg_driver}="modesetting", RUN+="/bin/mv -f /etc/X11/xorg.conf.d/20-poulsbo.conf.disabled /etc/X11/xorg.conf.d/20-poulsbo.conf" GOTO="start_xorg"
DRIVER=="nouveau",   ENV{xorg_driver}="nouveau", GOTO="start_xorg"
DRIVER=="nvidia",    ENV{xorg_driver}="nvidia",  GOTO="start_xorg"
DRIVER=="radeon",    ENV{xorg_driver}="radeon",  GOTO="start_xorg"
DRIVER=="vmware",    ENV{xorg_driver}="vmware",  GOTO="start_xorg"
GOTO="end_video"

# start Xorg
LABEL="start_xorg"
#ENV{xorg_driver}=="?*", RUN+="xwin"

LABEL="end_video"

Какие преимущества: т.к. udev может обрабатывать атрибуты как отдельного устройства, так и целые семейства, возможна гибкая обработка действий для конкретных капризных видеокарт. В идеале хочется чтобы при установке проприетарных драйверов система автоматически выполняла нужные действия.
« Последнее редактирование: 11 Март 2013, 05:27:02 от Pro »
Я загружаю новые пакеты сюда: http://file.puppyrus.org/users/ а дальше можно найти самостоятельно.

Оффлайн Pro

  • Модератор
  • Ветеран
  • ****
  • Сообщений: 10737
  • Репутация: +113/-2
  • Автор темы
Re:Автоматическая настройка xorg через udev
« Ответ #1 : 11 Март 2013, 05:27:36 »
RoDoN, вся надежда на тебя.
Я загружаю новые пакеты сюда: http://file.puppyrus.org/users/ а дальше можно найти самостоятельно.

Оффлайн RoDoN

  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 6282
  • Репутация: +141/-0
Re:Автоматическая настройка xorg через udev
« Ответ #2 : 11 Март 2013, 09:40:13 »
Проверю - отпишусь.
Lenovo G500 (i3-3110M, 8 Гб, Intel + Radeon HD 8570)
PRA 16.12 JWM, Runtu 22.04 x64 XFCE

Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8635
  • Репутация: +187/-2
  • Старый чайник
Re:Автоматическая настройка xorg через udev
« Ответ #3 : 11 Март 2013, 10:01:05 »
 Я тоже.
Моноблок Lenovo IdeaCentre c200 (Intel Atom D525, Intel GMA 3150, 2 Gb RAM) Richy64
Nettop Acer Aspire Revo R3610 (Atom N330, nVidia GeForce 9400, 3 Gb RAM) Richy64

Оффлайн RoDoN

  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 6282
  • Репутация: +141/-0
Re:Автоматическая настройка xorg через udev
« Ответ #4 : 11 Март 2013, 16:41:03 »
Вышеуказанный текст записал в новый файл /lib/udev/rules.d/01-video.rules, файл /etc/X11/xorg.conf.d/20-poulsbo.conf переименовал в /etc/X11/xorg.conf.d/20-poulsbo.conf.disabled, а файл /etc/profile.d/start_gma500.sh удалил, после этого перезагрузил нетбук и облом - разрешение 640x480  :(
Времени долго возиться не было, т.к. проверял во время перерыва, вечером еще поковыряю.

З.Ы. А если в /lib/udev/rules.d/01-video.rules записать следующее:
Код
# udev rules for video cards GMA 500/600
# правило udev для видеокарт  GMA 500/600

ATTR{vendor}=="0x8086", ATTR{device}=="0x8108", RUN+="/bin/mv -f /etc/X11/xorg.conf.d/20-poulsbo.conf.disabled /etc/X11/xorg.conf.d/20-poulsbo.conf.01"
то вроде бы все работает, как надо, но тогда нужно под каждую видюху прописывать ATTR{device}, что не айс.

Pro, поправь, если я что-то не так сделал.
Lenovo G500 (i3-3110M, 8 Гб, Intel + Radeon HD 8570)
PRA 16.12 JWM, Runtu 22.04 x64 XFCE

Оффлайн Pro

  • Модератор
  • Ветеран
  • ****
  • Сообщений: 10737
  • Репутация: +113/-2
  • Автор темы
Re:Автоматическая настройка xorg через udev
« Ответ #5 : 11 Март 2013, 16:46:12 »
ATTR{driver} или что то подобное поможет нам, надо искать атрибут для модуля ядра.
приведенное мной правило видимо сделано для очень старого udev, синтаксис поменялся со временем, но это не страшно, нужно нащупать верное решение, а уж разрулить условия - дело техники.
Я загружаю новые пакеты сюда: http://file.puppyrus.org/users/ а дальше можно найти самостоятельно.

Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8635
  • Репутация: +187/-2
  • Старый чайник
Re:Автоматическая настройка xorg через udev
« Ответ #6 : 11 Март 2013, 21:06:30 »
но тогда нужно под каждую видюху прописывать ATTR{device}, что не айс.
Айс, айс.
Моноблок Lenovo IdeaCentre c200 (Intel Atom D525, Intel GMA 3150, 2 Gb RAM) Richy64
Nettop Acer Aspire Revo R3610 (Atom N330, nVidia GeForce 9400, 3 Gb RAM) Richy64

Оффлайн RoDoN

  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 6282
  • Репутация: +141/-0
Re:Автоматическая настройка xorg через udev
« Ответ #7 : 11 Март 2013, 22:14:15 »
Ну, если касательно карточек Poulsbo, то теперь все работает хорошо.
Еще бы услышать отзывы владельцев GMA 3600/3650 и тогда вопрос с этими "псевдоинтеловскими" карточками можно будет пока закрыть.
Lenovo G500 (i3-3110M, 8 Гб, Intel + Radeon HD 8570)
PRA 16.12 JWM, Runtu 22.04 x64 XFCE

Оффлайн Pro

  • Модератор
  • Ветеран
  • ****
  • Сообщений: 10737
  • Репутация: +113/-2
  • Автор темы
Re:Автоматическая настройка xorg через udev
« Ответ #8 : 12 Март 2013, 03:43:07 »
но тогда нужно под каждую видюху прописывать ATTR{device}, что не айс.
Айс, айс.
ну нет, так не пойдет, правило усложняется, задача сделать универсальное правило, а не чисто для gma500.
Я посмотрю какой надо атрибут для определения драйвера видеокарты.
Я загружаю новые пакеты сюда: http://file.puppyrus.org/users/ а дальше можно найти самостоятельно.

Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8635
  • Репутация: +187/-2
  • Старый чайник
Re:Автоматическая настройка xorg через udev
« Ответ #9 : 12 Март 2013, 15:13:01 »
 Соорудил вот такую строку
Код
DRIVERS=="gma500",   ENV{xorg_driver}="modesetting", RUN+="gma500.sh", GOTO="start_xorg"
для 64-xorg-card.rules, но работает только если убрать
Код
# xorg_start only does something for subsystem "pci" and "video" class.
SUBSYSTEM=="pci", ATTR{class}=="0x030000", GOTO="subsystem_pci"
SUBSYSTEM=="drivers", GOTO="subsystem_drivers"
GOTO="end_video"

# check for drivers dont use the pci substem
LABEL="subsystem_drivers"
KERNEL=="fglrx_pci", ENV{xorg_driver}="fglrx",   GOTO="start_xorg"
KERNEL=="nvidia",    ENV{xorg_driver}="nvidia",  GOTO="start_xorg"
GOTO="end_video"
Моноблок Lenovo IdeaCentre c200 (Intel Atom D525, Intel GMA 3150, 2 Gb RAM) Richy64
Nettop Acer Aspire Revo R3610 (Atom N330, nVidia GeForce 9400, 3 Gb RAM) Richy64

Оффлайн Pro

  • Модератор
  • Ветеран
  • ****
  • Сообщений: 10737
  • Репутация: +113/-2
  • Автор темы
Re:Автоматическая настройка xorg через udev
« Ответ #10 : 12 Март 2013, 15:49:26 »
DRIVERS=="gma500" это странно, по идее должно быть gma500_gfx
Нельзя ли выложить udevadm info для видекарты, я сравню со своими данными.

SUBSYSTEM ты же вроде на SUBSYSTEMS менять должен был?
Без RUN+="gma500.sh" не подхватывается Параметр ENV{xorg_driver}  ?

ps. Почему вариант с переименованием файла не устраивает? В чем преимущества именно скрипта gma500.sh
Я загружаю новые пакеты сюда: http://file.puppyrus.org/users/ а дальше можно найти самостоятельно.

Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8635
  • Репутация: +187/-2
  • Старый чайник
Re:Автоматическая настройка xorg через udev
« Ответ #11 : 12 Март 2013, 18:00:56 »
DRIVERS=="gma500" это странно, по идее должно быть gma500_gfx
Нельзя ли выложить udevadm info для видекарты, я сравню со своими данными.
Код
 looking at device '/devices/pci0000:00/0000:00:02.0/drm/card0':
    KERNEL=="card0"
    SUBSYSTEM=="drm"
    DRIVER==""

  looking at parent device '/devices/pci0000:00/0000:00:02.0':
    KERNELS=="0000:00:02.0"
    SUBSYSTEMS=="pci"
    DRIVERS=="gma500"
    ATTRS{irq}=="16"
    ATTRS{subsystem_vendor}=="0x1025"
    ATTRS{broken_parity_status}=="0"
    ATTRS{class}=="0x030000"
    ATTRS{consistent_dma_mask_bits}=="32"
    ATTRS{dma_mask_bits}=="32"
    ATTRS{local_cpus}=="ff"
    ATTRS{device}=="0x8108"
    ATTRS{enable}=="1"
    ATTRS{msi_bus}==""
    ATTRS{local_cpulist}=="0-7"
    ATTRS{vendor}=="0x8086"
    ATTRS{subsystem_device}=="0x0244"
    ATTRS{boot_vga}=="1"
    ATTRS{d3cold_allowed}=="1"

  looking at parent device '/devices/pci0000:00':
    KERNELS=="pci0000:00"
    SUBSYSTEMS==""
    DRIVERS==""
SUBSYSTEM ты же вроде на SUBSYSTEMS менять должен был?
И так, и так работает.
Без RUN+="gma500.sh" не подхватывается Параметр ENV{xorg_driver}  ?
Нет.
ps. Почему вариант с переименованием файла не устраивает? В чем преимущества именно скрипта gma500.sh
Ни в чём, просто взял первоисточник.
Моноблок Lenovo IdeaCentre c200 (Intel Atom D525, Intel GMA 3150, 2 Gb RAM) Richy64
Nettop Acer Aspire Revo R3610 (Atom N330, nVidia GeForce 9400, 3 Gb RAM) Richy64

Оффлайн Pro

  • Модератор
  • Ветеран
  • ****
  • Сообщений: 10737
  • Репутация: +113/-2
  • Автор темы
Re:Автоматическая настройка xorg через udev
« Ответ #12 : 13 Март 2013, 02:32:38 »
 ENV{xorg_driver} бы заставить работать, интересно а если сделать EXPORT{xorg_driver} например.

Ну вот ты выложил готовое правило, оно работает? а то писал же что надо убрать строки SUBSYSTEM=="pci", ATTR{class}=="0x030000", GOTO="subsystem_pci"

Цитата
Цитата: Pro от Вчера в 22:49:26
ps. Почему вариант с переименованием файла не устраивает? В чем преимущества именно скрипта gma500.sh
Ни в чём, просто взял первоисточник.
мне кажется вариант с переименованием будет выгоднее, готовые заготовки будут лежать там где надо, и в случае сложной проблемы их можно будет исправить вручную. В случае скрипта, явно не видно что он там вставит в конфиг.

« Последнее редактирование: 13 Март 2013, 02:38:41 от Pro »
Я загружаю новые пакеты сюда: http://file.puppyrus.org/users/ а дальше можно найти самостоятельно.

Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8635
  • Репутация: +187/-2
  • Старый чайник
Re:Автоматическая настройка xorg через udev
« Ответ #13 : 13 Март 2013, 08:00:16 »
Ну вот ты выложил готовое правило, оно работает? а то писал же что надо убрать строки SUBSYSTEM=="pci", ATTR{class}=="0x030000", GOTO="subsystem_pci"
Лишними оказались GOTO="end_video", правило не исполнялось. Происходил сброс. Закомментировал, теперь у меня работает.
Моноблок Lenovo IdeaCentre c200 (Intel Atom D525, Intel GMA 3150, 2 Gb RAM) Richy64
Nettop Acer Aspire Revo R3610 (Atom N330, nVidia GeForce 9400, 3 Gb RAM) Richy64

Оффлайн Pro

  • Модератор
  • Ветеран
  • ****
  • Сообщений: 10737
  • Репутация: +113/-2
  • Автор темы
Re:Автоматическая настройка xorg через udev
« Ответ #14 : 13 Март 2013, 08:04:33 »
Ну вот ты выложил готовое правило, оно работает? а то писал же что надо убрать строки SUBSYSTEM=="pci", ATTR{class}=="0x030000", GOTO="subsystem_pci"
Лишними оказались GOTO="end_video", правило не исполнялось. Происходил сброс. Закомментировал, теперь у меня работает.
а по идее должно выполняться при совпадении с SUBSYSTEM=="pci", ATTR{class}=="0x030000", GOTO="subsystem_pci" т.е. проблема в этой строке где то. может ATTRS{class}=="0x030000" спасет ситуацию?
Я загружаю новые пакеты сюда: http://file.puppyrus.org/users/ а дальше можно найти самостоятельно.