71-seat.rules 3.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. # SPDX-License-Identifier: LGPL-2.1+
  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. ACTION=="remove", GOTO="seat_end"
  10. TAG=="uaccess", SUBSYSTEM!="sound", TAG+="seat"
  11. SUBSYSTEM=="sound", KERNEL=="card*", TAG+="seat"
  12. SUBSYSTEM=="input", KERNEL=="input*", TAG+="seat"
  13. SUBSYSTEM=="graphics", KERNEL=="fb[0-9]*", TAG+="seat"
  14. # Assign keyboard and LCD backlights to the seat
  15. SUBSYSTEM=="leds", TAG+="seat"
  16. SUBSYSTEM=="backlight", TAG+="seat"
  17. # HyperV currently doesn't do DRM, hence we need to synthesize for HyperV's fb device instead
  18. SUBSYSTEM=="graphics", KERNEL=="fb[0-9]", DRIVERS=="hyperv_fb", TAG+="master-of-seat"
  19. # Allow efifb / uvesafb to be a master if KMS is disabled
  20. SUBSYSTEM=="graphics", KERNEL=="fb[0-9]", IMPORT{cmdline}="nomodeset", TAG+="master-of-seat"
  21. # Allow any PCI graphics device to be a master and synthesize a seat if KMS
  22. # is disabled and the kernel doesn't have a driver that would work with this device.
  23. SUBSYSTEM=="pci", ENV{ID_PCI_CLASS_FROM_DATABASE}=="Display controller", \
  24. ENV{DRIVER}=="", IMPORT{cmdline}="nomodeset", TAG+="seat", TAG+="master-of-seat"
  25. SUBSYSTEM=="drm", KERNEL=="card[0-9]*", TAG+="seat", TAG+="master-of-seat"
  26. SUBSYSTEM=="usb", ATTR{bDeviceClass}=="09", TAG+="seat"
  27. # 'Plugable' USB hub, sound, network, graphics adapter
  28. SUBSYSTEM=="usb", ATTR{idVendor}=="2230", ATTR{idProduct}=="000[13]", ENV{ID_AUTOSEAT}="1"
  29. # qemu (version 2.4+) has a PCI-PCI bridge (-device pci-bridge-seat) to group
  30. # devices belonging to one seat. See:
  31. # http://git.qemu.org/?p=qemu.git;a=blob;f=docs/multiseat.txt
  32. SUBSYSTEM=="pci", ATTR{vendor}=="0x1b36", ATTR{device}=="0x000a", TAG+="seat", ENV{ID_AUTOSEAT}="1"
  33. # Video adapter of Parallels virtualization platform
  34. # Seat should be synthesized for it. But there's no in-kernel driver for this
  35. # device so matching by vid/pid.
  36. SUBSYSTEM=="pci", ATTRS{vendor}=="0x1ab8", ATTRS{device}=="0x4005", TAG+="seat", TAG+="master-of-seat"
  37. # Mimo 720, with integrated USB hub, displaylink graphics, and e2i
  38. # touchscreen. This device carries no proper VID/PID in the USB hub,
  39. # but it does carry good ID data in the graphics component, hence we
  40. # check it from the parent. There's a bit of a race here however,
  41. # given that the child devices might not exist yet at the time this
  42. # rule is executed. To work around this we'll trigger the parent from
  43. # the child if we notice that the parent wasn't recognized yet.
  44. # Match parent
  45. SUBSYSTEM=="usb", ATTR{idVendor}=="058f", ATTR{idProduct}=="6254", \
  46. ATTR{%k.2/idVendor}=="17e9", ATTR{%k.2/idProduct}=="401a", ATTR{%k.2/product}=="mimo inc", \
  47. ENV{ID_AUTOSEAT}="1", ENV{ID_AVOID_LOOP}="1"
  48. # Match child, look for parent's ID_AVOID_LOOP
  49. SUBSYSTEM=="usb", ATTR{idVendor}=="17e9", ATTR{idProduct}=="401a", ATTR{product}=="mimo inc", \
  50. ATTR{../idVendor}=="058f", ATTR{../idProduct}=="6254", \
  51. IMPORT{parent}="ID_AVOID_LOOP"
  52. # Match child, retrigger parent
  53. SUBSYSTEM=="usb", ATTR{idVendor}=="17e9", ATTR{idProduct}=="401a", ATTR{product}=="mimo inc", \
  54. ATTR{../idVendor}=="058f", ATTR{../idProduct}=="6254", \
  55. ENV{ID_AVOID_LOOP}=="", \
  56. RUN+="/bin/udevadm trigger --parent-match=%p/.."
  57. TAG=="seat", ENV{ID_PATH}=="", IMPORT{builtin}="path_id"
  58. TAG=="seat", ENV{ID_FOR_SEAT}=="", ENV{ID_PATH_TAG}!="", ENV{ID_FOR_SEAT}="$env{SUBSYSTEM}-$env{ID_PATH_TAG}"
  59. SUBSYSTEM=="input", ATTR{name}=="Wiebetech LLC Wiebetech", RUN+="/bin/loginctl lock-sessions"
  60. LABEL="seat_end"