Возможный дубликат:
Как получить данные в фоновом процессе в Ubuntu
Я пишу программу, которая отслеживает нажатия клавиш на клавиатуре. Но моя программа может работать на переднем плане или в фоновом режиме. Я слышал, что существует системный вызов, специфичный для ОС, который позволяет программисту отслеживать активность клавиатуры, даже когда программа, выполняющая системный вызов, находится в фоновом режиме. Я новичок в программировании на Ubuntu, поэтому, пожалуйста, кто-нибудь, скажите мне, что это за системный вызов ОС.
Замечания:
Эта программа предназначена исключительно для образовательных целей. Это часть школьного проекта.
С уважением
Большинство систем Ubuntu (по крайней мере, настольные для начинающих пользователей Ubuntu) работают X11 сервер окна (как Xorg). Этот сервер (только) получает необработанные вводы с клавиатуры и мыши. Он обрабатывает их, чтобы доставить События протокола X11 клиентским приложениям (например, вашему браузеру Firefox или вашему emacs
редактор, или ваш гном или xterm
Терминал).
Вы могли бы потратить свое время (месяцы) на понимание всех из них (возможно, начиная с FreedesktopВы также можете переключиться на другой проект, возможно, просто написать интересное приложение с графическим интерфейсом, используя Gtk (внутри Гнома) или Qt (в KDE). Все библиотеки графических инструментов Linux построены над библиотекой, взаимодействующей с протоколом X11, обычно Xlib, или же XCB.
Если вы хотите начать изучать программирование на Linux, прочитайте Расширенное программирование Unix а также Расширенное программирование в Linux. После этого потребуется много времени, чтобы понять тайны TTY-и познакомиться с Системные вызовы (2). Затем ознакомьтесь с графическим инструментарием, таким как Qt или GTK.
И тогда вы просто начнете понимать, как трудно ответить именно на ваш злополучный и подозрительный вопрос. (ответ сильно зависит от точки зрения — Xorg
видеть другие ключевые события, чем другие приложения, особенно X-клиенты, и это очень сложно).
Как только вы поймете все концепции в ссылках, которые я вам дал, вы сможете более точно задать свой вопрос. Когда вы повторно зададите свой вопрос в более точных и технических терминах (в частности, объясните, на каком уровне вы хотите контролировать клавиатуру) & мыши), показывая код, который вы экспериментировали, мы сможем (и готовы) ответить вам.
слышал, что есть ОС специфичный системный вызовОт кого ты это слышал? Вы спрашивали их?
Это требует более одного звонка, вам нужно использовать ioctl
(может отличаться в Ubuntu), чтобы протолкнуть ваш регистратор в поток терминала. Это не просто и не очень подходит для начинающего проекта. Например, см. script
программа.
Существует программа для Linux, которая связывает глобальные горячие клавиши и выполняет предварительно определенные действия при нажатии клавиш. Это называется xbindkeys
, Посмотрите в его исходном коде предложение или просто используйте его как есть.