如果我连接到了家庭 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