Обычный способ сделать это с помощью XGrabKey ().Он использует коды клавиш, но вы бы не жестко закодировали его, вы бы получили его с помощью XKeysymToKeycode ().Чтобы быть более точным, вы также захотите повторить захват, когда получите MappingNotify (XMappingEvent).(Обратите внимание, MappingNotify, not MapNotify.) Если для этих ключей не существует keysym - вероятно, их нет в старых версиях X, но, надеюсь, в более новых версиях X.org они есть - тогда у вас просто естьжестко связать код ключа.Который не будет очень надежным или переносимым, но, вероятно, будет работать для всех в Linux с той же аппаратной моделью.
Будьте готовы к тому, что захваты клавиш являются глобальными, поэтому, если вы попытаетесь использовать XGrabKey (), а что-то еще уже захваченоэтот ключ, вы получите ошибку X - по умолчанию, которая выходит из программы.Еще одна особенность XGrabKey () заключается в том, что он захватывает ключ с точным набором модификаторов.Например, чтобы справиться как с NumLock, так и без него, вам нужно захватить его дважды.См. Глобальная горячая клавиша с X11 / Xlib
При обычной настройке Linux (если вы хотите получить подобную функцию в вышестоящих проектах), средам рабочего стола не нужно много отдельных приложенийборьба за захват ключей и получение ошибок.Таким образом, будут некоторые центральные координационные точки, такие как диспетчер окон или специальный демон, который может выполнять все привязки клавиш и передавать команды другим процессам по мере необходимости.Так что вы, вероятно, захотите посмотреть на исправление того же самого вышестоящего кода, который обрабатывает другие специальные ключи, как этот, если вы пытаетесь интегрировать свою функцию в дистрибутивы по умолчанию.
Еще одна вещь, о которой следует знать, это XkbAPI, который намного сложнее.Есть какой-то изнурительный способ получить ключи с помощью Xkb, но я не знаю никаких преимуществ в этом пути.