如何根据我连接的 WIFI 网络禁用锁屏?

如何根据我连接的 WIFI 网络禁用锁屏?

如果我连接到了家庭 wifi 网络,我不希望在从挂起状态恢复或在 X 分钟不活动后出现锁定屏幕。

如果我没有连接到任何 wifi 网络或者 wifi 网络的名称与我的家庭网络不同,我希望锁屏处于活动状态。

我怎样才能做到这一点?

答案1

您可以使用这个shell脚本。检查一下获取你的 WiFi 信息。

#!/bin/sh

trusted_essid="trusted-wifi-name"

while :
do
  current_essid=$(iwgetid -r)
  if [ "$trusted_essid" = "$current_essid" ]
  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

以 root 身份编辑此文件:

sudo gedit /etc/network/interfaces

在 wlan0 (或者你的 Wifi 接口ls /sys/class/net | grep -o "wl[^\t]\+") 下添加:

post-up sh /path/to/wifi-smartlock.sh

答案2

一种现代的方法是使用 NetworkManager 的 dispatcher.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

就是这样。该脚本基本上在您每次连接或断开任何网络时运行。然后,它会检查您刚刚连接的网络是否是您信任的网络,以及屏幕锁当前是否已启用。如果是这种情况,它会禁用屏幕锁,并生成一个临时文件以记住是该脚本禁用了屏幕锁。这很重要,因为如果我们出于任何原因手动(和故意)禁用屏幕锁,我们不希望脚本启用屏幕锁。

每次你断开与任何网络的连接时,脚本都会检查临时文件并重新启用屏幕锁定

希望你觉得它有用!

答案3

当我连接到家庭网络时,我会运行一个脚本来向 gnone-screensaver 发送解锁命令。以下是我想到的:

文件/etc/network/if-up.d/smart-unlock

#!/bin/sh
runuser -l marc -c '/path/to/smart_unlock.py'

用您当前的 替换 marc $USER

文件/path/to/smart_unlock.py

import os

ssid = 'trusted-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)

答案4

对于那些使用 Cinnamon 的人,我在这里准备了一个解决方案:

https://github.com/cookiebinary1/trusted-wifi-area

主要 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

相关内容