colaghost

自己的世界。。。

ubuntu下看flash视频时禁用屏保

最近两天在啃《unix环境高级编程》,一直转在ubuntu下。我吃饭时喜欢一边看电影,可是上优酷看flash视频时又有一个麻烦的地方,就是屏保并不会自动被禁用掉,而是得手动去禁用,看完又得去把它开启,甚是麻烦,就想着自己写一个脚本来实现开启/禁用屏保。

Google了下,关于这方面的结果倒是不少,下面是其中一个脚本:

1
2
3
4
5
6
7
8
#!/bin/sh
while true;
do
    if test -n "`file /tmp/Flash*|grep \"Macromedia Flash Video\\|MPEG v4\"`";then
        gnome-screensaver-command -p
    fi
    sleep 30
done

可惜我发现我的tmp目录下并不会生成/tmp/Flash*,我原先以为是我用shockwave flash的原因,不是在tmp目录下生成缓存。就自己搜索任何可能的目录,看下具体在哪个目录里生成缓存,可惜找不到。

这时候想到linux下是可以通过lsof来监测某一个进程当前打开了哪些文件,结果发现了其实是有在/tmp目录下生成Flash*这样的文件的,只是生成后马上又被删除了,这时候虽说进程还可以进行读写操作,可是在目录下却无法看到。

因此想到了另外一种方法,由于shockwave flash做为chrome下的一个插件,只要监测到chrome载入libgcflashplayer.so的这一个进程打开的所有文件下有/tmp/Flash*类似的文件即可知道当前在播放flash视频,这时候只要运行”gnome-screensaver-commad -p”模拟活动一下即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/sh
while true;
do
	pid=`ps aux | grep /opt/google/chrome/libgcflashplayer.so | grep -v grep | awk '{print $2}'`
	if [ "$pid" != "" ]; then
		data=`lsof -p $pid | grep /tmp/Flash`
		if [ "$data" != "" ]; then
			echo "gnome-screensaver-command"
			gnome-screensaver-command -p
		fi
	fi
	sleep 30
done