This looks like it might be a duplicate of bug 615549.
I've done some digging and although I'm not sure this will fully resolve the issue observed, I have found a bug in lightdm.conf which could cause the behaviour seen...
As Clint intimates in #11, the current 'start on' condition...
... is *NOT* valid. What this condition is asking Upstart to do is match on an event whose first _positional_ environment variable *exactly matches* the string 'card0' and which also has an environment variable called 'PRIMARY_DEVICE_FOR_DISPLAY' with value '1'.
This looks like it might be a duplicate of bug 615549.
I've done some digging and although I'm not sure this will fully resolve the issue observed, I have found a bug in lightdm.conf which could cause the behaviour seen...
As Clint intimates in #11, the current 'start on' condition...
drm- device- added card0 PRIMARY_ DEVICE_ FOR_DISPLAY= 1
... is *NOT* valid. What this condition is asking Upstart to do is match on an event whose first _positional_ environment variable *exactly matches* the string 'card0' and which also has an environment variable called 'PRIMARY_ DEVICE_ FOR_DISPLAY' with value '1'.
However, if you look at /var/log/udev:
$ awk 'BEGIN{ RS="";ORS= "\n\n"} ; /UDEV *\[/ && /PRIMARY_ DEVICE_ FOR_DISPLAY= 1/ { print; }' /var/log/udev pci0000: 00/0000: 00:01.0/ 0000:01: 00.0/drm/ card0 (drm) /dev/dri/ card0 /devices/ pci0000: 00/0000: 00:01.0/ 0000:01: 00.0/drm/ card0 DEVICE_ FOR_DISPLAY= 1 D=34559916
UDEV [34.559987] add /devices/
ACTION=add
DEVNAME=
DEVPATH=
DEVTYPE=drm_minor
MAJOR=226
MINOR=0
PRIMARY_
SEQNUM=2231
SUBSYSTEM=drm
TAGS=:udev-acl:
UDEV_LOG=3
USEC_INITIALIZE
$
... you'll see that there are no variables that exactly match 'card0'! The fix is as simple as adding an asterisk to perform a wild-card match:
drm-device-added *card0 PRIMARY_ DEVICE_ FOR_DISPLAY= 1
However, my preference would to make our intent explicit and say:
drm-device-added DEVPATH=*card0 PRIMARY_ DEVICE_ FOR_DISPLAY= 1
This would protect against a change to the way the upstart-udev-bridge handles udev environment variable ordering and is much easier to understand.
@serge - could you add the missing asterisk and report back?