Как отключить экран блокировки в зависимости от того, к какой сети WIFI я подключен?
Если я подключен к своей домашней сети Wi-Fi, я не хочу иметь экран блокировки при выходе из режима ожидания или после X минут бездействия.
Если я не подключен к какой-либо сети Wi-Fi или имя сети Wi-Fi отличается от моей домашней сети, я хочу, чтобы экран блокировки был активным.
Как я могу это сделать?
4 ответа
#!/bin/sh
essid="name-here"
while :
do
ausgabe=$(iwgetid -r)
if [ "$essid" = "$ausgabe" ]
then
gsettings set org.gnome.desktop.lockdown disable-lock-screen true
echo 1
else
gsettings set org.gnome.desktop.lockdown disable-lock-screen false
echo 2
fi
sleep 60
done
Попробуй это:
sudo gedit /etc/network/interfaces
добавить под wlan0
post-up sh /path/to/script
Современный способ сделать это — использовать диспетчер NetworkManager.d.
Шаг 1. Создайте скрипт, который делает то, что мы хотим, в файле dispatcher.d:
sudo nano /etc/NetworkManager/dispatcher.d/99-disable-screen-lock
Шаг 2 — скопируйте и вставьте следующий скрипт:
#!/bin/bash -e
trusted_essid="YOUR-NETWORK-ESSID"
user="YOUR-USERNAME"
if [ "$2" = "up" ]; then
if [ "$CONNECTION_ID" = "$trusted_essid" ]; then
if [ `sudo -u $user gsettings get org.gnome.desktop.screensaver lock-enabled` = "true" ]; then
touch /home/$user/.screen_lock_temporarily_disabled
sudo -u $user dbus-launch gsettings set org.gnome.desktop.screensaver lock-enabled 'false'
fi
fi
fi
if [ "$2" = "down" ]; then
if [ -f /home/$user/.screen_lock_temporarily_disabled ]; then
sudo -u $user dbus-launch gsettings set org.gnome.desktop.screensaver lock-enabled 'true'
rm /home/$user/.screen_lock_temporarily_disabled
fi
fi
exit 0
Шаг 3 - Установите скрипт в исполняемый файл
sudo chmod +x /etc/NetworkManager/dispatcher.d/99-disable-screen-lock
Вот и все. Сценарий в основном запускается каждый раз, когда вы подключаетесь или отключаетесь от любой сети. Затем он проверяет, является ли сеть, к которой вы только что подключились, той, которой вы доверяете, и включена ли в данный момент блокировка экрана. Если это так, то он отключает блокировку экрана и создает временный файл, чтобы иметь в виду, что именно этот скрипт отключил блокировку экрана. Это важно, потому что мы не хотим, чтобы скрипт включал блокировку экрана, если мы вручную (и намеренно) отключили ее по какой-либо причине.
Каждый раз, когда вы отключаетесь от любой сети, скрипт проверяет временный файл и снова включает блокировку экрана.
Надеюсь, что вы найдете ее полезной!
Когда я подключаюсь к своей домашней сети, я запускаю скрипт для отправки команды разблокировки в gnone-screensaver. Вот что я придумал:
файл /etc/network/if-up.d/smart-unlock
#!/bin/sh
runuser -l marc -c '/path/to/smart_unlock.py'
файл /path/to/smart_unlock.py
import os
ssid = 'wifi-name'
if os.system("/sbin/iwgetid | /bin/grep %s" % ssid) == 0:
for j in range(2):
os.system(
". ~/.dbus/session-bus/$(cat /var/lib/dbus/machine-id)-%s && "
"export DBUS_SESSION_BUS_ADDRESS DBUS_SESSION_BUS_PID && "
"dbus-send --session --dest=org.gnome.ScreenSaver --type=method_call --print-reply --reply-timeout=20000 /org/gnome/ScreenSaver org.gnome.ScreenSaver.SetActive boolean:false" % j)
Для тех, кто использует Cinnamon, я подготовил решение здесь:
https://github.com/cookiebinary1/доверенная-wifi-зона
Основной скрипт bash (дополнительную информацию см. на github):
#!/bin/sh
current_essid=""
config_file=~/.trusted-wifi-area
while :
do
new_essid=$(iwgetid -r)
if [ "$new_essid" = "" ]
then
new_essid="no-wifi"
fi
if [ "$new_essid" != "$current_essid" ]
then
current_essid="$new_essid"
echo "New wifi: $new_essid"
killall cinnamon-screensaver
sleep 5s
if grep -q "$new_essid" "$config_file"; then
cinnamon-screensaver --disable-locking & echo "Restart screensaver without locking..."
else
cinnamon-screensaver & echo "Restart screensaver with locking..."
fi
fi
sleep 1s
done