# new udev - dev.d script stopped working

## Lawless

Just updated to udev 0.59 and now I have a problem with my pda udev script (in /etc/dev.d...)

It is connected via usb and the script first starts a communication server and after that is starts ppp to connect.

With the new udev just the server gets started but not ppp - I have to start that manually afterwards (which does work without problem)

I inserted a sleep between the two commands but no success - the ppp connection could only be started after the udev script has finished.

I had that problem with the hotplug script which was the reason to switch to a udev script - now this stopped working too?!

Do I have to downgrade udev?!

----------

## Kurse

The release notes may shed some light on your troubles.

----------

## drphibes

Here are the release notes.  Also pertinent to my thread on a related hotplug issue: https://forums.gentoo.org/viewtopic-t-355069.html

```
udev 059

========

Major changes happened with this release. The goal is to take over the

complete kernel-event handling and provide a more efficient way to dispatch

kernel events. Replacing most of the current shell script logic and the

kernel forked helper with a netlink-daemon and a rule-based event handling.

o udevd listens to netlink events now. The first valid netlink event

  will make udevd ignore any message from udevsend that contains a

  SEQNUM, to avoid duplicate events. The forked events can be disabled

  with:

    echo "" > /proc/sys/kernel/hotplug

  For full support, the broken input-subsytem needs to be fixed, not to

  bypass the driver core.

o /etc/dev.d/ + /etc/hotplug.d/ directory multiplexing is completely

  removed from udev itself and must be emulated by calling small

  helper binaries provided in the extras folder:

    make EXTRAS=extras/run_directory/

  will build udev_run_devd and udev_run_hotplugd, which can be called

  from a rule if needed:

    RUN+="/sbin/udev_run_hotplugd"

  The recommended way to handle this is to convert all the calls from

  the directories to explicit udev rules and get completely rid of the

  multiplexing. (To catch a ttyUSB event, you now no longer need to

  fork and exit 300 tty script instances you are not interested in, it

  is just one rule that matches exactly the device.)

o udev handles now _all_ events not just events for class and block

  devices, this way it is possible to control the complete event

  behavior with udev rules. Especially useful for rules like:

    ACTION="add", DEVPATH="/devices/*", MODALIAS=="?*", RUN+="/sbin/modprobe $modalias"

o As used in the modalias rule, udev supports now textual

  substitution placeholder along with the usual format chars. This

  needs to be documented, for now it's only visible in udev_rules_parse.c.

o The rule keys support now more operations. This is documented in the

  man page. It is possible to add values to list-keys like the SYMLINK

  and RUN list with KEY+="value" and to clear the list by assigning KEY="".

  Also "final"-assignments are supported by using KEY:="value", which will

  prevent changing the key by any later rule.

o kernel 2.6.12 has the "detached_state" attribute removed from

  sysfs, which was used to recognize sysfs population. We switched that

  to wait for the "bus" link, which is only available in kernels after 2.6.11.

  Running this udev version on older kernels may cause a short delay for

  some events.

o To provide infrastructure for persistent device naming, the id programs:

  scsi_id, vol_id (former udev_volume_id), and ata_id (new) are able now

  to export the probed data in environment key format:

    pim:~ # /sbin/ata_id --export /dev/hda

    ID_MODEL=HTS726060M9AT00

    ID_SERIAL=MRH401M4G6UM9B

    ID_REVISION=MH4OA6BA

  The following rules:

    KERNEL="hd*[!0-9]", IMPORT="/sbin/ata_id --export $tempnode"

    KERNEL="hd*[!0-9]", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/$env{ID_MODEL}_$env{ID_SERIAL}"

  Will create:

    kay@pim:~> tree /dev/disk

    /dev/disk

    |-- by-id

    |   |-- HTS726060M9AT00_MRH401M4G6UM9B -> ../../hda

    |   `-- IBM-Memory_Key -> ../../sda

    |-- by-label

    |   |-- swap -> ../../hda1

    |   |-- date -> ../../sda1

    |   `-- home -> ../../hda3

    `-- by-uuid

        |-- 2E08712B0870F2E7 -> ../../hda3

        |-- 9352cfef-7687-47bc-a2a3-34cf136f72e1 -> ../../hda1

        |-- E845-7A89 -> ../../sda1

        `-- b2a61681-3812-4f13-a4ff-920d70604299 -> ../../hda2

  The IMPORT= operation will import these keys in the environment and make

  it available for later PROGRAM= and RUN= executed programs. The keys are

  also stored in the udevdb and can be queried from there with one of the

  next udev versions.

o A few binaries are silently added to the repository, which can be used

  to replay kernel events from initramfs instead of using coldplug. udevd

  can be instructed now to queue-up events while the stored events from

  initramfs are filled into the udevd-queue. This code is still under

  development and there is no documentation now besides the code itself.

  The additional binaries get compiled, but are not installed by default.

o There is also a temporary fix for a performance problem where too many

  events happen in parallel and every event needs to parse the rules.

  udev can now read precompiled rules stored on disk. This is likely to be

  replaced by a more elegant solution in a future udev version.

```

----------

## Lawless

So how does this help me?  :Sad: 

My script

```

/etc/dev.d/default/pda.dev

#!/bin/bash

if [ $ACTION == "add" ] && [ $DEVNAME == "/dev/tts/USB0" ]; then

dccm     # pda server

sleep 2

synce-serial-start      # start ppp connection

fi

```

I also moved /etc/hotplug.d/default to prevent hotplug to interfere...

dccm gets started (so the script itself works) but the synce-serial-start does not work. I think at that time /dev/tts/USB0 does not exist or something like that (that was the problem with my old hotplug script just after I switched from devd tu udev).

What is wrong with that script now?

----------

## chrmhoffmann

I created a udev rule 10-pda.rules like this to make it work:

BUS="usb", KERNEL="ttyUSB*", DRIVER="ipaq", SYMLINK="pda", RUN += "/usr/bin/synce-serial-start"

Then run:

udevstart

synce-serial-config pda

BTW: I had to put /sbin before modprobe in /usr/bin/synce-serial-start as it doesnt find it otherwise

Chris

----------

