Есть ли способ для моего двоичного файла реагировать на некоторые глобальные горячие клавиши в Linux?

Можно ли прослушать определенную горячую клавишу (например, Ctrl-I), а затем выполнить определенное действие? Мое приложение написано на C, будет работать только в Linux и не имеет графического интерфейса. Есть ли какие-нибудь библиотеки, которые помогут с такого рода задачами?

Обновлено: например, у amarok есть глобальные ярлыки, поэтому, например, если вы сопоставите комбинацию клавиш с действием (скажем, Ctrl-+, Ctrl и +), вы можете выполнить это действие при нажатии клавиш. Если бы я сопоставил Ctrl-+ с действием увеличения громкости, каждый раз, когда я нажимаю ctrl-+, громкость должна увеличиваться на определенную величину.

Спасибо

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
532
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

Насколько глобальными должны быть ваши горячие клавиши? Достаточно ли им быть глобальными для X-сессии? В этом случае вы сможете открыть соединение Xlib и прослушивать нужные события.

Обычно события клавиатуры в X доставляются в окно, которое в данный момент находится в фокусе, и распространяются вверх по иерархии, пока не будут обработаны. Ясно, что это не то, что мы хотим. Нам нужно обработать событие, прежде чем любое другое окно сможет к нему добраться. Для этого нам нужно вызвать XGrabKey в корневом окне с кодом клавиши и модификаторами нашей горячей клавиши.

Нашел хороший пример здесь.

Не могли бы вы немного поподробнее?

Vhaerun 16.09.2008 21:48

В UNIX доступ к оболочке командной строки осуществляется через Терминал. Это восходит к тем временам, когда люди получали доступ к своим большим общим компьютерам буквально через терминалы, подключенные непосредственно к машинам (например, с помощью последовательного кабеля).

Фактически, программа 'xterm' или любая производная программа, которую вы используете в своем UNIX-компьютере, правильно называется эмулятор терминала - она ​​ведет себя (как с вашей точки зрения, так и с точки зрения операционной системы) во многом как один из этих старомодных терминалов. машины.

Это немного усложняет обработку ввода интересными способами, поскольку существует множество различных типов терминалов, и ваша система UNIX должна знать о возможностях каждого из них. Эти возможности традиционно хранились в файле termcap, и я думаю, что более современные системы вместо этого используют terminfo. Пытаться

man 5 terminfo

в системе Linux для получения дополнительной информации.

Итак, хорошая новость заключается в том, что вам не нужно слишком много возиться с возможностями терминала и т. д., Чтобы иметь приложение командной строки, которое делает интересные вещи с функциями ввода или работы с окнами. Есть библиотека проклятия, которая поможет. Искать

man 3 ncurses

в вашей системе Linux для получения дополнительной информации. Вероятно, вы сможете найти в Интернете достойное руководство по использованию проклятий.

Один из способов сделать это - заставить ваше приложение прослушивать определенный порт или файл сокета для входящих запросов.

Затем вы можете написать небольшое клиентское приложение, которое подключается к этому порту или файлу сокета и отправляет команды запущенному приложению.

Затем вы можете настроить свой оконный менеджер для привязки определенных комбинаций клавиш для запуска небольшого клиентского приложения.

Я подумал об этом, но поскольку amarok и другие приложения могут это делать, у меня тоже должен быть способ сделать это.

Vhaerun 16.09.2008 21:52

Я думаю, что здесь Smoofra находится на правильном пути; вы хотите зарегистрировать глобальную горячую клавишу с помощью X, чтобы вы могли перехватывать нажатия клавиш и предпринимать соответствующие действия. Я думаю, что Xlib - это то, что вам нужно, а XGrabKey - это функция.

Боюсь, этому непросто научиться; Я нашел этот пример, который кажется мне полезным: TinyWM. Я также нашел пример с использованием Java / JNI (доступ к той же базовой функции Xlib).

Вам следует посмотреть исходный код xbindkeys.

Программирование на Xlib довольно загадочно, трудно найти документацию, и есть тонкие проблемы с переносимостью. Лучше скопировать закаленный в боях код.

Другие вопросы по теме