Скрипт 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, чтобы первое сообщение об уведомлении-отправке еще не исчезло:
Могут быть и другие способы решения проблемы, но это быстрый надежный способ, который не влечет за собой переписывание сценария или установку других программ.