Как проверить заблокирован сеанс или нет?

Языки программирования, IDE, компиляторы, интерпретаторы, гипервизоры и виртуальные среды
Правила форума
Как правильно задавать вопросы Правильно сформулированный вопрос и его грамотное оформление способствует высокой вероятности получения достаточно содержательного и по существу ответа. Общая рекомендация по составлению тем: 1. Версия ОС вместе с разрядностью. Пример: LM 18.1 x64, LM Sarah x32 2. DE. Если вопрос касается двух, то через запятую. (xfce, KDE, cinnamon, mate) 3. Какое железо. (достаточно вывод inxi -Fxz в спойлере (как пользоваться спойлером смотрим здесь)) или же дать ссылку на hw-probe 4. Суть. Желательно с выводом консоли, логами. 5. Скрин. Просьба указывать 1, 2 и 3 независимо от того, имеет ли это отношение к вопросу или нет. Так же не забываем об общих правилах Как пример вот

Автор темы
Amadeus
Сообщения: 30
Зарегистрирован: 01 авг 2018, 19:25

Как проверить заблокирован сеанс или нет?

Сообщение Amadeus » 01 июл 2019, 08:05

Написал небольшой скрипт для автоматической блокировки ноутбука по синезубу, вроде как всё работает, но после блокировки (именно блокировка сеанса, не сон) скрипт продолжает работать из-за чего после разблокировать сессию практически не реально, после ввода пароля снова блокирует сессию.
Вопрос таков, как можно проверить заблокирована сессия или нет? Чтобы добавить в скрипт условия при котором если сессия заблокирована (на экране блокировки) то скрипт не должен выполняться.
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

Решение rogoznik » 01 июл 2019, 08:52
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

Перейти к ответу ➙

Аватара пользователя

Dja
Сообщения: 6224
Зарегистрирован: 27 авг 2016, 17:03
Решено: 27
Откуда: Voskresensk
Благодарил (а): 921 раз
Поблагодарили: 661 раз

Как проверить заблокирован сеанс или нет?

Сообщение Dja » 01 июл 2019, 08:09

Код: Выделить всё

fi
done
Не?

Аватара пользователя

rogoznik
Сообщения: 5800
Зарегистрирован: 27 июн 2017, 10:36
Решено: 62
Откуда: Нижний Тагил
Благодарил (а): 321 раз
Поблагодарили: 1065 раз

Как проверить заблокирован сеанс или нет?

Сообщение rogoznik » 01 июл 2019, 08:10

Dja, я бы сделал
ИзображениеИзображение


Автор темы
Amadeus
Сообщения: 30
Зарегистрирован: 01 авг 2018, 19:25

Как проверить заблокирован сеанс или нет?

Сообщение Amadeus » 01 июл 2019, 08:16

darkfenix писал(а):
01 июл 2019, 08:10
я бы сделал
Dja писал(а):
01 июл 2019, 08:09
Не?
Так то можно сделать, но после нужно будет снова запускать скрипт, а этого делать не хотелось бы, тоисть хотелось бы чтоб он работал постоянно со старта системы и понимал когда экран заблокирован.

Аватара пользователя

WWolf
Сообщения: 1485
Зарегистрирован: 13 фев 2018, 21:51
Решено: 5
Откуда: Краснодар
Благодарил (а): 515 раз
Поблагодарили: 345 раз

Как проверить заблокирован сеанс или нет?

Сообщение WWolf » 01 июл 2019, 08:20

Amadeus писал(а):
01 июл 2019, 08:05
после разблокировать сессию практически не реально, после ввода пароля снова блокирует сессию.
таймаут опроса браслета уменьшить?
просто получается что разблокируем, браслета не находим и тут же снова лочимся...
в эту сторону копать надо...

опять же какое-то кривое состояние получается... если блютуз не включен, то вечный лок? :crazy:


Автор темы
Amadeus
Сообщения: 30
Зарегистрирован: 01 авг 2018, 19:25

Как проверить заблокирован сеанс или нет?

Сообщение Amadeus » 01 июл 2019, 08:26

WWolf писал(а):
01 июл 2019, 08:20
таймаут опроса браслета уменьшить?
оно и опрашивает раз в 30 секунд чего как по мне достаточно.
WWolf писал(а):
01 июл 2019, 08:20
опять же какое-то кривое состояние получается... если блютуз не включен, то вечный лок?
Да согласен здесь криво и не продумано, но пока что это на потом.

Аватара пользователя

