Кажется, нет готового решения. Тем не менее, нетрудно использовать Xlib и Xkb напрямую.
Создать файл getmodkey.c
:
#include <X11/Xlib.h> #include <stdio.h> #include <X11/XKBlib.h> int main() { XkbStateRec r; Display* d = XOpenDisplay(NULL); XkbGetState(d, XkbUseCoreKbd, &r); printf("mod: 0x%x\n", r.mods); XCloseDisplay(d); return !( r.mods & 1 ); }
и скомпилировать его -lX11
, например, с
make LDLIBS="-lX11" getmodkey
Код состояния выхода из программы будет, 0
если клавиша Shift была нажата, в 1
противном случае. Чтобы проверить другой модификатор, отрегулируйте (r.mods & keymask)
условие (маска для Shift равна 1).
Тогда эта программа должна легко интегрироваться,
if getmodkey; then echo "shift!" else echo "no shift" fi