Страница 1 из 2
Как проверить заблокирован сеанс или нет?
Добавлено: 01 июл 2019, 11:05
Amadeus
Написал небольшой скрипт для автоматической блокировки ноутбука по синезубу, вроде как всё работает, но после блокировки (именно блокировка сеанса, не сон) скрипт продолжает работать из-за чего после разблокировать сессию практически не реально, после ввода пароля снова блокирует сессию.
Вопрос таков, как можно проверить заблокирована сессия или нет? Чтобы добавить в скрипт условия при котором если сессия заблокирована (на экране блокировки) то скрипт не должен выполняться.
linux mint 19.1 cinnamon х64, пользователь только тот который создавался при установке дистрибутива.
Строго прошу не судить, и не ругаться за глупо написанный скрипт, ещё зелёный.
Код: Выделить всё
#!/bin/bash
pass="Пароль"
echo $pass | sudo -S | timeout -s INT 15s hcitool lescan | if grep -i -o -q "MAC браслета"; then
{
echo "Mi Band найден."
}
else
{
gnome-terminal -- dm-tool lock
echo "Mi Band не найден."
}
fi
Как проверить заблокирован сеанс или нет?
Добавлено: 01 июл 2019, 11:09
Dja
Как проверить заблокирован сеанс или нет?
Добавлено: 01 июл 2019, 11:10
rogoznik
Как проверить заблокирован сеанс или нет?
Добавлено: 01 июл 2019, 11:16
Amadeus
darkfenix писал(а): ↑01 июл 2019, 11:10
я бы сделал
Dja писал(а): ↑01 июл 2019, 11:09
Не?
Так то можно сделать, но после нужно будет снова запускать скрипт, а этого делать не хотелось бы, тоисть хотелось бы чтоб он работал постоянно со старта системы и понимал когда экран заблокирован.
Как проверить заблокирован сеанс или нет?
Добавлено: 01 июл 2019, 11:20
WWolf
Amadeus писал(а): ↑01 июл 2019, 11:05
после разблокировать сессию практически не реально, после ввода пароля снова блокирует сессию.
таймаут опроса браслета уменьшить?
просто получается что разблокируем, браслета не находим и тут же снова лочимся...
в эту сторону копать надо...
опять же какое-то кривое состояние получается... если блютуз не включен, то вечный лок?

Как проверить заблокирован сеанс или нет?
Добавлено: 01 июл 2019, 11:26
Amadeus
WWolf писал(а): ↑01 июл 2019, 11:20
таймаут опроса браслета уменьшить?
оно и опрашивает раз в 30 секунд чего как по мне достаточно.
WWolf писал(а): ↑01 июл 2019, 11:20
опять же какое-то кривое состояние получается... если блютуз не включен, то вечный лок?
Да согласен здесь криво и не продумано, но пока что это на потом.
Как проверить заблокирован сеанс или нет?
Добавлено: 01 июл 2019, 11:28
slant
Amadeus писал(а): ↑01 июл 2019, 11:16
Так то можно сделать, но после нужно будет снова запускать скрипт, а этого делать не хотелось бы, тоисть хотелось бы чтоб он работал постоянно со старта системы и понимал когда экран заблокирован.
Bash - он не для написания демонов. Скрипт закольцованный таким образом будет жрать больше ресурсов, чем он же запускаемый с минутной периодичностью через cron. Так что не занимайтесь ерундой, а просто добавьте запуск вашего скрипта в crontab с периодом в одну минуту, и получите желаемое.
Как проверить заблокирован сеанс или нет?
Добавлено: 01 июл 2019, 11:31
WWolf
Amadeus писал(а): ↑01 июл 2019, 11:26
оно и опрашивает раз в 30 секунд чего как по мне достаточно
для блокировки достаточно, тут не поспоришь... опять же если не стабильно держится...
но у нас проблема с разблокировкой... как быстро выясняется состояние браслета при разлоке? в каком состоянии блютуз? сюда копай
Как проверить заблокирован сеанс или нет?
Добавлено: 01 июл 2019, 11:33
Amadeus
slant писал(а): ↑01 июл 2019, 11:28
просто добавьте запуск вашего скрипта в crontab с периодом в одну минуту, и получите желаемое.
После блокировки крон остановиться? Проблема таки в том что скрипт запускаеться после блокировки сеанса из-за чего и возникает проблема с разблокировкой, именно это и хочу решить. Другими словами крон не должен запускать когда устройство попало на экран блокировки.
Как проверить заблокирован сеанс или нет?
Добавлено: 01 июл 2019, 11:37
Amadeus
WWolf писал(а): ↑01 июл 2019, 11:31
но у нас проблема с разблокировкой... как быстро выясняется состояние браслета при разлоке? в каком состоянии блютуз? сюда копай
Именно в этом и проблема, как показало наблюдение, при блокировке, спустя 30 секунд скрипт снова запускаеться и не находит браслет, посылает команду блокировки, и при попытке разблокировать после ввода пароля он выполняет команды блокировки которые накопились за время моего отсутствие. Вот эту проблему хочу решить проверкой заблокирована сесия или нет
Как проверить заблокирован сеанс или нет?
Добавлено: 01 июл 2019, 11:38
Dja
А что ctrl+alt+L уже отменили? Нафига эти сложности?
Как проверить заблокирован сеанс или нет?
Добавлено: 01 июл 2019, 11:40
Amadeus
Dja писал(а): ↑01 июл 2019, 11:38
А что ctrl+alt+L уже отменили? Нафига эти сложности?
не отменили, но а почему бы не привязать блокировку к блютус устройству которое всегда при тебе? Да и на винде такой подход мне был удобен, так что почему это не сделать для себя в линуксе?
Как проверить заблокирован сеанс или нет?
Добавлено: 01 июл 2019, 11:44
rogoznik
Amadeus, могу предложить костыльное решение проблемы(должно помочь)
При блокировке создавай в хомяке файл. А потом проверяй наличие файла, если есть то ничего не делать и считать сеанс заблокированным, а при разблокировке файл удалять.
Как проверить заблокирован сеанс или нет?
Добавлено: 01 июл 2019, 11:45
Dja
Потому что это не
винда. Это надо понимать прежде всего. Вы если в космос вылетите тоже будете спрашивать а почему здесь нет воды и песка как на Земле?
Как проверить заблокирован сеанс или нет?
Добавлено: 01 июл 2019, 11:46
WWolf
Dja, ну вот сча ваще нифига не прав

