Это контекст: я использую Debian GNU / Linux и регулярно переключаюсь с окружением рабочего стола (далее «DE»).
Мой вопрос прост: я хочу знать, какие операции, системные вызовы или даже функции используются при нажатии клавиши «Print Screen» на клавиатуре.
Меняется ли путь с DE? То есть Используют ли Mate, Gnome, KDE, LXDE или Xfce (и т. д.) определенный вызов их собственного кода или существует общий системный вызов?
Я думаю, что ответ (если есть) не относительный к Debian, а скорее X или Wayland, не так ли?
Заранее благодарю за советы и ответы 🙂
PS: Я уточнил, что прочитал хорошую часть исходного кода X lib, но не нашел ничего полезного.
Сам экран печати определенно не является системным вызовом, но демон ядра, который получает нажатия клавиш, определенно вызывает выполнение подпрограммы, использующей то, что вы бы назвали «системным вызовом». Я помещаю это в кавычки, потому что printscreen, вероятно, вызывает запуск программы, которая уже находится в пространстве ядра, что означает, что не будет никаких системных вызовов к ядру, поскольку вы уже там (если оконный менеджер фактически не выполняется в пространстве пользователя). , что не так для Mac OSX или Windows, и я предполагаю, что для Linux).
Как это работает? Это, вероятно, работает путем копирования текущего дисплея из экранного буфера (область оперативной памяти, которая является DMA’d для вашей видеокарты), а затем преобразование представления пикселей в битовую карту.
Основной принцип можно найти в инструмент xwd.
Код не так уж плох для чтения. В простом сценарии он использовал XGetImage
, но если экран имеет несколько визуальных областей, он становится более сложным, но основной принцип заключается в использовании XGetPixel
чтобы получить пиксели экрана и XPutPixel
хранить во временном изображении.
Что происходит, когда вы нажимаете PrtScrn
это то же самое, за исключением того, что может запускаться какое-то другое приложение. Какое приложение зависит от того, какой графический пакет находится в дистрибутиве (Gnome, KDE, Unity и т. Д.). Но внутри они будут делать что-то очень похожее.
Редактировать:
Как указывает Питер, если система управления окнами «компонует» (то есть каждое окно рисует свой собственный контент вне экрана, а графическое оборудование объединяет вывод посредством композиции), то снимок экрана требуется, чтобы попросить систему композиции: сделать вывод за пределы экрана, а затем скопировать его.