В этой короткой заметке мы напишем Bash-скрипт, который с заданным интервалом двигает указатель мыши на один пиксель и обратно. Это полезно, если у вас регулярно блокируется рабочий стол из-за отсутствия действий пользователя😉.
🖐️Эй!
Подписывайтесь на наш телеграм @r4ven_me📱, чтобы не пропустить новые публикации на сайте😉. А если есть вопросы или желание пообщаться по тематике — заглядывайте в Вороний чат @r4ven_me_chat🧐.
Данная заметка из рубрики “вредные советы с точки зрения руководителя” 😅.
Кейс: вы работаете удалённо, подключаетесь к рабочим машинам по RDP/VNC и при этом у вас установлен короткий промежуток времени, через который экран рабочей станции блокируется и требует ввода пароля. Всё бы ничего, если бы этот промежуток составлял 15-30 минут. А если 5, а то и меньше?
Я понимаю, что в определённых случаях такое действие продиктовано мерами безопасности, и это справедливо, где-нибудь в офисе. Но для удалёнщика👨💻 подобное может стать раздражающим фактором.
Отошёл, простите в уборную, а рабочий стол уже заблокирован🤷♂️. Из положительных моментов - вы прекрасно запоминаете свой доменный пароль🔑😅.
Ниже я приведу небольшой Bash скрипт, который можно забиндить на горячую клавишу или задать действие средней кнопки мыши по панели рабочего стола, например, в Linux Mint Cinnamon, как это сделано у меня😉 (см. в конце).
Я знаю, что существуют специальные утилитки для этих целей, но ведь самому что-то написать/настроить всегда интереснее!
Приступим😎.
Пишем скрипт mouse.sh
Для работы скрипта понадобиться специальная утилита управления.
Для X11:
sudo apt update && sudo apt install -y xdotoolДля Wayland все немного сложнее, т.к. там по умолчанию обычному пользователю недоступен функционал, подобный xdotool в X11. Кликайте на спойлер ниже.
Настройка работы ydotool
Устанавливаем ydotool:
sudo apt update && sudo apt install -y ydotoolСоздём юнит Systemd для запуск демона ydotoold:
systemctl edit --full --force ydotoold.serviceНаполняем:
[Unit]
Description=ydotool daemon
After=graphical.target
[Service]
Type=simple
ExecStart=/usr/bin/ydotoold --socket-path="/run/user/1000/.ydotool_socket" --socket-own="1000:1000"
Restart=on-failure
[Install]
WantedBy=default.targetЗамените идентификаторы на ваши, если они отличные от моих (1000). Узнать можно с помощью команд:
id -u
id -gАктивируем автозапуск и проверяем:
systemctl enable --now ydotoold.service
systemctl status ydotoold.serviceТеперь создаем файл, например в ~/.local/bin/:
nvim ~/.local/bin/mouse.shИ наполняем его:
#!/usr/bin/env bash
# Первый запуск включает движение курсора (в фоне)
# Повторный убивает уже запущенный экземпляр
# Интервал между движениями (в секундах)
INTERVAL=5
# Имя текущего скрипта (нужно, чтобы находить другие копии)
SCRIPT_NAME="$(basename "${BASH_SOURCE[0]}")"
# Считаем, сколько копий этого скрипта уже запущено
PROC_COUNT="$(pgrep -fc "bash.*$SCRIPT_NAME")"
# При завершении отправляем уведомление "Mouse OFF" и корректно выходим
trap 'notify-send "Mouse OFF"; exit 0' SIGTERM SIGINT SIGHUP
# Функция: двигаем курсор на 1 пиксель вперёд и назад
move_mouse() {
case "$XDG_SESSION_TYPE" in
x11)
xdotool mousemove_relative --sync 1 1
sleep 0.1
xdotool mousemove_relative --sync -- -1 -1
;;
wayland)
ydotool mousemove 10 10
sleep 0.1
ydotool mousemove -10 -10
;;
esac
}
# Если скрипт уже запущен, то убиваем все экземпляры
if (( PROC_COUNT > 1 )); then
pkill -f "bash.*$SCRIPT_NAME"
fi
# Отправляем уведомление о запуске
notify-send "Mouse ON"
# Цикл в фоне: запуск функции по интервалу
(
while true; do
move_mouse
sleep "$INTERVAL"
done
) &
# Отсоединяем фоновый процесс от терминала
disown📝Также скрипт будет доступен на моём GitHub.
Думаю, по комментариям в скрипте +- понятна его логика работы: при первом выполнении он запускает фоновый процесс, который раз в 5 сек. двигает мышь на пиксель и обратно. При повторном запуске - “убивает” ранее запущенный экземпляр с выводом соответствующего уведомления на рабочем столе.
📝Про уведомления на рабочем столе есть отдельная статья: Делаем функциональные уведомления на рабочем столе Linux: кнопки, иконки, ссылки
Переходим к тестам🧪.
Тестовый запуск
Делаем скрипт исполняемым:
chmod +x ~/.local/bin/mouse.sh📝Про права на файлы мы говорили тут.
И запускаем:
~/.local/bin/mouse.shПоявится уведомление и мышь раз в 5 сек будет “дёргаться”:

А при повторном запуске:
~/.local/bin/mouse.shСкрипт самоустранится и сообщит об этом:

💡 Совет
При активации скрипта не забудьте навести мышь на нужное окно, чтобы её движения имели должный эффект😉.
А теперь, как и обещал, расскажу, как настроить включение/отключение скрипта по нажатию средней кнопки мыши.
Запуск mouse.sh при нажатии middle click по панели Cinnamon
Переходим в Настройки:
Затем в Расширения (Extensions):
Далее переходим в Smart Panel (шестерёнка)
☝️Если у вас ещё не установлено расширение Smart Panel, установите его через вкладку Загрузки (Download).
Тут настраиваем Mouse click options –> Action on panel middle click –> Run 2nd Custom Command. Затем в параметре Custom Commands –> 2nd Custom Command указываем имя скрипта, если путь до него есть в вашем $PATH, иначе абсолютный путь к файлу скрипта:

Всё. Теперь при нажатии колёсиком по свободной области панели будет автоматом вызываться скрипт. Для его завершения нужно просто ещё раз кликнуть по панели😌.
Спасибо, что читаете!