это реально удобно и по политики безопасности ваще отличное решение ;)
Как проверить заблокирован сеанс или нет?
Добавлено: 01 июл 2019, 11:49
Amadeus
Dja писал(а): ↑01 июл 2019, 11:45
Потому что это не винда. Это надо понимать прежде всего. Вы если в космос вылетите тоже будете спрашивать а почему здесь нет воды и песка как на Земле?
Я прекрасно понимаю что это не винда, но кто сказал что это нельзя реализовать? У меня лишь возникла проблема в роботе скрипта который делает практически тоже самое что и функция в винде только с одним не очень хорошим эфектом и вот по этому я обратился сюда. Мне удобно и хотелось бы чтобы происходила блокировка по БТ почему мне нельзя это реализовать?
Как проверить заблокирован сеанс или нет?
Добавлено: 01 июл 2019, 11:51
Dja
А смартфон кстати не будет против?
Это же браслет будет то и дело от смарта к компу и обратно прыгать
Как проверить заблокирован сеанс или нет?
Добавлено: 01 июл 2019, 11:52
rogoznik
Amadeus, что-то такое
Код: Выделить всё
#!/bin/bash
pass="Пароль"
echo $pass | sudo -S | timeout -s INT 15s hcitool lescan | if grep -i -o -q "MAC браслета"; then
{
echo "Mi Band найден."
if [[ -e /home/username/filelock ]]
then
rm /home/username/filelock
fi
}
else
{
if [[ ! -e /home/username/filelock ]]
then
gnome-terminal -- dm-tool lock
touch /home/username/filelock
echo "Mi Band не найден."
else
echo "Mi Band не найден."
fi
}
fi
Как проверить заблокирован сеанс или нет?
Добавлено: 01 июл 2019, 11:55
Chocobo
darkfenix писал(а): ↑01 июл 2019, 11:44
могу предложить костыльное решение проблемы
присоединяюсь, для частного решения собственный триггерфайл выглядит вполне логичным.
А если цепляться уже на уровень глубже, и спрашивать изящней у самой сессии ДЕ - то это где-то в пропертях dbus или флагах dconf должно динамически меняться,
и на время этих поисков и отладки нужного флага искать уже из под второй сессии рутом или другим юзером когда залочен первый.
Как проверить заблокирован сеанс или нет?
Добавлено: 01 июл 2019, 11:58
slant
Amadeus писал(а): ↑01 июл 2019, 11:33
После блокировки крон остановиться? Проблема таки в том что скрипт запускаеться после блокировки сеанса из-за чего и возникает проблема с разблокировкой, именно это и хочу решить.
Нет, не остановится, это я не совсем корректно процитировал - на что ответить хотел. Имелось в виду, что закольцовка скрипта на bash - плохое решение в любом случае. Вне зависимости от содержания.
А по поводу проверки залочки машины - тут два варианта. Либо делать через файл-флаг как предложил darkfenix, либо ковырять dbus-monitor - за отслеживание состояний gnome-подобных DE отвечает он. Но готового решения не предложу, и синтаксис там довольно заморочливый получается.