LINUX.ORG.RU

Запускать юнит после загрузки драйвера

 ,


0

1

Ноутбук Lenovo thinkpad с trackpoint. Всегда для настройки параметров trackpoint при загрузке использовал скрипт из AUR:

aur/trackpoint 1.0-2 [installed] (20)
    Init script for setting trackpoint values on Thinkpad laptops

Теперь пытаюсь перейти на systemd в свете последних новостей. Все работает, но соответствующий unit для trackpoint отсутствует.

Скрипт просто записывает в /sys в определенные файлы нужные значения. Я понимаю, что это можно (и более правильно) делать через udev, также я понимаю, что то, что я делаю сейчас — это костыль, но мне интересно разобраться с systemd.

Написал (взял за основу какой-то из стандартных) Unit следующего содержания:

[Unit]
Description=Set Trackpoint parameters
DefaultDependencies=no

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/etc/rc.d/trackpoint start
ExecStop=/etc/rc.d/trackpoint stop

[Install]
WantedBy=graphical.target

При загрузке нужные параметры не устанавливается, хотя данный юнит запускается. В логах видно:

Nov 07 20:34:26 laptop trackpoint[156]: [172B blob data]
Nov 07 20:34:26 laptop trackpoint[156]: cp: cannot stat '/sys/devices/platform/i8042/serio1/sensitivity': No such file or directory
Nov 07 20:34:26 laptop trackpoint[156]: cp: cannot stat '/sys/devices/platform/i8042/serio1/speed': No such file or directory
Nov 07 20:34:26 laptop trackpoint[156]: /etc/rc.d/trackpoint: line 39: /sys/devices/platform/i8042/serio1/press_to_select: No such file or directory
Nov 07 20:34:26 laptop trackpoint[156]: /etc/rc.d/trackpoint: line 42: /sys/devices/platform/i8042/serio1/sensitivity: No such file or directory
Nov 07 20:34:26 laptop trackpoint[156]: /etc/rc.d/trackpoint: line 45: /sys/devices/platform/i8042/serio1/speed: No such file or directory
Nov 07 20:34:26 laptop trackpoint[156]: [28B blob data]
Nov 07 20:34:27 laptop kernel: psmouse serio1: trackpoint: IBM TrackPoint firmware: 0x0e, buttons: 3/3

Понятно, что юнит запускается раньше, чем это необходимо делать. Нужные файлы в /sys появятся как раз после загрузки модуля psmouse (последняя строка). Вопрос: как запускать юниты после определенного модуля/события?


Ох уж эти скородрочеры...

Все разжевано на форуме арча, проследуйте туда, пожалуйста.

anonymous
()

Я понимаю, что это можно (и более правильно) делать через udev

Ну так и сделай через udev, тем более что это действительно более правильно.

но мне интересно разобраться с systemd

Udev — часть пакета systemd. Разобравшись с udev, разберёшься с systemd в широком смысле.

также я понимаю, что то, что я делаю сейчас — это костыль

Скрипт должен выполниться при появлении железа, а не при загрузке. Таки костыль.

ExecStart=/etc/rc.d/trackpoint start

М-да.

gentoo_root ★★★★★
()
Ответ на: комментарий от Lamppost

Может добавить After=systemd-modules-load.service ?

Попробовал. Не помогло. Добавил в секцию [Unit].

rayven
() автор топика
Ответ на: комментарий от gentoo_root

У меня есть решение для udev. Я от него отказался в свое время из-за проблем с гибернацией: после выхода из нее все параметры слетали. Не знаю почему. А если тупо скриптом добавлять, то нет. Может сейчас и заработает. Не пробовал давно.

rayven
() автор топика
Ответ на: комментарий от rayven

Я от него отказался в свое время из-за проблем с гибернацией: после выхода из нее все параметры слетали.

А почему они тогда должны не слететь, если тупо задать их при загрузке?

Вообще, драйвер должен все параметры сохранять при suspend и восстанавливать при resume. Если они меняются, то тут либо кривой драйвер, либо что-то другое их тоже дёргает.

Вот тут человек долбался с этим. У меня так же.

Я не мегаспец по правилам udev, но, по-моему, там не хватает ACTION==«add|change».

gentoo_root ★★★★★
()
Ответ на: комментарий от anonymous

Можно. Параметр ConditionPathExists=. Только работает он вот так:

starting a unit verify that the specified condition is true. If it is not true the starting of the unit will be skipped, however all ordering dependencies of it are still respected.

То есть проверил один раз, обломался, поехал другие юниты исполнять. К этому уже не вернется. Если я правильно понимаю.

rayven
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.