1# SPDX-License-Identifier: LGPL-2.1-or-later 2# 3# This file is part of systemd. 4# 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. 9 10ACTION=="remove", GOTO="seat_end" 11 12TAG=="uaccess", SUBSYSTEM!="sound", TAG+="seat" 13SUBSYSTEM=="sound", KERNEL=="card*", TAG+="seat" 14SUBSYSTEM=="input", KERNEL=="input*", TAG+="seat" 15SUBSYSTEM=="graphics", KERNEL=="fb[0-9]*", TAG+="seat" 16 17# Assign keyboard and LCD backlights to the seat 18SUBSYSTEM=="leds", TAG+="seat" 19SUBSYSTEM=="backlight", TAG+="seat" 20 21# Allow efifb / uvesafb to be a master if KMS is disabled 22SUBSYSTEM=="graphics", KERNEL=="fb[0-9]", IMPORT{cmdline}="nomodeset", TAG+="master-of-seat" 23 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. 26SUBSYSTEM=="pci", ENV{ID_PCI_CLASS_FROM_DATABASE}=="Display controller", \ 27 ENV{DRIVER}=="", IMPORT{cmdline}="nomodeset", TAG+="seat", TAG+="master-of-seat" 28 29# Synthesize a seat for graphic devices without DRM and that fall back to fb 30# device instead. Such HWs are listed in hwdb. 31SUBSYSTEM=="graphics", KERNEL=="fb[0-9]*", ATTRS{modalias}=="?*", IMPORT{builtin}="hwdb fb:$attr{modalias}" 32ENV{ID_TAG_MASTER_OF_SEAT}=="1", TAG+="master-of-seat" 33 34SUBSYSTEM=="drm", KERNEL=="card[0-9]*", TAG+="seat", TAG+="master-of-seat" 35 36# Allow individual USB ports to be assigned to a seat 37SUBSYSTEM=="usb", ATTR{bDeviceClass}=="00", TAG+="seat" 38 39# Allow USB hubs (and all downstream ports) to be assigned to a seat 40SUBSYSTEM=="usb", ATTR{bDeviceClass}=="09", TAG+="seat" 41 42# 'Plugable' USB hub, sound, network, graphics adapter 43SUBSYSTEM=="usb", ATTR{idVendor}=="2230", ATTR{idProduct}=="000[13]", ENV{ID_AUTOSEAT}="1" 44 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 48SUBSYSTEM=="pci", ATTR{vendor}=="0x1b36", ATTR{device}=="0x000a", TAG+="seat", ENV{ID_AUTOSEAT}="1" 49 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. 57 58# Match parent 59{% raw -%} 60SUBSYSTEM=="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 %} 64 65# Match child, look for parent's ID_AVOID_LOOP 66SUBSYSTEM=="usb", ATTR{idVendor}=="17e9", ATTR{idProduct}=="401a", ATTR{product}=="mimo inc", \ 67 ATTR{../idVendor}=="058f", ATTR{../idProduct}=="6254", \ 68 IMPORT{parent}="ID_AVOID_LOOP" 69 70# Match child, retrigger parent 71SUBSYSTEM=="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/.." 75 76TAG=="seat", ENV{ID_PATH}=="", IMPORT{builtin}="path_id" 77TAG=="seat", ENV{ID_FOR_SEAT}=="", ENV{ID_PATH_TAG}!="", ENV{ID_FOR_SEAT}="$env{SUBSYSTEM}-$env{ID_PATH_TAG}" 78 79SUBSYSTEM=="input", ATTR{name}=="Wiebetech LLC Wiebetech", RUN+="{{ROOTBINDIR}}/loginctl lock-sessions" 80 81LABEL="seat_end" 82