slant
Сообщения: 1979
Зарегистрирован: 21 июн 2017, 15:09
Решено: 34
Благодарил (а): 16 раз
Поблагодарили: 851 раз

Как проверить заблокирован сеанс или нет?

Сообщение slant » 01 июл 2019, 08:28

Amadeus писал(а):
01 июл 2019, 08:16
Так то можно сделать, но после нужно будет снова запускать скрипт, а этого делать не хотелось бы, тоисть хотелось бы чтоб он работал постоянно со старта системы и понимал когда экран заблокирован.
Bash - он не для написания демонов. Скрипт закольцованный таким образом будет жрать больше ресурсов, чем он же запускаемый с минутной периодичностью через cron. Так что не занимайтесь ерундой, а просто добавьте запуск вашего скрипта в crontab с периодом в одну минуту, и получите желаемое.

Аватара пользователя

WWolf
Сообщения: 1485
Зарегистрирован: 13 фев 2018, 21:51
Решено: 5
Откуда: Краснодар
Благодарил (а): 515 раз
Поблагодарили: 345 раз

Как проверить заблокирован сеанс или нет?

Сообщение WWolf » 01 июл 2019, 08:31

Amadeus писал(а):
01 июл 2019, 08:26
оно и опрашивает раз в 30 секунд чего как по мне достаточно
для блокировки достаточно, тут не поспоришь... опять же если не стабильно держится...
но у нас проблема с разблокировкой... как быстро выясняется состояние браслета при разлоке? в каком состоянии блютуз? сюда копай


Автор темы
Amadeus
Сообщения: 30
Зарегистрирован: 01 авг 2018, 19:25

Как проверить заблокирован сеанс или нет?

Сообщение Amadeus » 01 июл 2019, 08:33

slant писал(а):
01 июл 2019, 08:28
просто добавьте запуск вашего скрипта в crontab с периодом в одну минуту, и получите желаемое.
После блокировки крон остановиться? Проблема таки в том что скрипт запускаеться после блокировки сеанса из-за чего и возникает проблема с разблокировкой, именно это и хочу решить. Другими словами крон не должен запускать когда устройство попало на экран блокировки.
Последний раз редактировалось пользователем 1 Amadeus; всего редактировалось раз: 1


Автор темы
Amadeus
Сообщения: 30
Зарегистрирован: 01 авг 2018, 19:25

Как проверить заблокирован сеанс или нет?

Сообщение Amadeus » 01 июл 2019, 08:37

WWolf писал(а):
01 июл 2019, 08:31
но у нас проблема с разблокировкой... как быстро выясняется состояние браслета при разлоке? в каком состоянии блютуз? сюда копай
Именно в этом и проблема, как показало наблюдение, при блокировке, спустя 30 секунд скрипт снова запускаеться и не находит браслет, посылает команду блокировки, и при попытке разблокировать после ввода пароля он выполняет команды блокировки которые накопились за время моего отсутствие. Вот эту проблему хочу решить проверкой заблокирована сесия или нет

Аватара пользователя

Dja
Сообщения: 6224
Зарегистрирован: 27 авг 2016, 17:03
Решено: 27
Откуда: Voskresensk
Благодарил (а): 921 раз
Поблагодарили: 661 раз

Как проверить заблокирован сеанс или нет?

Сообщение Dja » 01 июл 2019, 08:38

А что ctrl+alt+L уже отменили? Нафига эти сложности?


Автор темы
Amadeus
Сообщения: 30
Зарегистрирован: 01 авг 2018, 19:25

Как проверить заблокирован сеанс или нет?

Сообщение Amadeus » 01 июл 2019, 08:40

Dja писал(а):
01 июл 2019, 08:38
А что ctrl+alt+L уже отменили? Нафига эти сложности?
не отменили, но а почему бы не привязать блокировку к блютус устройству которое всегда при тебе? Да и на винде такой подход мне был удобен, так что почему это не сделать для себя в линуксе?

Аватара пользователя

rogoznik
Сообщения: 5800
Зарегистрирован: 27 июн 2017, 10:36
Решено: 62
Откуда: Нижний Тагил
Благодарил (а): 321 раз
Поблагодарили: 1065 раз

Как проверить заблокирован сеанс или нет?

Сообщение rogoznik » 01 июл 2019, 08:44

Amadeus, могу предложить костыльное решение проблемы(должно помочь)
При блокировке создавай в хомяке файл. А потом проверяй наличие файла, если есть то ничего не делать и считать сеанс заблокированным, а при разблокировке файл удалять.
ИзображениеИзображение

Аватара пользователя

