使用 xscreensaver 锁定屏幕或打开屏幕
创建 “password” 序列
使用下面的命令在 “create” 模式下运行 knockAge.pl 程序:
perl knockAge.pl -c
现在我们需要创建一个解锁的密码序列;我建议使用 “刮脸和理发的动作”。请确保每次您都可以以一贯精确的方式执行这个动作。尽管您可以通过修改参数来控制输入密码敲打操作所需要的精度,但是这仍然很难匹配精确的时间。“刮脸和理发动作” 除了可以提供稳定的击打顺序之外,其复杂性和简单性对于屏保解锁密码来说也非常适合。下面是一个 “刮脸和理发动作” 的击打序列示例:
0 564025 1185795 621350 516038 960035 444421 _#_ /bin/echo "shave the haircut" _#_ two bits
在进行下一步操作之前,您应该体验一下上面的命令和 ~/.knockFile 配置文件中的双击命令。这可以在屏保运行时提供很好的帮助,它更难检测出敲打是否正确。
xscreensaver 所使用的命令配置
以下设置假设您已经登录到了窗口管理器中,并且已经使用您的 userid 启动了xscreensaver 程序。例如,如果您正在运行 Fedora Core 4,并且使用 gdm 登录到 KDE 中,那么 xscreensaver 就会自动启动。因此,要激活它,则需要将双击命令从:
/bin/echo "double tap"
修改为:
xscreensaver-command -activate &
现在,每次识别出有 “双击” 事件发生时,xscreensaver 程序都会使用所指定的内容来激活。一旦 screensaver 被激活,就可以通过输入密码(如果是这样配置的)对屏幕进行解锁。不过我们真正希望的是自己的朋友也可以使用密码解锁代码来解除屏保。因此,我们需要在 ~/.knockFile 文件中将下面的命令:
/bin/echo "shave the haircut"
替换为:
killall xscreensaver ; nohup xscreensaver -nosplash >/dev/null 2>/dev/null &
这个命令会停止当前运行的所有 xscreensaver 程序,然后在后台再重新启动 xscreensaver。现在我们可以通过敲打屏幕边来重复加锁和解锁计算机屏保的过程。这比蓝牙提供的近似度加锁更加安全或更方便吗?答案可能是否定的。它更酷吗?当然!
更多例子
HDAPS 传感器和 knockAge.pl 程序提供了另外一种用户输入设备,我们可以使用它们以独特的方式进行输入。例如:
- 如果计划在一个基础上测试新的 X 配置文件,可以将双击条目更改为重新启动配置好的 X 服务器。这样就不需要敲任何其他键来强制重启了。
- 在命令区中可以放上我们喜欢使用的任何 shell 脚本,这样就可以使用双击来查看 e-mail。
- 以最新的组合节拍进行敲打,让 ThinkLight 显示 WWII 代在 Kinakuta 的黄金存储设备的 Morse 密码位置。
- 敲入 Morse 编码,防止键盘输入被记录。
请参阅 参考资料 部分给出的有关将 ThinkPad 的倾斜度用于游戏、显示工具的例子。或者直接跳过这部分内容,将 Threshold 变量设置为 15,这样您使劲踢一脚 ThinkPad,它就会自动重启了。
knockAge.pl 代码
历史和策略
Jeff Molofee 所编写的 hdaps-gl.c 是 knockAge.pl 代码的基础。Hdaps-gl.c 是一个非常好的展示程序,可以展示如何使用倾斜传感器来实时地显示有关 ThinkPad 的方向的信息。二者之间的区别是本例将时间上隔离的事件组织在一起创建了敲打事件,同时提供了相关的代码来创建并监听敲打事件序列。
参数配置
下面让我们来使用对时间和传感器敏感的一些参数来启动 knockAge.pl:
清单 1. 主程序参数
require 'sys/syscall.ph'; # for subsecond timing
my $option = $ARGV[0] || ""; # simple option handling
# filename for hdaps sensor reads
my $hdapsFN = "/sys/devices/platform/hdaps/position";
my $UPDATE_THRESHOLD = 4; # threshold of force that indicates a knock
my $INTERVAL_THRESHOLD = 100000; # microseconds of time required between knock
# events
my $SLEEP_INTERVAL = 0.01; # time to pause between hdaps reads
my $MAX_TIMEOUT_LENGTH = 4; # maximum length in seconds of knock pattern
# length
my $MAX_KNOCK_DEV = 100000; # maximum acceptable deviation between recorded
# pattern values and knocking values
my $LISTEN_TIMEOUT = 2; # timeout value in seconds between knock
# events when in listening mode
|
本新闻共
6页,当前在第
2页
1 2 3 4 5 6