下班关机拔U盘的提醒程序

我的U盘是跟钥匙系一起的,最近两次因为U盘插在公司机器上下班后忘了拿,结果回家后在门口游荡,郁闷的等室友回来才有家门进,于是要做这么个东西,关机前检测到没拔U盘,要猛叫猛叫

原理倒是不复杂,研究了下,检测U盘可以读取/proc/bus/usb/devices,如果主机上插有U盘,会出现Driver=usb-storage这一行的。

*Update: * /proc/bus/usb/devices只有在挂载了usbfs才有; usbutils工具里面除了lsusb,还提供了usb-devices工具,列出内容跟/proc/bus/usb/devices是一样的, 更适合。

然后是关机脚本的运行。Linux关机时候会执行level 0的init脚本,比如对于Debian/Ubuntu,就是/etc/rc0.d下的文件,我工作机跑的是Archlinux,专门为用户自定命令提供了/etc/rc.local.shutdown文件,作为/etc/rc.shutdown的hook,前者不会因为initscripts包的升级安装被覆盖。

至于让主机会叫,当然是主机喇叭了,这里可没有外放音箱。查了下发现beep这个程序,安装后发现功能还不少,可以定制beep的音调,时长等,可玩性很高。于是先找了音谱频率对照表,按把美剧《24小时》里面CTU内常用的电话铃声谱了出来,大概是EEGC 或者 EEC^C的样子,不过因为主板蜂鸣器的结构区别,通常不同频率的音量有些不同。

另外当然也应该有点视觉提示啦,在init script里面,终端支持的东西多着呢,按终端颜色代码,让终端打印红色加粗闪烁体,足够显眼了。

最终效果是这样的:

1
2
3
4
5
6
7
8
9
10
#!/bin/bash
#
# /etc/rc.local.shutdown: Local shutdown script.
#
 
while [[ `usb-devices | grep usb-storage` ]]; do
    echo -e "\033[31;1;5m!!!!!!  Unplug Your USB Driver or I'll Keep SCREAMING !!!!!!! \033[0m"
    beep -f 659.3 -l 200 -D 100 -n -f 659.3 -l 200 -D 200 -n -f 1046 -l 200 -D 50 -n -f 523.3 -l 600
    sleep 1;
done;

其他的几组不同八度的响声,记下来以后备用。

1
2
3
4
#!/bin/bash
beep -f 659.3 -l 200 -D 100 -n -f 659.3 -l 200 -D 200 -n -f 784 -l 200 -D 50 -n -f 523.3 -l 600
beep -f 1318.5 -l 200 -D 100 -n -f 1318.5 -l 200 -D 200 -n -f 1568 -l 200 -D 50 -n -f 1046.5 -l 600
beep -f 2637 -l 200 -D 100 -n -f 2637 -l 200 -D 200 -n -f 3136 -l 200 -D 50 -n -f 2093 -l 600
文章分类 Shell, Unix/Linux 标签: , , , , ,
6 comments on “下班关机拔U盘的提醒程序
  1. muzuiget说道:

    哈哈,很geek的做法

  2. 依云说道:

    我这里既没有/proc/bus/usb/devices终端也不会响铃……

    • PT说道:

      没有/proc/bus/usb/devices可以运行usb-device获得相同内容,包含在usbutils内,跟lsusb同个包;

      至于beep,在我家里的本本上也是没声音的,这个跟内核的pcspkr模块有关,不同的硬件有不同的驱动。

  3. vzomik说道:

    记下,以后可能有用。

  4. 左旋肉碱说道:

    呵呵,博主应该是搞技术的哈

  5. H.M 鱼说道:

    猛叫猛叫

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*