#!/bin/bash
#Replace with the ID of your USB device
id="ID ffff:1234 Apple, Inc. iPhone 3G"
serial="12345"
#runs every 2 seconds
for ((i=0; i<=30; i++))
do
if [ -z "`lsusb -v 2> /dev/null | grep "$serial"`" ]
then
echo "Device is NOT plugged in"
if [ -n "`DISPLAY=:0 gnome-screensaver-command --query | grep "is active"`" ]
then
if [ -e /tmp/autoUnlock.lock ]
then
#stop locking the screen
rm /tmp/autoUnlock.lock
fi
elif [ -e /tmp/autoUnlock.lock ]
then
DISPLAY=:0 notify-send -t 5000 --icon=dialog-info "iPhone Disconnected" "Locking screen"
#lock the desktop
DISPLAY=:0 gnome-screensaver-command --lock
rm /tmp/autoUnlock.lock
fi
else
echo "iPhone IS plugged in"
if [ ! -e /tmp/autoUnlock.lock ]
then
DISPLAY=:0 gnome-screensaver-command --deactivate
DISPLAY=:0 notify-send -t 5000 --icon=dialog-info "iPhone Connected" "Welcome Back!"
touch /tmp/autoUnlock.lock
fi
fi
sleep 2
done
使用 lsusb 获取要用作“密钥”的 USB 设备的设备 ID,并在此脚本中替换它(称为 checkKey.sh)
#!/bin/sh
key="0a12:0001" #ID of the USB device to use as a "key"
if [ `fuser $0|wc -w` -gt "1" ];then exit; fi # exit if already running
while [ 1 -gt 0 ]; do
device=$(lsusb | grep $key) # is "key" connected?
ss_state=$(gnome-screensaver-command -q | grep inactive) #is screen locked?
if [ -z "$device" ]; then
gnome-screensaver-command -l; #no key, lock the screen
else
if [ -z "$ss_state" ]; then
#key present & screen locked so unlock
gnome-screensaver-command -d;
else
#key present, not locked, just poke it
gnome-screensaver-command -p;
fi
fi
sleep 10; #sleep for a few seconds before looking again
done
在这里找到了由 Evan Boldt 提供的关于如何执行此操作的出色脚本。谢谢埃文!
首先使用lsusb找出您设备的 id
在你的主目录下创建一个脚本(在这个例子中我们使用/home/me/iPhoneLock.sh),看起来像这样:
接下来,编辑您的 crontab:
最后将其配置为每分钟运行一次:
但请注意:当然,这意味着任何拥有您手机的人都可以解锁您的屏幕。一个不错的改进是仅在您的手机已解锁时才解锁您的屏幕。
这当然适用于任何 USB 设备。
该脚本在CC-GNU GPL 2.0 或更高版本下获得许可。
更简单的脚本
使用 lsusb 获取要用作“密钥”的 USB 设备的设备 ID,并在此脚本中替换它(称为 checkKey.sh)
然后只需 cron 每隔几分钟运行一次……这样,如果由于某种原因停止,它将再次启动……脚本应该连续运行,但如果 cron 尝试运行第二个副本,它将退出。要让 cron 影响 GUI 应用程序,比如屏幕保护程序,你必须告诉它要使用哪个显示器,所以把它放在你的 crontab 中(显然正确设置路径)