Bash: Пишем скрипт для симуляции работы мыши
Приветствую!

В этой короткой заметке мы напишем Bash-скрипт, который с заданным интервалом двигает указатель мыши на один пиксель и обратно. Это полезно, если у вас регулярно блокируется рабочий стол из-за отсутствия действий пользователя😉.

Данная заметка из рубрики “вредные советы с точки зрения руководителя” 😅.

Кейс: вы работаете удалённо, подключаетесь к рабочим машинам по RDP/VNC и при этом у вас установлен короткий промежуток времени, через который экран рабочей станции блокируется и требует ввода пароля. Всё бы ничего, если бы этот промежуток составлял 15-30 минут. А если 5, а то и меньше?

Я понимаю, что в определённых случаях такое действие продиктовано мерами безопасности, и это справедливо, где-нибудь в офисе. Но для удалёнщика👨‍💻 подобное может стать раздражающим фактором.

Отошёл, простите в уборную, а рабочий стол уже заблокирован🤷‍♂️. Из положительных моментов - вы прекрасно запоминаете свой доменный пароль🔑😅.

Ниже я приведу небольшой Bash скрипт, который можно забиндить на горячую клавишу или задать действие средней кнопки мыши по панели рабочего стола, например, в Linux Mint Cinnamon, как это сделано у меня😉 (см. в конце).

Я знаю, что существуют специальные утилитки для этих целей, но ведь самому что-то написать/настроить всегда интереснее!

Приступим😎.

Пишем скрипт mouse.sh

Для работы скрипта понадобиться специальная утилита управления.

Для X11:

BASH
sudo apt update && sudo apt install -y xdotool
Нажмите, чтобы развернуть и увидеть больше

Для Wayland все немного сложнее, т.к. там по умолчанию обычному пользователю недоступен функционал, подобный xdotool в X11. Кликайте на спойлер ниже.

Теперь создаем файл, например в ~/.local/bin/:

BASH
nvim ~/.local/bin/mouse.sh
Нажмите, чтобы развернуть и увидеть больше

И наполняем его:

BASH
#!/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
Нажмите, чтобы развернуть и увидеть больше

Думаю, по комментариям в скрипте +- понятна его логика работы: при первом выполнении он запускает фоновый процесс, который раз в 5 сек. двигает мышь на пиксель и обратно. При повторном запуске - “убивает” ранее запущенный экземпляр с выводом соответствующего уведомления на рабочем столе.

Переходим к тестам🧪.

Тестовый запуск

Делаем скрипт исполняемым:

BASH
chmod +x ~/.local/bin/mouse.sh
Нажмите, чтобы развернуть и увидеть больше

И запускаем:

BASH
~/.local/bin/mouse.sh
Нажмите, чтобы развернуть и увидеть больше

Появится уведомление и мышь раз в 5 сек будет “дёргаться”:

А при повторном запуске:

BASH
~/.local/bin/mouse.sh
Нажмите, чтобы развернуть и увидеть больше

Скрипт самоустранится и сообщит об этом:

А теперь, как и обещал, расскажу, как настроить включение/отключение скрипта по нажатию средней кнопки мыши.

Запуск mouse.sh при нажатии middle click по панели Cinnamon

Переходим в Настройки:

Затем в Расширения (Extensions):

Далее переходим в Smart Panel (шестерёнка)

Тут настраиваем Mouse click options –> Action on panel middle click –> Run 2nd Custom Command. Затем в параметре Custom Commands –> 2nd Custom Command указываем имя скрипта, если путь до него есть в вашем $PATH, иначе абсолютный путь к файлу скрипта:

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

Спасибо, что читаете!

Авторские права

Автор: Иван Чёрный

Ссылка: https://r4ven.me/automation/bash-pishem-skript-dlya-simulyacii-raboty-myshi/

Лицензия: CC BY-NC-SA 4.0

Использование материалов блога разрешается при условии: указания авторства/источника, некоммерческого использования и сохранения лицензии.

Начать поиск

Введите ключевые слова для поиска статей

↑↓
ESC
⌘K Горячая клавиша