Системный таймер срабатывающий по событию.

Сделал таймер по примерам для блокировки ноута по bluetooth при удалении от него мобилки. Но что то не могу понять причину неработоспособности.

Код таймера
[Unit]
Description=Run Lock screen on BT each x seconds
[Timer]
OnBootSec=3s
OnUnitActiveSec=3s
[Install]
WantedBy=timers.target

Сервис
[Unit]
Description=Lock screen on BT
[Service]
ExecStart=/usr/bin/bash /usr/bin/lock_screen_on_BT.sh
[Install]
WantedBy=multi-user.target

Скрипт
DISPLAY=:0
export DISPLAY=:0
export XDG_RUNTIME_DIR=/run/user/1000
export XAUTHORITY=/home/user/.Xauthority
if ! /usr/bin/l2ping -c 3 00:00:00:00:00:00 ; then
su user -c 'i3lock -c 000000';
fi

Таймер расположен по адресу
Правило запускает сервис по адресу
/etc/systemd/system/123.timer

Сервис расположен по адресу
/etc/systemd/system/123.service

Сервис запускает скрит
Имя сервиса и таймера одинаковые
systemctl daemon-reload
systemctl enable 123.timer
systemctl start 123.timer

Скрип работает, проверял отдельно.
Таймер и сервис работает т.к. в процессах висит скрипт, но ничего не происходит.
ну во первых, свое должно храниться не в /usr/bin/ а в /usr/local/bin/, это я про скрипт lock_screen_on_BT.sh.
а во вторых, это лучше сделать от пользователя, а не системно!
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
попробуй так
~/.config/systemd/user/123.timer
[Unit]
Description=Run Lock screen on BT each x seconds
[Timer]
OnBootSec=3s
OnUnitActiveSec=3s
[Install]
WantedBy=timers.target
~/.config/systemd/user/123.service
[Unit]
Description=Lock screen on BT
[Service]
ExecStart=/usr/bin/bash %h/.local/bin/lock_screen_on_BT.sh
[Install]
WantedBy=default.target
~/.local/bin/lock_screen_on_BT.sh
if ! /usr/bin/l2ping -c 3 00:00:00:00:00:00
then
    export DISPLAY=:0
    export XAUTHORITY="${HOME}/.Xauthority"
    i3lock -c 000000
fi
systemctl –user daemon-reload
systemctl –user enable 123.timer
systemctl –user start 123.timer
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
А если в телефоне батарейка сядет(или ещё что-нибудь), придётся отключать этот сервис за 3с ?)
Я бы посоветовал продумать и выбрать другой способ блокировки.
Ошибки в тексте-неповторимый стиль автора©
indeviral
А если в телефоне батарейка сядет(или ещё что-нибудь), придётся отключать этот сервис за 3с ?)
Я бы посоветовал продумать и выбрать другой способ блокировки.
Согласен, есть такой недостаток )

Тогда вопрос продолжу в плане рабоспособности скрипта.
nafanja
~/.local/bin/lock_screen_on_BT.sh
if ! /usr/bin/l2ping -c 3 00:00:00:00:00:00
then
    export DISPLAY=:0
    export XAUTHORITY="${HOME}/.Xauthority"
    i3lock -c 000000
fi
Дело в том, что /usr/bin/l2ping можно запустить только от root.
dima81
Дело в том, что /usr/bin/l2ping можно запустить только от root.
да, не заметил
попробуй:
sudo setcap cap_net_raw=ep /usr/bin/l2ping
идея взята из iputils-20190709-2-x86_64.pkg.tar.xz/.INSTALL, только там обычный ping "патчится".
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
dima81
Дело в том, что /usr/bin/l2ping можно запустить только от root.
дай разрешение на запуск нужной команды в sudoers

indeviral
Я бы посоветовал продумать и выбрать другой способ блокировки.
поддерживаю ... например, пропажа устройства в выводе устройств (типа, lsusb и др.)
Ошибки не исчезают с опытом - они просто умнеют
>dima81
http://aur.archlinux.org/packages/blueproximity
iradia
>dima81
http://aur.archlinux.org/packages/blueproximity
Пробовал до создания темы, не взлетело (

nafanja
попробуй:
sudo setcap cap_net_raw=ep /usr/bin/l2ping
А как было то можно вернуть? И тоже не взлетело.

У способа обнаружился ещё один недостаток, во время работы всей этой конструкции экранчик передёргивает с частотой работы таймера.
 
Зарегистрироваться или войдите чтобы оставить сообщение.