Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
2 / 2 / 2
Регистрация: 25.06.2016
Сообщений: 51

API поддержки ввода с клавиатуры

06.09.2024, 01:03. Показов 1377. Ответов 15

Студворк — интернет-сервис помощи студентам
Приветствую.
Подскажите пожалуйста ссылки на доки как работает система с клавиатурным вводом.
Для терминального и графического режима используются одни и те же драйвера или разные?
Разные графические окружения (Gnome, KDE, XFCE) используют один механизм или у каждого десктопа он свой?

Заранее спасибо.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.09.2024, 01:03
Ответы с готовыми решениями:

A Win32 API function failed / перехват ввода с клавиатуры
Ловлю A Win32 API function failed, без объяснений и кода ошибки, при попытке показать окно, в котором такая конструкция: private ...

Средства Поддержки Клавиатуры
Добрый день.Столкнулся с такой задачей: разработать программу,которая,используя функции прерывания INT 16h,позволит считать...

API для работы с Action Center (Центр Поддержки) Windows 7
Несколько наивный вопрос, но все-таки: Известны ли документированные API - функции для работы с Центром Поддержки в Windows 7 ? ...

15
 Аватар для Azathtot
754 / 351 / 90
Регистрация: 07.01.2023
Сообщений: 1,451
06.09.2024, 07:39
Цитата Сообщение от Axa-Ru Посмотреть сообщение
Подскажите пожалуйста ссылки на доки как работает система с клавиатурным вводом.
[url¡https://linux-kernel-labs.gith... tml]kernel character device driver[/url]
Цитата Сообщение от Axa-Ru Посмотреть сообщение
Для терминального и графического режима используются одни и те же драйвера или разные?
Разные. в графическом после включается libevdev а после него xf86-input-evdev или libinput (в вяленом).
Цитата Сообщение от Axa-Ru Посмотреть сообщение
Разные графические окружения (Gnome, KDE, XFCE) используют один механизм или у каждого десктопа он свой?
Он един с точки зрения приложения.
0
2 / 2 / 2
Регистрация: 25.06.2016
Сообщений: 51
06.09.2024, 10:14  [ТС]
Спасибо.

https://linux-kernel-labs.gith... ivers.html

Добавлено через 2 часа 13 минут
В любом случае сначала отрабатывает символьный драйвер, а для графики включаются свои врапперы. Я правильно понимаю?
То есть, если мне нужно что то делать с вводом с клавиатуры наиболее правильный способ сделать врапер для символьного устройства?
0
 Аватар для Azathtot
754 / 351 / 90
Регистрация: 07.01.2023
Сообщений: 1,451
06.09.2024, 10:49
Цитата Сообщение от Axa-Ru Посмотреть сообщение
В любом случае сначала отрабатывает символьный драйвер, а для графики включаются свои врапперы. Я правильно понимаю?
Только не врапперы а библиотеки ввода.
Цитата Сообщение от Axa-Ru Посмотреть сообщение
То есть, если мне нужно что то делать с вводом с клавиатуры наиболее правильный способ сделать врапер для символьного устройства?
Смотря что вам надо делать. Может достаточно работать через libevdev
0
2 / 2 / 2
Регистрация: 25.06.2016
Сообщений: 51
06.09.2024, 11:42  [ТС]
У меня есть желание написать аналог punto swither.
Хватит ли запала - посмотрим.
0
 Аватар для Azathtot
754 / 351 / 90
Регистрация: 07.01.2023
Сообщений: 1,451
06.09.2024, 11:51
Цитата Сообщение от Axa-Ru Посмотреть сообщение
У меня есть желание написать аналог punto swither.
Вообще на уровень ядра лезть не надо. Да и на уровень устройства ввода тоже.
0
2 / 2 / 2
Регистрация: 25.06.2016
Сообщений: 51
06.09.2024, 12:03  [ТС]
Цитата Сообщение от Azathtot Посмотреть сообщение
Вообще на уровень ядра лезть не надо. Да и на уровень устройства ввода тоже.
Где же лучше получать доступ к вводу?
0
 Аватар для Azathtot
754 / 351 / 90
Регистрация: 07.01.2023
Сообщений: 1,451
06.09.2024, 13:56
Цитата Сообщение от Axa-Ru Посмотреть сообщение
Где же лучше получать доступ к вводу?
Зачем вам доступ к вводу? Вам буфер обмена нужен.
Самому раскладку переключать - это вы что, в xkb нашли фатальный недостаток?
Если вы хотите переключение раскладки "на лету" то это тоже не тот уровень, ибо что "e" что "у" имеет один код клаиши.
За то, что будет "по факту" отвечают xkb, ibus, fcitx и т.д.
0
599 / 421 / 137
Регистрация: 02.10.2008
Сообщений: 1,798
Записей в блоге: 1
07.09.2024, 09:38
Велосипедим для развития, или чем-то не устраивает https://help.ubuntu.ru/wiki/xneur
По крайней мере можно его исходники глянуть.
0
2 / 2 / 2
Регистрация: 25.06.2016
Сообщений: 51
09.09.2024, 13:13  [ТС]
Цитата Сообщение от drfaust Посмотреть сообщение
Велосипедим для развития, или чем-то не устраивает https://help.ubuntu.ru/wiki/xneur
Ну во первых автор давно уже не поддерживает данное изобретение. Это раз.
Следствие - велосипедов нет от слова совсем. Есть гуру, которые знают как крутить педали, но это им делать не хочется. Это два.
Чтобы чему то научиться нужно что то сделать самому. Это три.

Ну да ладно. Это все в пользу бедных.

Вот попробовал такой способ:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#define EV_RELEASED 0
 
int kbd_buf_read(char device[])
{
  cout << "Читаем нажатые клавиши из keyboard buffer" << endl;
 
  int fdr = 0;
  if ((fdr = open(device, O_RDONLY)) > 0)  // Дескриптор для чтения из устройства
  {
    struct input_event event;
    unsigned int scan_code = 0;
 
    bool forever = true;
    while(forever)
    {
      read(fdr, &event, sizeof(struct input_event));    // Читаем
      if (event.type == EV_KEY)
      {
        if (event.value == EV_RELEASED)
        {
          scan_code = event.code;
          cout << "scan_code: " << scan_code << endl;
          if (scan_code == 44)    // по "z" прерываем цикл
            forever = false;
        }
      }
    }
    close(fdr);
  }
}
Какие проблемы я сейчас вижу.
1. Это буфер сканкодов.
Нужно будет постоянно следить за текущей раскладкой.

2. Запускать эту процедуру нужно от рута. А это другое окружение.
Можно ли читать поток клавиатуры под рутом, а обрабатывать под текущим пользователем?
Если да, то какие механизмы тут можно использовать?

Или это вообще не в ту степь?
Если не трудно просветите.

Добавлено через 24 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <fcntl.h>
#include <linux/input.h>
#include <unistd.h>
#include <iostream>
#include <sstream>
 
using namespace std;
 
#define EV_PRESSED 1
#define EV_RELEASED 0
#define EV_REPEAT 2
 
#define MY_KEY1 KEY_L
#define MY_KEY2 KEY_S
#define MY_KEY3 KEY_ENTER
 
extern int kbd_buf_read(char[]);
extern int kbd_buf_write(char[]);
 
/************************************************
     Запускается с правами root
 ***********************************************/
 
int main() {
  printf("Тест работы с буффером клавиатуры \n");
  char device[] = "/dev/input/event8";  // У меня клавиатура тут
 
  cout << "Читаем нажатые клавиши из keyboard buffer" << endl;
  kbd_buf_read(device);
}
0
 Аватар для Azathtot
754 / 351 / 90
Регистрация: 07.01.2023
Сообщений: 1,451
09.09.2024, 13:47
Цитата Сообщение от Axa-Ru Посмотреть сообщение
Или это вообще не в ту степь?
Не в ту... Даже не "в степь", а это совсем другая планета.
XCB input API изучайте.
1
599 / 421 / 137
Регистрация: 02.10.2008
Сообщений: 1,798
Записей в блоге: 1
09.09.2024, 17:06
Цитата Сообщение от Axa-Ru Посмотреть сообщение
2. Запускать эту процедуру нужно от рута. А это другое окружение.
Можно ли читать поток клавиатуры под рутом, а обрабатывать под текущим пользователем?
Если да, то какие механизмы тут можно использовать?
Нет, не туда.
Самое простое - в системе есть 2 юзера, один хичет английский-русский по Alt-Shift, второй китайский-японский по CAPS-Lock. И толку, что ты от рута получишь поток scan-кодов? Какому юзеру он предназначался?

Прога в любов случае должна пахать от имени юзверя (потому как именно от него придётся получать настройки клавы, локали и т.п.)
1
2 / 2 / 2
Регистрация: 25.06.2016
Сообщений: 51
09.09.2024, 17:22  [ТС]
Дааа. Документации по xcb можно сказать почти ноль.

Весь туториал на одной странице ...

Хотя нет, вот есть основы программирования с xcb
Добавлено через 1 минуту
Цитата Сообщение от drfaust Посмотреть сообщение
Прога в любов случае должна пахать от имени юзверя
Да. Это я и написал в проблемах такого способа.
Буду изучать xcb
0
599 / 421 / 137
Регистрация: 02.10.2008
Сообщений: 1,798
Записей в блоге: 1
09.09.2024, 18:11
Цитата Сообщение от Axa-Ru Посмотреть сообщение
Дааа. Документации по xcb можно сказать почти ноль.
У тебя самые последние исходники в открытом доступе - какая ещё документация нужна-то?
1
2 / 2 / 2
Регистрация: 25.06.2016
Сообщений: 51
09.09.2024, 19:05  [ТС]
Исходники я видел. Хотелось бы отправную точку с примерами и премами работы.

Добавлено через 27 минут

Операционка mint
Я установил библиотеки следующей командой:
Bash
1
sudo apt install libx11-xcb-dev
Но при этом отсутствует заголовок xcbint.h.

Как мне доставить недостающие компоненты? Или нужно компилить из исходников, как в мануале написано?

И еще просьба, может у кого есть инсталлятор офлайн qt? Поделитесь плиз.
0
 Аватар для Azathtot
754 / 351 / 90
Регистрация: 07.01.2023
Сообщений: 1,451
09.09.2024, 19:21
Лучший ответ Сообщение было отмечено Axa-Ru как решение

Решение

Цитата Сообщение от Axa-Ru Посмотреть сообщение
Хотелось бы отправную точку с примерами и премами работы.
вас в гугле забанили? Например тык
Цитата Сообщение от Axa-Ru Посмотреть сообщение
может у кого есть инсталлятор офлайн qt
А его в природе нет особенно под Linux. Или собирайте или из своего репозитория ставьте
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.09.2024, 19:21
Помогаю со студенческими работами здесь

Инженер службы поддержки API коммерческих сервисов (Developer advocate)
Вакансия участвует в программе рекомендаций. Вакансия повышенной сложности В команду разработки API коммерческих сервисов Яндекса...

Составить программу для ввода с клавиатуры строки символов в окно ввода
Составить программу для ввода с клавиатуры строки символов в окно ввода.Записать строку в буфер buf и организовать вывод строки в обратном...

Исключение IOException, которое появляется при ввода буквенного символа в методе ввода с клавиатуры целых чисел
Ввожу в catch IOException, а не нравится, что делать? import java.io.IOException; import java.util.Scanner; public class MyClass {...

Напишите рекурсивную процедуру для ввода с клавиатуры последовательности чи-сел (конец ввода – 0) и вывода её на экран в обратном порядке.
Помогите решить. Только при помощи рекурсии. Задание: Напишите рекурсивную процедуру для ввода с клавиатуры последовательности...

DropBox Api. Авторазация без ввода логина и пароля
Задача такая: программа должна сохранять рейтинг пользователя на сервере dropbox. Должен создаваться файл с именем по id(например на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru