Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перехват хоткеев до X11, отключить переключение терминалов 
V
    Опции темы
_GRIN_
Дата 11.11.2009, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


одинокий падаван
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 18.11.2007
Где: Калуга

Репутация: нет
Всего: 7



Здравствуйте.
Пишу программу, которая должна работать как банкомат - т.е. в полноэкранном режиме и не допускать пользователя (за исключением админа) к каким либо средствам ОС (включая терминалы).
Программа  запускается как демон. ОС Линукс (Мандрива). Облочка - гном.
С перехватом хоткеев возникла проблема. Если то что присылает X11 я ещё могу прехватить до оконного мэнеджера (гном), то с переключением терминалов - не получается. Поясняю (Alt+F4, Alt+F2, Ctrl+Alt+D - могу,  а вот Ctrl+Alt+F3 к примеру - не могу).
Подскажите, пожалуйста, в какую сторону копать.

Заранее спасибо.

Это сообщение отредактировал(а) _GRIN_ - 11.11.2009, 18:30


--------------------
Дорогу осилит идущий
PM MAIL Skype   Вверх
vinick
Дата 11.11.2009, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 285
Регистрация: 9.6.2005

Репутация: 4
Всего: 22



ИМХО копать надо в сторону /etc/inittab и отключать там виртуальные консоли и ctrl-alt-del там же перехватывать.

man inittab
PM MAIL ICQ Jabber   Вверх
nickless
Дата 12.11.2009, 13:28 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гентозавр
****


Профиль
Группа: Участник Клуба
Сообщений: 2976
Регистрация: 29.8.2005
Где: Germany

Репутация: 4
Всего: 181



А почему бы просто не поодключать все эти хоткеи в конфиге иксов?
Код

Section "ServerFlags"

# Uncomment this to disable the <Ctrl><Alt><Fn> VT switch sequence
# (where n is 1 through 12).  This allows clients to receive these key
# events.

    Option      "DontVTSwitch"              "true"

# Uncomment this to disable the <Crtl><Alt><BS> server abort sequence
# This allows clients to receive this key event.

    Option      "DontZap"                 "true"

# Uncomment this to disable the <Crtl><Alt><KP_+>/<KP_-> mode switching
# sequences.  This allows clients to receive these key events.

    Option      "DontZoom"                  "true"

EndSection



--------------------
user posted image

Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies
- Linus Torvalds
PM MAIL   Вверх
DrHex
Дата 12.11.2009, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 2.5.2009

Репутация: нет
Всего: нет



модуль ядра, и хукать прерывания.....
--------------------
google.com и это все.
PM MAIL   Вверх
MAKCim
Дата 12.11.2009, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



X читает event'ы из /dev/input/eventX
остается разобраться с форматом вывода и структурой буфера


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Loki
Дата 12.11.2009, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 244
Регистрация: 9.7.2006

Репутация: нет
Всего: нет



хоткеи можно перехватить через XGrabKey()

а как на счет принтскрина? как отменить?
 
p.s. принтскрим можно сделать и мышкой.
PM MAIL   Вверх
_GRIN_
Дата 21.11.2009, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


одинокий падаван
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 18.11.2007
Где: Калуга

Репутация: нет
Всего: 7



Cпасибо всем smile за ваше участие. Я извиняюсь, что не однозначно сформулировал задачу. Необходимо иметь возможность включать и отключать перехват - Отключать для работы администратора.
vinick, /etc/inittab - верно. Но к сожалению не получится менять "на лету" - нужна перезагрузка - способ рабочий, но к сожалению не совсем то, что хотелось бы получить.
nickless, - тоже отличный способ. Проблема таже что и с /etc/inittab
DrHex, "модуль ядра" - вы меня переоцениваете  smile 
MAKCim,  спасибо, вроде бы то что надо - буду копать - если накопаю - опишусь.
Loki, к сожалению через XGrabKey не удастся перехватить уже забинденные комбинации.

Это сообщение отредактировал(а) _GRIN_ - 21.11.2009, 22:35


--------------------
Дорогу осилит идущий
PM MAIL Skype   Вверх
_GRIN_
Дата 22.11.2009, 02:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


