Как захватить нажатия клавиш в Gnome Shell

Я пытаюсь написать свое первое расширение для оболочки, и, как и каждый пост в блоге, я слишком борюсь с отсутствием актуальной документации...

А именно, я пытаюсь захватить все нажатия клавиш с клавиатуры, и, глядя на код в Интернете и старые сообщения списка рассылки, кажется, что до недавнего времени правильный способ сделать это был:

const Shell = imports.gi.Shell;
global.set_stage_input_mode(Shell.StageInputMode.FULLSCREEN);
global.stage.connect('key-press-event', myCallbackHere);

Однако это, похоже, не работает. Похоже, что и функция set_stage_input_mode, и свойство StageInputMode исчезли, по крайней мере, в моей Fedora 24 с GTK 3.20.6.

Каков правильный текущий способ, чтобы мое расширение перехватывало все нажатия клавиш пользователем?


person mac    schedule 22.07.2016    source источник


Ответы (1)


Я не думаю, что есть правильный способ сделать это на данный момент. Вы можете взломать что-то вместе, что либо специфично для X, либо специфично для Wayland, или, может быть, вы можете исправить Gnome Shell, чтобы предоставить эту информацию.

Для Wayland вы можете начать с https://github.com/MaartenBaert/wayland-keylogger, а для X вы можете начать с повторного использования обнаружения ключа из autokey (https://github.com/autokey/autokey/blob/master/src/lib/interface.py).

Я могу предположить, что это не тот ответ, на который вы надеялись, потому что в IRC вы написали, что хотите написать замену autokey. Для получения данных из внешней программы вы можете использовать GLib.spawn_async_with_pipes (https://people.gnome.org/~gcampagna/docs/GLib-2.0/GLib.spawn_async_with_pipes.html).

Некоторое время назад я написал некоторый код расширения оболочки для опроса xinput test и регистрации примерно того, что происходит (подумайте о любой буквенно-цифровой клавише, левом Ctrl или клавише возврата). Вы можете посмотреть этот код здесь: https://gist.github.com/daniellandau/7679741bf8bbc5c345591593ca05e9f6 . Он недостаточно надежен для любого расширения макросов, поэтому я бы рекомендовал повторно использовать код обнаружения из autokey.

Как правило, документы по адресу https://people.gnome.org/~gcampagna/docs место, где можно найти ссылки на API для библиотек, которые можно использовать из расширений Gnome Shell. Я надеюсь, что вы продвигаете свой проект. Начинать писать расширения разочаровывает, но в конечном итоге очень весело, как только вы освоитесь.

person Daniel Landau    schedule 28.07.2016
comment
Привет! Спасибо тебе за это. Я проверю ссылки, как только у меня будет свободное время для личных проектов, а пока спасибо, что написали это. Я вернусь к этому и одобрю/доработаю с вопросами. :) - person mac; 29.07.2016