Dja
Сообщения: 6224
Зарегистрирован: 27 авг 2016, 17:03
Решено: 27
Откуда: Voskresensk
Благодарил (а): 921 раз
Поблагодарили: 661 раз

Как проверить заблокирован сеанс или нет?

Сообщение Dja » 01 июл 2019, 08:45

Потому что это не винда. Это надо понимать прежде всего. Вы если в космос вылетите тоже будете спрашивать а почему здесь нет воды и песка как на Земле?

Аватара пользователя

WWolf
Сообщения: 1485
Зарегистрирован: 13 фев 2018, 21:51
Решено: 5
Откуда: Краснодар
Благодарил (а): 515 раз
Поблагодарили: 345 раз

Как проверить заблокирован сеанс или нет?

Сообщение WWolf » 01 июл 2019, 08:46

Dja, ну вот сча ваще нифига не прав :) это реально удобно и по политики безопасности ваще отличное решение ;)


Автор темы
Amadeus
Сообщения: 30
Зарегистрирован: 01 авг 2018, 19:25

Как проверить заблокирован сеанс или нет?

Сообщение Amadeus » 01 июл 2019, 08:49

Dja писал(а):
01 июл 2019, 08:45
Потому что это не винда. Это надо понимать прежде всего. Вы если в космос вылетите тоже будете спрашивать а почему здесь нет воды и песка как на Земле?
Я прекрасно понимаю что это не винда, но кто сказал что это нельзя реализовать? У меня лишь возникла проблема в роботе скрипта который делает практически тоже самое что и функция в винде только с одним не очень хорошим эфектом и вот по этому я обратился сюда. Мне удобно и хотелось бы чтобы происходила блокировка по БТ почему мне нельзя это реализовать?

Аватара пользователя

Dja
Сообщения: 6224
Зарегистрирован: 27 авг 2016, 17:03
Решено: 27
Откуда: Voskresensk
Благодарил (а): 921 раз
Поблагодарили: 661 раз

Как проверить заблокирован сеанс или нет?

Сообщение Dja » 01 июл 2019, 08:51

А смартфон кстати не будет против?
Это же браслет будет то и дело от смарта к компу и обратно прыгать

Аватара пользователя

rogoznik
Сообщения: 5800
Зарегистрирован: 27 июн 2017, 10:36
Решено: 62
Откуда: Нижний Тагил
Благодарил (а): 321 раз
Поблагодарили: 1065 раз

Как проверить заблокирован сеанс или нет?

Сообщение rogoznik » 01 июл 2019, 08:52

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
ИзображениеИзображение

Аватара пользователя

Chocobo
Сообщения: 9268
Зарегистрирован: 27 авг 2016, 19:57
Решено: 200
Откуда: НН
Благодарил (а): 645 раз
Поблагодарили: 2677 раз

Как проверить заблокирован сеанс или нет?

Сообщение Chocobo » 01 июл 2019, 08:55

darkfenix писал(а):
01 июл 2019, 08:44
могу предложить костыльное решение проблемы
присоединяюсь, для частного решения собственный триггерфайл выглядит вполне логичным.

А если цепляться уже на уровень глубже, и спрашивать изящней у самой сессии ДЕ - то это где-то в пропертях dbus или флагах dconf должно динамически меняться,
и на время этих поисков и отладки нужного флага искать уже из под второй сессии рутом или другим юзером когда залочен первый.
Изображение
   
Изображение

Аватара пользователя

slant
Сообщения: 1979
Зарегистрирован: 21 июн 2017, 15:09
Решено: 34
Благодарил (а): 16 раз
Поблагодарили: 851 раз

Как проверить заблокирован сеанс или нет?

Сообщение slant » 01 июл 2019, 08:58

Amadeus писал(а):
01 июл 2019, 08:33
После блокировки крон остановиться? Проблема таки в том что скрипт запускаеться после блокировки сеанса из-за чего и возникает проблема с разблокировкой, именно это и хочу решить.
Нет, не остановится, это я не совсем корректно процитировал - на что ответить хотел. Имелось в виду, что закольцовка скрипта на bash - плохое решение в любом случае. Вне зависимости от содержания.

А по поводу проверки залочки машины - тут два варианта. Либо делать через файл-флаг как предложил darkfenix, либо ковырять dbus-monitor - за отслеживание состояний gnome-подобных DE отвечает он. Но готового решения не предложу, и синтаксис там довольно заморочливый получается.
Последний раз редактировалось пользователем 1 slant; всего редактировалось раз: 1

Вернуться в «Программирование, скриптинг, виртуализация»