У меня проблемы с отправкой системного уведомления при входе пользователя (KDE Plasma) (Arch Linux) - PullRequest
0 голосов
/ 18 января 2019

Я пытаюсь отправить уведомление при входе в систему через PAM, но не могу понять, как отправить его пользователю, который входит в систему.

Я настраиваю свой PAM для выполнения сценария каждый раз, когда пользователь входит в систему. Проблема в том, что мне нужно отправить уведомление, если были какие-либо попытки входа в систему (это часть большей безопасности, которую я пытаюсь добавить, где мой ноутбук делает снимок с веб-камеры при неудачных входах в систему и уведомляет меня, когда я снова вхожу в систему, так как мои одноклассники любят пытаться угадать мой пароль по некоторым причинам). Проблема в том, что строка в моем файле .sh, которая отправляет уведомление пользователя, отправляет его пользователю root, поскольку это «пользователь», выполняющий сценарий, я хочу, чтобы мой сценарий отправлял уведомление моему текущему пользователю (называемое «andreas») ), но у меня проблемы с выяснением этого.

Вот строка, которую я добавил в конец файловой системы PAM-login:

auth       [default=ignore]                pam_exec.so /etc/lockCam/call.sh

А вот файл call.sh:

#!/bin/sh

/etc/lockCam/notifier.sh &

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

Вот скрипт, который затем выполняется:

#!/bin/sh

#sleep 10s

echo -e "foo" > "/etc/lockCam/test"
#This line is simply to make sure that i know that my script was executed

newLogins=`sed -n '3 p' /etc/lockCam/lockdata`

if [ $newLogins -gt 0 ]
then
    su andreas -c ' notify-send --urgency=critical --expire-time=6000 "Someone tried to log in!" "$newLogins new lockCam images!" && exit'
    callsInRow=`sed -n '2 p' /etc/lockCam/lockdata`
    crntS=$(date "+%S")
    crntS=${crntS#0}
    crntM=$(date "+%M")
    crntM=${crntM#0}
    crntH=$(date "+%H")
    crntH=${crntH#0}
    ((crntTime = $crntH \* 60 \* 60 + $crntM \* 60 + $crntS ))
    #This whole process is absolutely stupid but i cant figure out a better way to make sure none of the integers are called "01" or something like that, which would trigger an error
    echo -e "$crntTime\n$callsInRow\n0" > "/etc/lockCam/lockdata"
fi

exit 0

И вот, где я ДУМАЮ, что моя ошибка, строка "su andreas -c ....", скорее всего, отформатирована неправильно, или я делаю что-то еще неправильно, все выполняется при входе в систему, КРОМЕ СООТВЕТСТВИЯ уведомление не отображается. Если я выполняю скрипт из терминала, когда я уже вошел в систему, уведомления также нет, если только я не удаляю часть «su andreas -c» и просто делаю «notify-send ...», но это не отправляет уведомление, когда Я вхожу в систему и думаю, что это потому, что уведомление отправляется пользователю root, а не «andreas».

...