Trace / syscalls & quot; Экран печати & quot; процесс

Это контекст: я использую Debian GNU / Linux и регулярно переключаюсь с окружением рабочего стола (далее «DE»).
Мой вопрос прост: я хочу знать, какие операции, системные вызовы или даже функции используются при нажатии клавиши «Print Screen» на клавиатуре.

Меняется ли путь с DE? То есть Используют ли Mate, Gnome, KDE, LXDE или Xfce (и т. д.) определенный вызов их собственного кода или существует общий системный вызов?

Я думаю, что ответ (если есть) не относительный к Debian, а скорее X или Wayland, не так ли?

Заранее благодарю за советы и ответы 🙂

PS: Я уточнил, что прочитал хорошую часть исходного кода X lib, но не нашел ничего полезного.

0

Решение

Сам экран печати определенно не является системным вызовом, но демон ядра, который получает нажатия клавиш, определенно вызывает выполнение подпрограммы, использующей то, что вы бы назвали «системным вызовом». Я помещаю это в кавычки, потому что printscreen, вероятно, вызывает запуск программы, которая уже находится в пространстве ядра, что означает, что не будет никаких системных вызовов к ядру, поскольку вы уже там (если оконный менеджер фактически не выполняется в пространстве пользователя). , что не так для Mac OSX или Windows, и я предполагаю, что для Linux).

Как это работает? Это, вероятно, работает путем копирования текущего дисплея из экранного буфера (область оперативной памяти, которая является DMA’d для вашей видеокарты), а затем преобразование представления пикселей в битовую карту.

2

Другие решения

Основной принцип можно найти в инструмент xwd.

Код не так уж плох для чтения. В простом сценарии он использовал XGetImage, но если экран имеет несколько визуальных областей, он становится более сложным, но основной принцип заключается в использовании XGetPixel чтобы получить пиксели экрана и XPutPixel хранить во временном изображении.

Что происходит, когда вы нажимаете PrtScrn это то же самое, за исключением того, что может запускаться какое-то другое приложение. Какое приложение зависит от того, какой графический пакет находится в дистрибутиве (Gnome, KDE, Unity и т. Д.). Но внутри они будут делать что-то очень похожее.

Редактировать:

Как указывает Питер, если система управления окнами «компонует» (то есть каждое окно рисует свой собственный контент вне экрана, а графическое оборудование объединяет вывод посредством композиции), то снимок экрана требуется, чтобы попросить систему композиции: сделать вывод за пределы экрана, а затем скопировать его.

2

По вопросам рекламы [email protected]