From c28fa3d32fe0989c286d04406414bb7ef58dab9a Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Tue, 28 Jun 2011 21:54:52 +0200 Subject: [PATCH] logind: include subsystem name in device id for assigning seats --- src/71-seat.rules | 1 + src/73-seat-late.rules | 2 +- src/logind-dbus.c | 11 ++++++----- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/71-seat.rules b/src/71-seat.rules index d6437b02..c564bac3 100644 --- a/src/71-seat.rules +++ b/src/71-seat.rules @@ -16,5 +16,6 @@ SUBSYSTEM=="usb", ATTR{bDeviceClass}=="09", TAG+="seat" SUBSYSTEM=="usb", ATTR{idVendor}=="2230", ATTR{idProduct}=="0001", ENV{ID_AUTOSEAT}="1" TAG=="seat", ENV{ID_PATH}=="", IMPORT{program}="path_id %p" +TAG=="seat", ENV{ID_FOR_SEAT}=="", ENV{ID_PATH}!="", ENV{ID_FOR_SEAT}="$env{SUBSYSTEM}-$env{ID_PATH}" LABEL="seat_end" diff --git a/src/73-seat-late.rules b/src/73-seat-late.rules index f9436d0a..2b4bed22 100644 --- a/src/73-seat-late.rules +++ b/src/73-seat-late.rules @@ -8,7 +8,7 @@ ACTION=="remove", GOTO="seat_late_end" TAG!="seat", GOTO="seat_late_end" -ENV{ID_SEAT}=="", ENV{ID_AUTOSEAT}=="1", ENV{ID_PATH}!="", ENV{ID_SEAT}="seat-$env{ID_PATH}" +ENV{ID_SEAT}=="", ENV{ID_AUTOSEAT}=="1", ENV{ID_FOR_SEAT}!="", ENV{ID_SEAT}="seat-$env{ID_FOR_SEAT}" ENV{ID_SEAT}=="", IMPORT{parent}="ID_SEAT" ENV{ID_SEAT}!="", TAG+="$env{ID_SEAT}" diff --git a/src/logind-dbus.c b/src/logind-dbus.c index 1ed99c0a..91f30320 100644 --- a/src/logind-dbus.c +++ b/src/logind-dbus.c @@ -553,7 +553,7 @@ static bool device_has_tag(struct udev_device *d, const char *tag) { static int attach_device(Manager *m, const char *seat, const char *sysfs) { struct udev_device *d; char *rule = NULL, *file = NULL; - const char *path; + const char *id_for_seat; int r; assert(m); @@ -569,22 +569,23 @@ static int attach_device(Manager *m, const char *seat, const char *sysfs) { goto finish; } - path = udev_device_get_property_value(d, "ID_PATH"); - if (!path) { + id_for_seat = udev_device_get_property_value(d, "ID_FOR_SEAT"); + if (!id_for_seat) { r = -ENODEV; goto finish; } - if (asprintf(&file, "/etc/udev/rules.d/72-seat-%s.rules", path) < 0) { + if (asprintf(&file, "/etc/udev/rules.d/72-seat-%s.rules", id_for_seat) < 0) { r = -ENOMEM; goto finish; } - if (asprintf(&rule, "TAG==\"seat\", ID_PATH==\"%s\", ID_SEAT=\"%s\"", path, seat) < 0) { + if (asprintf(&rule, "TAG==\"seat\", ENV{ID_FOR_SEAT}==\"%s\", ENV{ID_SEAT}=\"%s\"", id_for_seat, seat) < 0) { r = -ENOMEM; goto finish; } + mkdir_p("/etc/udev/rules.d", 0755); r = write_one_line_file(file, rule); finish: -- 2.39.5