home

Screensaver

Мне надоело, что мой монитор постоянно выключается, поэтому я отключил энергосбережение простым добавлением xset -dpms в .xinirc.

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

Итак, что же нужно для реализации скринсейвера? Нужна программа, которая будет запускать анимацию и программа, которая будет её закрывать.

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

Для проигрывания анимации я использую mpv, поэтому запускаю его, сохраняя pid для последующего убийства. После этого запускаю xinput в режиме отлова действий, после чего pip'ом перенаправляю его вывод в read. Он завершится после первой строки(то-есть как только xinput словит хоть одно действие), убив заодно и xinput. Следующей строчкой я просто убиваю mpv с помощью kill.

По итогу скрипт для скринсейвера получился вот такой:

#!/bin/sh

mpv INSERTPATH2VIDEO --loop --no-audio --no-osc --fullscreen & lockpid=$!
xinput test-xi2 --root | read
kill $lockpid
mpv: --loop для зацикливания анимации; --no-audio для отключения звука; --no-osc для отключения интерфейса; --fullscreen для полноэкранного режима.
xinput: --root для того, чтобы он брал события из root-окна, иначе он создаёт отдельное окно, в котором и отслеживает действия.

После этого остаётся только добавить в .xinitrc строчки, которые заставят анимацию автоматически запускаться.

...
xset s 90
xss INSERTPATH2SCRIPT &
...

Да, конечно, можно было бы использовать xscreensaver, но Qt-приложение для скринсейвера - это слишком. Мой компьютер не помойка.

Надеюсь, что помог этим текстом кому-нибудь. Спасибо за то, что уделили внимание моему тексту.

P.S. Иногда mpv открывается прозрачным, чтобы избежать этого следует добавить задержку между запуском mpv и xinput.