в Linux как узнать, какое приложение / processid получает ввод с клавиатуры / мыши? - PullRequest
0 голосов
/ 16 мая 2018

Я работаю над проектом Linux. Я застрял в точке, где мне нужно знать, какое приложение / processid получает ввод с клавиатуры / мыши. Я имею в виду, что привязка должна храниться где-то. Кто-нибудь может мне помочь? Редактировать 1: я работаю над проектом захвата событий клавиатуры / мыши. Я нашел logkeys (проект) полезным. Мне нужно найти имя приложения, в которое пользователь вводит данные вместе с нажатыми клавишами Изменить 2: Я использую CentOS 7. XDG_SESSION_DESKTOP = gnome-classic. GDMSESSION = гномик-классик.

Ответы [ 2 ]

0 голосов
/ 16 мая 2018

Мне нужно знать, какое приложение / 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.

0 голосов
/ 16 мая 2018

Ядро Linux отвечает за получение событий от физической клавиатуры или мыши, а не от какого-либо конкретного приложения.И тогда события передаются активному приложению.Так что ищите драйверы для клавиатуры и мыши в исходниках ядра.

...