Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Программирование под Unix/Linux > Перехват хоткеев до X11 |
Автор: _GRIN_ 11.11.2009, 18:29 |
Здравствуйте. Пишу программу, которая должна работать как банкомат - т.е. в полноэкранном режиме и не допускать пользователя (за исключением админа) к каким либо средствам ОС (включая терминалы). Программа запускается как демон. ОС Линукс (Мандрива). Облочка - гном. С перехватом хоткеев возникла проблема. Если то что присылает X11 я ещё могу прехватить до оконного мэнеджера (гном), то с переключением терминалов - не получается. Поясняю (Alt+F4, Alt+F2, Ctrl+Alt+D - могу, а вот Ctrl+Alt+F3 к примеру - не могу). Подскажите, пожалуйста, в какую сторону копать. Заранее спасибо. |
Автор: vinick 11.11.2009, 23:25 |
ИМХО копать надо в сторону /etc/inittab и отключать там виртуальные консоли и ctrl-alt-del там же перехватывать. man inittab |
Автор: nickless 12.11.2009, 13:28 | ||
А почему бы просто не поодключать все эти хоткеи в конфиге иксов?
|
Автор: DrHex 12.11.2009, 14:29 |
модуль ядра, и хукать прерывания..... |
Автор: MAKCim 12.11.2009, 16:29 |
X читает event'ы из /dev/input/eventX остается разобраться с форматом вывода и структурой буфера |
Автор: Loki 12.11.2009, 16:52 |
хоткеи можно перехватить через XGrabKey() а как на счет принтскрина? как отменить? p.s. принтскрим можно сделать и мышкой. |
Автор: _GRIN_ 21.11.2009, 22:34 |
Cпасибо всем ![]() vinick, /etc/inittab - верно. Но к сожалению не получится менять "на лету" - нужна перезагрузка - способ рабочий, но к сожалению не совсем то, что хотелось бы получить. nickless, - тоже отличный способ. Проблема таже что и с /etc/inittab DrHex, "модуль ядра" - вы меня переоцениваете ![]() MAKCim, спасибо, вроде бы то что надо - буду копать - если накопаю - опишусь. Loki, к сожалению через XGrabKey не удастся перехватить уже забинденные комбинации. |
Автор: _GRIN_ 22.11.2009, 02:29 | ||
Копаю по посту MAKCim-а: судя по всему копать следует сюда: http://bec-systems.com/site/281/how-to-implement-an-interrupt-driven-gpio-input-in-linux Но собрать у меня пока не получилось. при компиляции такую кучу ошибок касательно путей к файлам выдаёт, что консоль всё не вмещает (выводил в файл и потом глядел). Ошибки с путями (у меня /usr/include/glib-2.0 - а в хидерах (находящихся в этих папках #include <glib/...> - причём есть файлы которых у меня вообще нет, например glibconfig.h
ну и после этого соответственно куча ошибок компиляции. Копаю дальше (попробую на ноуте под мандривой - на десктопе у меня сусь)... |
Автор: ir4y 22.11.2009, 07:58 |
Сталкивался с подобной проблемой... Решил следующим образом 1) в inittab отключил виртуальные консоли 2) в своей программе реализовал формочку для аутентификации... после успешной аутентификации открываеется xterm вот так ЗЫ как ты перехватывешь Alt+F4, Alt+F2, Ctrl+Alt+D ? |
Автор: _GRIN_ 24.11.2009, 11:30 | ||||
ir4y, вот функция:
key - клавиша mod - модификатор (Shift, Alt, Ctrl ...) capture - true: захватить комбинацию ; false: отпустить комбинацию пример использования:
Если комбинация уже захвачена (например оконным мэнеджером, то захватить её не удастся). Осводобить (XUngrabKey) можно только ту комбинацию, которую захватил сам. Больше про XGrabKey можно прочитать тут: http://tronche.com/gui/x/xlib/input/XGrabKey.html Примечание: проверь, есть ли у тебя файл /usr/include/X11/Xlib.h По умолчанию его может не быть, тогда тебе нужно будет установить *xorg-*devel* пакет Вот пакет установленный у меня (Mandriva 64-bit) lib64xorg-x11-devel-7.3-4mdv2009.0 |
Автор: green5 24.11.2009, 16:04 |
А чем XGrabKeyboard не устраивает? |
Автор: _GRIN_ 24.11.2009, 17:31 |
green5, XGrabKeyboard железно захватывает клавиатуру - спасибо ![]() Как сделать, что бы моё приложение (работающее в потоке парралельном потоку-перехватчику) получало ввод с клавиатуры - пока не знаю ![]() ![]() Всё вроде ясно по данной теме за исключением /dev/input/event0 горячего перехвата/отпускания Ctrl+Alt+F<x> и Ctrl+Alt+Del В текущий момент данные вопросы отложу. Всем спасибо, закрываю тему |