summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2012-05-31 01:19:11 +0200
committerLennart Poettering <lennart@poettering.net>2012-05-31 01:20:37 +0200
commitd7e1c95e0a22eb1ada8ad53dab3af5fec2af1d0c (patch)
tree4889393b67da97ea4e7801ca003d9dae78a05567
parentda5d4bf64f96d21c664bc6fea37f4f28927beb2c (diff)
login: properly detect MIMO USB displays
MIMO USB displays use a generic VID/PID for the hub component. With a bit of trickery we can detect them by the VID/PID of the graphics component.
-rw-r--r--Makefile.am4
-rw-r--r--TODO3
-rw-r--r--src/login/.gitignore1
-rw-r--r--src/login/71-seat.rules25
-rw-r--r--src/login/71-seat.rules.in46
5 files changed, 50 insertions, 29 deletions
diff --git a/Makefile.am b/Makefile.am
index 015640f535..e6d99503f1 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -2883,10 +2883,10 @@ rootlibexec_PROGRAMS += \
dist_udevrules_DATA += \
src/login/70-uaccess.rules \
- src/login/71-seat.rules \
src/login/70-power-switch.rules
nodist_udevrules_DATA += \
+ src/login/71-seat.rules \
src/login/73-seat-late.rules
MANPAGES += \
@@ -2943,12 +2943,14 @@ EXTRA_DIST += \
src/login/logind-gperf.gperf \
src/login/libsystemd-login.pc.in \
src/login/libsystemd-login.sym \
+ src/login/71-seat.rules.in \
src/login/73-seat-late.rules.in \
units/systemd-logind.service.in \
units/systemd-user-sessions.service.in
CLEANFILES += \
src/login/logind-gperf.c \
+ src/login/71-seat.rules \
src/login/73-seat-late.rules
endif
# ------------------------------------------------------------------------------
diff --git a/TODO b/TODO
index 44dc7bc19a..56cf0b8200 100644
--- a/TODO
+++ b/TODO
@@ -1,5 +1,4 @@
Fedora 18:
-* fix mimo VID/PID check that claims "innocent" hubs
* chrony/ntp target?
Bugfixes:
@@ -51,8 +50,6 @@ Features:
- implement .d/ auto includes for unit files
- add syntax to reset ExecStart= lists (and similar)
-* properly detect mimo devices, the current VID/PID check is too broad
-
* manipulate CPU governor during boot, set it to performance
* steal SBF management from the kernel
diff --git a/src/login/.gitignore b/src/login/.gitignore
index 6fb49e5ace..d3840c7afc 100644
--- a/src/login/.gitignore
+++ b/src/login/.gitignore
@@ -1,4 +1,5 @@
/libsystemd-login.pc
/logind-gperf.c
/org.freedesktop.login1.policy
+/71-seat.rules
/73-seat-late.rules
diff --git a/src/login/71-seat.rules b/src/login/71-seat.rules
deleted file mode 100644
index 3f07ca1695..0000000000
--- a/src/login/71-seat.rules
+++ /dev/null
@@ -1,25 +0,0 @@
-# This file is part of systemd.
-#
-# systemd is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as published by
-# the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
-
-ACTION=="remove", GOTO="seat_end"
-
-TAG=="uaccess", SUBSYSTEM!="sound", TAG+="seat"
-SUBSYSTEM=="sound", KERNEL=="card*", TAG+="seat"
-SUBSYSTEM=="input", KERNEL=="input*", TAG+="seat"
-SUBSYSTEM=="graphics", KERNEL=="fb[0-9]*", TAG+="seat"
-SUBSYSTEM=="usb", ATTR{bDeviceClass}=="09", TAG+="seat"
-
-# 'Plugable' USB hub, sound, network, graphics adapter
-SUBSYSTEM=="usb", ATTR{idVendor}=="2230", ATTR{idProduct}=="000[13]", ENV{ID_AUTOSEAT}="1"
-
-# Mimo 720, with integrated USB hub, displaylink graphics, and e2i touchscreen
-SUBSYSTEM=="usb", ATTR{idVendor}=="058f", ATTR{idProduct}=="6254", ENV{ID_AUTOSEAT}="1"
-
-TAG=="seat", ENV{ID_PATH}=="", IMPORT{builtin}="path_id"
-TAG=="seat", ENV{ID_FOR_SEAT}=="", ENV{ID_PATH_TAG}!="", ENV{ID_FOR_SEAT}="$env{SUBSYSTEM}-$env{ID_PATH_TAG}"
-
-LABEL="seat_end"
diff --git a/src/login/71-seat.rules.in b/src/login/71-seat.rules.in
new file mode 100644
index 0000000000..03005b6f1c
--- /dev/null
+++ b/src/login/71-seat.rules.in
@@ -0,0 +1,46 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+ACTION=="remove", GOTO="seat_end"
+
+TAG=="uaccess", SUBSYSTEM!="sound", TAG+="seat"
+SUBSYSTEM=="sound", KERNEL=="card*", TAG+="seat"
+SUBSYSTEM=="input", KERNEL=="input*", TAG+="seat"
+SUBSYSTEM=="graphics", KERNEL=="fb[0-9]*", TAG+="seat"
+SUBSYSTEM=="usb", ATTR{bDeviceClass}=="09", TAG+="seat"
+
+# 'Plugable' USB hub, sound, network, graphics adapter
+SUBSYSTEM=="usb", ATTR{idVendor}=="2230", ATTR{idProduct}=="000[13]", ENV{ID_AUTOSEAT}="1"
+
+# Mimo 720, with integrated USB hub, displaylink graphics, and e2i
+# touchscreen. This device carries no proper VID/PID in the USB hub,
+# but it does carry good ID data in the graphics component, hence we
+# check it from the parent. There's a bit of a race here however,
+# given that the child devices might not exist yet at the time this
+# rule is executed. To work around this we'll trigger the parent from
+# the child if we notice that the parent wasn't recognized yet.
+
+# Match parent
+SUBSYSTEM=="usb", ATTR{idVendor}=="058f", ATTR{idProduct}=="6254", \
+ ATTR{%k.2/idVendor}=="17e9", ATTR{%k.2/idProduct}=="401a", ATTR{%k.2/product}=="mimo inc", \
+ ENV{ID_AUTOSEAT}="1", ENV{ID_AVOID_LOOP}="1"
+
+# Match child, look for parent's ID_AVOID_LOOP
+SUBSYSTEM=="usb", ATTR{idVendor}=="17e9", ATTR{idProduct}=="401a", ATTR{product}=="mimo inc", \
+ ATTR{../idVendor}=="058f", ATTR{../idProduct}=="6254", \
+ IMPORT{parent}="ID_AVOID_LOOP"
+
+# Match child, retrigger parent
+SUBSYSTEM=="usb", ATTR{idVendor}=="17e9", ATTR{idProduct}=="401a", ATTR{product}=="mimo inc", \
+ ATTR{../idVendor}=="058f", ATTR{../idProduct}=="6254", \
+ ENV{ID_AVOID_LOOP}=="", \
+ RUN+="@bindir@/udevadm trigger --parent-match=%p/.."
+
+TAG=="seat", ENV{ID_PATH}=="", IMPORT{builtin}="path_id"
+TAG=="seat", ENV{ID_FOR_SEAT}=="", ENV{ID_PATH_TAG}!="", ENV{ID_FOR_SEAT}="$env{SUBSYSTEM}-$env{ID_PATH_TAG}"
+
+LABEL="seat_end"