[systemd-devel] Passing variables from udev to unit
Lennart Poettering
lennart at poettering.net
Fri Mar 14 14:11:51 PDT 2014
On Fri, 14.03.14 08:53, Peter Hutterer (peter.hutterer at who-t.net) wrote:
> Hey,
>
> I have a service file wacom-inputattach at .service that is started from a udev
> rule:
>
> SUBSYSTEM=="tty|pnp", KERNEL=="ttyS[0-9]*", ATTRS{id}=="WACf*",
> TAG+="systemd", ENV{SYSTEMD_WANTS}+="wacom-inputattach@%k.service"
>
> and the service file then runs:
>
> ExecStart=/usr/bin/inputattach -w8001 /dev/%I
>
> That works fine, but now I need to pass a second parameter into the service
> file. Ideally I want to run something like:
>
> ExecStart=/usr/bin/inputattach --baud $BAUD -w8001 /dev/%I
>
> I can set the baud rate based on ATTRS{id} in the udev rule, I just don't
> know if there is a way to pass this to the service file. Is there a way to
> do this or do I need to write a wrapper?
No this is currently not possible, instances can only have one instance
identifier. Any chance you can maybe adapt inputattach to use simple
libudev calls to read the props from the device on its own? That way the
thing would always work, even if people call it from the command line?
Should be like 10 lines of code or so.
fstat(tty_fd, &st);
udev = udev_new();
d = udev_device_new_from_devnum(udev, 'c', st.st_rdev);
baud_str = udev_device_get_property_value(d, "WACOM_BAUDRATE");
baud = atoi(bau_str);
udev_device_unref(d);
udev_unref(udev);
And then set WACOM_BAUDRATE from an udev rule.
Lennart
--
Lennart Poettering, Red Hat
More information about the systemd-devel
mailing list