udev: String substitutions can be done in ENV, too
[systemd_ALT.git] / rules.d / 71-seat.rules.in
blob25e4ee7e589377ad659d5eb415f7d01408ab1ad7
1 #  SPDX-License-Identifier: LGPL-2.1-or-later
3 #  This file is part of systemd.
5 #  systemd is free software; you can redistribute it and/or modify it
6 #  under the terms of the GNU Lesser General Public License as published by
7 #  the Free Software Foundation; either version 2.1 of the License, or
8 #  (at your option) any later version.
10 ACTION=="remove", GOTO="seat_end"
12 TAG=="uaccess", SUBSYSTEM!="sound", TAG+="seat"
13 SUBSYSTEM=="sound", KERNEL=="card*", TAG+="seat"
14 SUBSYSTEM=="input", KERNEL=="input*", TAG+="seat"
15 SUBSYSTEM=="graphics", KERNEL=="fb[0-9]*", TAG+="seat"
17 # Assign keyboard and LCD backlights to the seat
18 SUBSYSTEM=="leds", TAG+="seat"
19 SUBSYSTEM=="backlight", TAG+="seat"
21 # Allow efifb / uvesafb to be a master if KMS is disabled
22 SUBSYSTEM=="graphics", KERNEL=="fb[0-9]", IMPORT{cmdline}="nomodeset", TAG+="master-of-seat"
24 # Allow any PCI graphics device to be a master and synthesize a seat if KMS
25 # is disabled and the kernel doesn't have a driver that would work with this device.
26 SUBSYSTEM=="pci", ENV{ID_PCI_CLASS_FROM_DATABASE}=="Display controller", \
27                   ENV{DRIVER}=="", IMPORT{cmdline}="nomodeset", TAG+="seat", TAG+="master-of-seat"
29 # Synthesize a seat for graphic devices without DRM and that fall back to fb
30 # device instead. Such HWs are listed in hwdb.
31 SUBSYSTEM=="graphics", KERNEL=="fb[0-9]*", ATTRS{modalias}=="?*", IMPORT{builtin}="hwdb fb:$attr{modalias}"
32 ENV{ID_TAG_MASTER_OF_SEAT}=="1", TAG+="master-of-seat"
34 SUBSYSTEM=="drm", KERNEL=="card[0-9]*", TAG+="seat", TAG+="master-of-seat"
36 # Allow individual USB ports to be assigned to a seat
37 SUBSYSTEM=="usb", ATTR{bDeviceClass}=="00", TAG+="seat"
39 # Allow USB hubs (and all downstream ports) to be assigned to a seat
40 SUBSYSTEM=="usb", ATTR{bDeviceClass}=="09", TAG+="seat"
42 # 'Plugable' USB hub, sound, network, graphics adapter
43 SUBSYSTEM=="usb", ATTR{idVendor}=="2230", ATTR{idProduct}=="000[13]", ENV{ID_AUTOSEAT}="1"
45 # qemu (version 2.4+) has a PCI-PCI bridge (-device pci-bridge-seat) to group
46 # devices belonging to one seat. See:
47 #     http://git.qemu.org/?p=qemu.git;a=blob;f=docs/multiseat.txt
48 SUBSYSTEM=="pci", ATTR{vendor}=="0x1b36", ATTR{device}=="0x000a", TAG+="seat", ENV{ID_AUTOSEAT}="1"
50 # Mimo 720, with integrated USB hub, displaylink graphics, and e2i
51 # touchscreen. This device carries no proper VID/PID in the USB hub,
52 # but it does carry good ID data in the graphics component, hence we
53 # check it from the parent. There's a bit of a race here however,
54 # given that the child devices might not exist yet at the time this
55 # rule is executed. To work around this we'll trigger the parent from
56 # the child if we notice that the parent wasn't recognized yet.
58 # Match parent
59 {% raw -%}
60 SUBSYSTEM=="usb", ATTR{idVendor}=="058f", ATTR{idProduct}=="6254", \
61                   ATTR{%k.2/idVendor}=="17e9", ATTR{%k.2/idProduct}=="401a", ATTR{%k.2/product}=="mimo inc", \
62                   ENV{ID_AUTOSEAT}="1", ENV{ID_AVOID_LOOP}="1"
63 {% endraw %}
65 # Match child, look for parent's ID_AVOID_LOOP
66 SUBSYSTEM=="usb", ATTR{idVendor}=="17e9", ATTR{idProduct}=="401a", ATTR{product}=="mimo inc", \
67                   ATTR{../idVendor}=="058f", ATTR{../idProduct}=="6254", \
68                   IMPORT{parent}="ID_AVOID_LOOP"
70 # Match child, retrigger parent
71 SUBSYSTEM=="usb", ATTR{idVendor}=="17e9", ATTR{idProduct}=="401a", ATTR{product}=="mimo inc", \
72                   ATTR{../idVendor}=="058f", ATTR{../idProduct}=="6254", \
73                   ENV{ID_AVOID_LOOP}=="", \
74                   RUN+="{{ROOTBINDIR}}/udevadm trigger --parent-match=%p/.."
76 TAG=="seat", ENV{ID_PATH}=="", IMPORT{builtin}="path_id"
77 TAG=="seat", ENV{ID_FOR_SEAT}=="", ENV{ID_PATH_TAG}!="", ENV{ID_FOR_SEAT}="$env{SUBSYSTEM}-$env{ID_PATH_TAG}"
79 SUBSYSTEM=="input", ATTR{name}=="Wiebetech LLC Wiebetech", RUN+="{{ROOTBINDIR}}/loginctl lock-sessions"
81 LABEL="seat_end"