одинокий падаван
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 18.11.2007
Где: Калуга

Репутация: нет
Всего: 7



Копаю по посту MAKCim-а:
судя по всему копать следует сюда: http://bec-systems.com/site/281/how-to-imp...-input-in-linux
Но собрать у меня пока не получилось. при компиляции такую кучу ошибок касательно путей к файлам выдаёт, что консоль всё не вмещает (выводил в файл и потом глядел). Ошибки с путями (у меня /usr/include/glib-2.0 - а в хидерах (находящихся в этих папках #include <glib/...> - причём есть файлы которых у меня вообще нет, например glibconfig.h
Цитата

/usr/include/glib/gtypes.h:34:24: error: glibconfig.h: Нет такого файла или каталога

ну и после этого соответственно куча ошибок компиляции.

Копаю дальше (попробую на ноуте под мандривой - на десктопе у меня сусь)...



--------------------
Дорогу осилит идущий
PM MAIL Skype   Вверх
ir4y
Дата 22.11.2009, 07:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 3.6.2008

Репутация: нет
Всего: нет



Сталкивался с подобной проблемой...
Решил следующим образом
1) в inittab отключил виртуальные консоли
2) в своей программе реализовал формочку для аутентификации...
после успешной аутентификации открываеется xterm
вот так


ЗЫ
как ты перехватывешь Alt+F4, Alt+F2, Ctrl+Alt+D ?
PM MAIL   Вверх
_GRIN_
Дата 24.11.2009, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


одинокий падаван
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 18.11.2007
Где: Калуга

Репутация: нет
Всего: 7



ir4y, вот функция:
Код

#include <X11/Xlib.h>
void captureHotKey(const char*key,int mod,bool capture)
{
    Display display=XOpenDisplay(0);
    Window window=DefaultRootWindow(display);
    int keyID=XKeysymToKeycode(display,XStringToKeysym(key));
    if(capture) {
        XGrabKey(display,keyID,mod,window,1,1,1);
    } else {
        XUngrabKey(display,keyID,mod,window);
    }
}

key - клавиша
mod - модификатор (Shift, Alt, Ctrl ...)
capture -  true: захватить комбинацию ; false: отпустить комбинацию
пример использования:
Код

captureHotKey("F2",ControlMask,true);           //захватить комбинацию Ctrl+F2
captureHotKey("I",ControlMask | Mod1Mask,true); //захватить комбинацию Cntl+Alt+I
captureHotKey("F4",Mod1Mask,true);              //захватить комбинацию Alt+F4
captureHotKey("Tab",0,true);                    //захватить комбинацию Tab (одна клавиша - Таб не будет обрабатываться)
//---
captureHotKey("F2",ControlMask,false);          //отпустить комбинацию Сtrl+F2

Если комбинация уже захвачена (например оконным мэнеджером, то захватить её не удастся).
Осводобить (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

Это сообщение отредактировал(а) _GRIN_ - 24.11.2009, 11:35


--------------------
Дорогу осилит идущий
PM MAIL Skype   Вверх
green5
Дата 24.11.2009, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 4.6.2008

Репутация: нет
Всего: нет



А чем XGrabKeyboard не устраивает?
PM MAIL   Вверх
_GRIN_
Дата 24.11.2009, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


одинокий падаван
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 18.11.2007
Где: Калуга

Репутация: нет
Всего: 7



green5, XGrabKeyboard  железно захватывает клавиатуру - спасибо smile, за исключением Ctrl+Alt+F<x> и возможно каких-то ещё комбинаций, обрабатываемых до иксов.
Как сделать, что бы моё приложение (работающее в потоке парралельном потоку-перехватчику) получало ввод с клавиатуры - пока не знаю smile Но метод рабочий smile что радует. 
Всё вроде ясно по данной теме за исключением /dev/input/event0 горячего перехвата/отпускания  Ctrl+Alt+F<x> и Ctrl+Alt+Del
В текущий момент данные вопросы отложу.

Всем спасибо, закрываю тему


--------------------
Дорогу осилит идущий
PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.1419 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.