Частичный ответ (, потому что это всего лишь набросок и не проверено):
Напишите демон, который слушает любое /dev/input
устройство, соответствующее вашей основной клавиатуре (там есть симлинки, посмотрите на них ). Запустите этот демон от имени указанного вами пользователя, используя любую систему инициализации, которая у вас есть (systemd, sysv, любую ).
Демон обрабатывает ключевые события, как определено в input -events -code.h(или просмотрите исходный кодevtest
). У него есть конечный автомат, который распознает нужные вам последовательности клавиш и запускает любой процесс, который вы укажете, когда такая последовательность завершена.
Это должно быть доступно до входа в систему и всегда будет выполняться от имени одного и того же пользователя, независимо от того, под каким пользователем вы вошли в виртуальную консоль. Он также будет выполняться под X, опять же, как тот же пользователь.
Альтернативный вариант, если вы хотите выполнить что-то в оболочке. :Используйте tmux
или аналогичную программу, которая может связывать последовательности клавиш с действиями. Я предполагаю, что также должна быть возможность автоматически запускать tmux
и подключаться к новому сеансу всякий раз, когда вы входите в виртуальную консоль, но я не изучал это.
Это не будет работать до входа в систему, но также будет работать в графических эмуляторах терминала, которые имеют фокус клавиатуры, и будет выполнять скрипт от имени пользователя, вошедшего в систему.
Добавление AlertExceedsMax
в clamd.conf
решило мою проблему. Вся информация находится в man clamd.conf
.