summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2011-06-28 21:54:52 +0200
committerLennart Poettering <lennart@poettering.net>2011-06-28 21:54:52 +0200
commitc28fa3d32fe0989c286d04406414bb7ef58dab9a (patch)
tree14bb268a026c8ff1a75d02dd5161202d58942d94
parent47a2669062882d1b4ed6ae3c7b8926e09f2a978e (diff)
logind: include subsystem name in device id for assigning seats
-rw-r--r--src/71-seat.rules1
-rw-r--r--src/73-seat-late.rules2
-rw-r--r--src/logind-dbus.c11
3 files changed, 8 insertions, 6 deletions
diff --git a/src/71-seat.rules b/src/71-seat.rules
index d6437b024c..c564bac3f1 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 f9436d0ae4..2b4bed22f5 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 1ed99c0aa7..91f30320c6 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: