Мне нужно знать, какое приложение / processid получает ввод с клавиатуры / мыши.
На практике на настольном компьютере (или ноутбуке) Linux это не имеет значения (см. Ниже, почему), если вы подумаете о физической клавиатуре и мыши.
На сервере Linux у вас часто нет физической клавиатуры.
На настольном компьютере или ноутбуке Linux, используемом каким-либо физическим лицом, у вас обычно есть сервер отображения (например, Xorg или Wayland ) для графического окружение рабочего стола (если вы не используете виртуальные консоли без GUI ). Этот сервер отображения обрабатывает (и читает с) физическую клавиатуру и мышь, поэтому (на практике) это единственный процесс, считывающий их. Проверьте с lsof (8) .
Конечно, сервер дисплея обрабатывает физические события клавиатуры и мыши и делает из них высокоуровневые сообщения, отправляемые некоторым клиентам и окну (с помощью некоторых оконный менеджер и управление focus ). Но как это происходит - это другой вопрос (и он сильно отличается, например, от Xorg и Wayland). Читайте также о составлении оконных менеджеров . Кстати, клиенты Xorg могут работать на удаленных машинах.
Машина Linux может управлять несколькими местами , то есть несколькими комбинациями экрана (ов) + клавиатура + мышь, каждая из которых используется другим физическим лицом. Тогда у вас может быть несколько серверов отображения.
Вы могли бы потратить месяцы или годы на изучение протоколов и архитектуры X11 . Документация тяжелая: много тысяч страниц (см. Также ICCCM & EWMH ). И вы также потратите много месяцев на изучение вейландских протоколов, если вам нужно.
Вам может потребоваться много лет работы (или даже всю жизнь) для вашего проекта . Накопленные программные уровни (сервер отображения, наборы инструментов GUI, диспетчер окон и т. Д.) Огромны, несколько десятков миллионов строк исходного кода.
См. Также этот ответ на очень похожий вопрос, а этот
Если вы используете gnome-classic
, ваш сервер отображения, безусловно, Xorg. Таким образом, ICCCM и EWMH применяются. Тогда вас могут заинтересовать _NET_WM_PID
и WM_CLIENT_MACHINE
в сочетании с обычными приемами для получения окна фокуса X11. Вы можете исправить обычные оконные менеджеры (и вам, вероятно, все еще нужно прочитать намного больше о X11, чтобы иметь возможность кодировать некоторые надежные реализации).
Не забывайте, что многие клиентские приложения X11 открывают несколько окон X11 верхнего уровня, а некоторые клиентские приложения X11 используют несколько дисплеев X11, поэтому несколько серверов дисплеев Xorg.