From 99376d38f69f6bcc13d7a8ebdb679b7c18e30586 Mon Sep 17 00:00:00 2001 From: Nerdopolis Turfwalker Date: Thu, 5 Apr 2018 19:47:15 +0200 Subject: [PATCH] udev: Only handle devices from the current seat Summary: This prevents the firstFound device, or any device detected by UdevEnumerate::find that is not from the same seat kwin is running under, from being handled Test Plan: made sure that kwin starts on a default udev (assuming a blank ID_SEAT attribute on a device means the device is on seat0) added /dev/dri/card1 to seat1 and /dev/dri/card0 to seat0. Start kwin with the drm-backend on seat0 and seat1, and make sure it starts on both instances Reviewers: #kwin, graesslin Reviewed By: #kwin, graesslin Subscribers: rkflx, graesslin, kwin, #kwin Tags: #kwin Differential Revision: https://phabricator.kde.org/D9553 --- udev.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/udev.cpp b/udev.cpp index e3b2406c3b..f064b089b6 100644 --- a/udev.cpp +++ b/udev.cpp @@ -18,6 +18,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . *********************************************************************/ #include "udev.h" +#include "logind.h" // Qt #include #include @@ -106,6 +107,7 @@ UdevDevice::Ptr UdevEnumerate::find(std::functionproperty("ID_SEAT"); + if (deviceSeat.isEmpty()) { + deviceSeat = defaultSeat; + } + if (deviceSeat != LogindIntegration::self()->seat()) { + continue; + } if (test(device)) { return device; } @@ -135,7 +144,6 @@ UdevDevice::Ptr Udev::primaryGpu() enumerate.addMatch(UdevEnumerate::Match::SysName, "card[0-9]*"); enumerate.scan(); return enumerate.find([](const UdevDevice::Ptr &device) { - // TODO: check seat auto pci = device->getParentWithSubsystemDevType("pci"); if (!pci) { return false;