Как отключить экран блокировки в зависимости от того, к какой сети 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
Другие вопросы по тегам