Скрипт Bash не работает должным образом с xbindkeys

Я сделал простой bash-скрипт для отображения уведомлений при каждом нажатии клавиши capslock. Он отлично работает, когда я называю это как bash capsnotify.sh,

Проблема сейчас в том, когда я связываю свой скрипт выше capslock ключ с помощью xbindkeys инструмент не работает как требуется. Показывает уведомление caps ON когда мои заглавные буквы включены, но это не показывает caps OFF уведомление, когда мои заглавные буквы выключены вместо этого снова показывает caps ON уведомление.

capsnotify.sh

#!/bin/bash

value=$(xset -q | awk '/Caps/ {print $4}')

if [ "$value" == "on" ]

then    
    notify-send "caps ON"

elif [ "$value" == "off" ]

then    
    notify-send "caps OFF"    
fi

.xbindkeysrc

"bash /home/ranveer/capsnotify.sh"
  m:0x2 + c:66

Итак, проблема в том, что после привязки моего ключа caps lock к обоим событиям (вкл / выкл) это показывает caps ON уведомление.

2 ответа

Решение

Что сработало для меня, это добавление sleep до вызова моего сценария в xbindkeys, Итак, теперь мой .xbindkeysrc похоже

"sleep 0.1 && bash /home/ranveer/capsnotify.sh"

Я считаю, что это работает, добавив sleep потому что вызов xset для запроса состояния CapsLock происходит до того, как Xserver переключил состояние, которое может быть связано с моим оконным менеджером, который захватывает событие ключа и не обрабатывает его сверхбыстро, и, таким образом, X переключается немного позже.

Вероятно, проще всего было бы указать xbindkeys что ваш скрипт должен быть запущен с gnome-terminal (или эквивалент), например, и минимизировать размер терминала. Вы можете заменить свою запись в ~/.xbindkeysrc с:

"gnome-terminal --geometry=1x1+1141+27 --hide-menubar -e /home/ranveer/capsnotify.sh"
 m:0x2 + c:66

Мы получили показания геометрии терминала, поместив его в верхнем правом углу экрана и затем запустив xwininfo и нажав на окно. Указав такой маленький терминал (1x1) и его верхнее правое положение (1141+27) и скрыв строку меню, мы можем гарантировать, что терминал размером с миниатюру действительно откроется на мгновение под сообщениями о блокировке заглавных букв в правом верхнем углу экрана. Должна быть возможность указать геометрию, подобную этой, с другими терминалами, такими как.

После любых изменений ~/.xbindkeysrc, вы должны войти

killall xbindkeys

а потом

xbindkeys

для новых изменений, которые будут прочитаны.

На скриншоте ниже я дважды очень быстро нажал caps-lock, чтобы первое сообщение об уведомлении-отправке еще не исчезло:

введите описание здесь

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

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